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