libavformat:在 C++ 中获取格式 Mime 类型
libavformat: get formats Mime Type in C++
我在 Arch Linux 上开发一个 C++ 应用程序 运行,它应该使用 libavformat 来获取媒体文件 mime 类型。当前使用以下行:
std::string path = "/path/to/file.extension";
av_register_all();
AVFormatContext* pFormatCtx = avformat_alloc_context();
avformat_open_input(&pFormatCtx, path.c_str(), NULL, NULL);
avformat_find_stream_info(pFormatCtx, NULL);
std::string mimeType(pFormatCtx->iformat->mime_type);
现在,这将按预期处理 *.mkv (Matroska) 文件。返回预期的逗号分隔的 mimeType 字符串 "video/x-matroska,..."。但是对于任何其他文件格式,如 *.mp4 或 *.avi,iformat->mime_type 将始终 return NULL。
如何获取其他容器格式的 Mime 类型?
似乎 avformat_find_stream_info
只设置了 iformat
而且最
AVInputFormat
变量不初始化 mime_type
字段。
您也可以使用
AVOutputFormat* format = av_guess_format(NULL,path.c_str(),NULL);
if(format)
printf("%s\n",format->mime_type);
我在 Arch Linux 上开发一个 C++ 应用程序 运行,它应该使用 libavformat 来获取媒体文件 mime 类型。当前使用以下行:
std::string path = "/path/to/file.extension";
av_register_all();
AVFormatContext* pFormatCtx = avformat_alloc_context();
avformat_open_input(&pFormatCtx, path.c_str(), NULL, NULL);
avformat_find_stream_info(pFormatCtx, NULL);
std::string mimeType(pFormatCtx->iformat->mime_type);
现在,这将按预期处理 *.mkv (Matroska) 文件。返回预期的逗号分隔的 mimeType 字符串 "video/x-matroska,..."。但是对于任何其他文件格式,如 *.mp4 或 *.avi,iformat->mime_type 将始终 return NULL。
如何获取其他容器格式的 Mime 类型?
似乎 avformat_find_stream_info
只设置了 iformat
而且最
AVInputFormat
变量不初始化 mime_type
字段。
您也可以使用
AVOutputFormat* format = av_guess_format(NULL,path.c_str(),NULL);
if(format)
printf("%s\n",format->mime_type);