音视频编解码-ffmpeg解码
每次编解码必须先进行初始化组件av-register-all(),如果需要网络还需要avformat-network-init();
avformat-alloc-context()返回一个指向AVFormatContext的指针,AVFormatContext是一个用于处理封装格式的结构体;
AVStream,AVCodecContext视音频流对应的结构体,用于视音频编解码。
AVFormatContext里面存储有一个流的list
/**
* @deprecated use the codecpar struct instead
*/
attribute_deprecated
AVCodecContext *codec;
编译的时候也警告说是过时了,要用codecpar替代,而codecpar是一个AVCodecParameters类型的指针
所有改完,生成.so文件不再报错后,部署到手机上,运行又报错:
JNI DETECTED ERROR IN APPLICATION: invalid reference returned from java.lang.String luofeng.com.ffmpegdemo.FFmpegUtils.getFFmpegInfo1()
09-28 10:27:14.363 18198-18198/luofeng.com.ffmpegdemo A/art: art/runtime/check_jni.cc:65] from java.lang.String luofeng.com.ffmpegdemo.FFmpegUtils.getFFmpegInfo1()
这个是由于我开的cmd命令行目录占据着build文件夹,导致makeclean也无法重新build程序,也就是说新的改动没有生效。
然后运行后又报错,是日志报的错avformat_open_input返回值不对,找答案找不到,最后发现忘了添加读写内存卡的权限。添加之后正常解码出了视频文件为YUV视频帧序列。
在一些步骤返回错误码,若要知道错误码的错误类型可以用
char buf2[500] = {0};
av_strerror(ret, buf2, 1024);
将错误内容查询出来,再在log中输出即可。