libavformat: получить форматы Mime Type в C++

Я работаю над приложением C++, работающим в Arch Linux, которое должно использовать 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 ответ

Решение

Кажется, что 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);
Другие вопросы по тегам