Я недавно собрал ffmpeg 4.0.2 в качестве разделяемых библиотек для включения в проект Android с помощью этого учебного руководства: введите описание ссылки здесь
сборка прошла успешно, но моим библиотекам не хватает нескольких кодеков, таких каккак msvideo1, xanwc4, ...
Я проверил файлы c в папке libavcodec, в папке ffmpeg4.0.2 не удалось найти много форматов кодеков.Например, папка libavcodec содержит файл с именем xan.c, который содержит функцию для xan, xanwc3, но не для xanwc4.Но в libvcodec / xxan.c найден кодек xanwc4, но все же avcodec_open2 () возвращает -22.avcodec_open2 () возвращает -22 для каждого кодека.
Может кто-нибудь помочь мне понять, как заставить мой .apk работать на каждом кодеке и форматах? Что делать с отсутствующими кодеками?
c-исходный код здесь:
const char *name;
int i,videostream;
name= (*env)->GetStringUTFChars(env, argv_,0);
AVFormatContext *pFormatctx=NULL;
if (avformat_open_input(&pFormatctx,name,NULL,NULL)!=0){
return (*env)->NewStringUTF(env,"a");
}
if(pFormatctx==NULL){
return (*env)->NewStringUTF(env,"b");
}
if(avformat_find_stream_info(pFormatctx,NULL)<0){
return (*env)->NewStringUTF(env,"c");
}
av_dump_format(pFormatctx, 0, name, 0);
videostream=-1;
AVCodecContext *pCodecCtxOrig = NULL;
AVCodecContext *pCodecCtx = NULL;
for (i==0;i<pFormatctx->nb_streams;i++){
if((pFormatctx->streams[i]->codecpar->codec_type)==AVMEDIA_TYPE_VIDEO){
videostream=i;
break;
}
}
if(videostream==-1){
return (*env)->NewStringUTF(env,"d");
}
pCodecCtxOrig=pFormatctx->streams[videostream]->codecpar;
AVCodec *pCodec = NULL;
pCodec=avcodec_find_decoder(pCodecCtxOrig->codec_id);
if(pCodec==NULL){
return (*env)->NewStringUTF(env,"e");
}
pCodecCtx=avcodec_alloc_context3(pCodec);
if((avcodec_parameters_to_context(pCodecCtx,pCodecCtxOrig))!=0){
return (*env)->NewStringUTF(env,"f");
}
if(avcodec_open2(pCodecCtx,pCodec,NULL)<0){
return (*env)->NewStringUTF(env,"g");
}