package main import ( "fmt" "os" ffmpeg "github.com/qrtc/ffmpeg-dev-go" ) func typeString(_type int32) string { switch _type { case ffmpeg.AVIO_ENTRY_DIRECTORY: return "" case ffmpeg.AVIO_ENTRY_FILE: return "" case ffmpeg.AVIO_ENTRY_BLOCK_DEVICE: return "" case ffmpeg.AVIO_ENTRY_CHARACTER_DEVICE: return "" case ffmpeg.AVIO_ENTRY_NAMED_PIPE: return "" case ffmpeg.AVIO_ENTRY_SYMBOLIC_LINK: return "" case ffmpeg.AVIO_ENTRY_SOCKET: return "" case ffmpeg.AVIO_ENTRY_SERVER: return "" case ffmpeg.AVIO_ENTRY_SHARE: return "" case ffmpeg.AVIO_ENTRY_WORKGROUP: return "" case ffmpeg.AVIO_ENTRY_UNKNOWN: default: break } return "" } func listOp(inputDir string) int32 { var entry *ffmpeg.AVIODirEntry var ctx *ffmpeg.AVIODirContext var cnt, ret int32 var filemode, uidAndGid string if ret = ffmpeg.AvIOOpenDir(&ctx, inputDir, nil); ret < 0 { ffmpeg.AvLog(nil, ffmpeg.AV_LOG_ERROR, "Cannot open directory: %s.\n", ffmpeg.AvErr2str(ret)) goto fail } for { if ret = ffmpeg.AvIOReadDir(ctx, &entry); ret < 0 { ffmpeg.AvLog(nil, ffmpeg.AV_LOG_ERROR, "Cannot list directory: %s.\n", ffmpeg.AvErr2str(ret)) goto fail } if entry == nil { break } if entry.GetFilemode() == -1 { filemode = "???" } else { filemode = fmt.Sprintf("%3d", entry.GetFilemode()) } uidAndGid = fmt.Sprintf("%d(%d)", entry.GetUserId(), entry.GetGroupId()) if cnt == 0 { ffmpeg.AvLog(nil, ffmpeg.AV_LOG_INFO, "%-9s %12s %30s %10s %s %16s %16s %16s\n", "TYPE", "SIZE", "NAME", "UID(GID)", "UGO", "MODIFIED", "ACCESSED", "STATUS_CHANGED") } ffmpeg.AvLog(nil, ffmpeg.AV_LOG_INFO, "%-9s %12d %30s %10s %s %d %d %d\n", typeString(entry.GetType()), entry.GetSize(), entry.GetName(), uidAndGid, filemode, entry.GetModificationTimestamp(), entry.GetAccessTimestamp(), entry.GetStatusChangeTimestamp()) ffmpeg.AvIOFreeDirectoryEntry(&entry) cnt++ } fail: ffmpeg.AvIOCloseDir(&ctx) return ret } func usage(programName string) { fmt.Fprintf(os.Stderr, "usage: %s input_dir\n"+ "API example program to show how to list files in directory "+ "accessed through AVIOContext.\n", programName) os.Exit(1) } func main() { var ret int32 ffmpeg.AvLogSetLevel(ffmpeg.AV_LOG_DEBUG) if len(os.Args) < 2 { usage(os.Args[0]) os.Exit(1) } ffmpeg.AvFormatNetworkInit() ret = listOp(os.Args[1]) ffmpeg.AvFormatNetworkDeinit() if ret < 0 { os.Exit(1) } }