c++ - libavformat:在 C++ 中获取格式 Mime 类型

标签 c++ ffmpeg mime-types libav libavformat

我在 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 将始终返回 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);

关于c++ - libavformat:在 C++ 中获取格式 Mime 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45589437/

相关文章:

ffmpeg - 当 ffprobe 找不到流的编解码器参数时如何获取 xml/json 输出

c# - 文件 MIME 类型检查

c++ - "No matching function"模板函数接受回调

c++ - 我的 if 、 else if 和 else 循环有什么问题?

c++ - 将公钥与 Crypto++ 的 ECDH 类配合使用

c++ - 访问具有单状态的变体

ios - 如何在 iOS 中编码流式视频?

qt - ffmpeg 的链接器错误

php - 安全地允许通过 MIME TYPES/fil 上传网络字体(ttf、eot、svg、woff、otf)

gzip - 无法让 iis7 转为 gzip font-face 字体文件