libavformat:在C ++中获取格式Mime Type

时间:2017-08-09 11:30:21

标签: 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类型?

1 个答案:

答案 0 :(得分:2)

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);