2017-08-09 13 views
0

Je travaille sur une application C++ fonctionnant sous Arch Linux qui devrait utiliser libavformat pour obtenir un type mime de fichiers média. Actuellement en utilisant les lignes suivantes:libavformat: obtenir les formats Type MIME en C++

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

Maintenant, cela fonctionnera comme prévu avec les fichiers * .mkv (Matroska). Renvoi de la virgule attendue mimeType String "video/x-matroska, ...". Mais avec tout autre format de fichier comme * .mp4 ou * .avi, iformat-> mime_type retournera toujours NULL.

Comment obtenir les types MIME des autres formats de conteneur?

Répondre

1

Il semble que seuls les ensembles avformat_find_stream_infoiformat et que la plupart AVInputFormat variables n'initialize pas le champ mime_type.

Vous pouvez également utiliser

AVOutputFormat* format = av_guess_format(NULL,path.c_str(),NULL); 
if(format) 
    printf("%s\n",format->mime_type);