ffmpeg Provided packet is too small, needs to be
我们在调用
avcodec_encode_xxxx
的时候,会出现上面的错误,原因是没有初始化
AVPacket
例如:
ret = avcodec_encode_audio2( pEncCodecCtx, &encPkt, encFrame, &got_output);
也就是说encPkt没有初始化,ffmpeg为初始化提供了一个api
av_init_packet
但是仅仅调用这个函数是不够的,依然会得到上面的错误,av_init_packet实现在libavcodec/avpacket.c
看看av_init_packet的实现:
33 void av_init_packet(AVPacket *pkt)
34 {
35 pkt->pts = AV_NOPTS_VALUE;
36 pkt->dts = AV_NOPTS_VALUE;
37 pkt->pos = -1;
38 pkt->duration = 0;
39 pkt->convergence_duration = 0;
40 pkt->flags = 0;
41 pkt->stream_index = 0;
42 pkt->buf = NULL;
43 pkt->side_data = NULL;
44 pkt->side_data_elems = 0;
45 }
可以看到并没有初始化data和size,因此除了调用av_init_packet这个函数外还需要初始化data和size
av_init_packet(&pkt);
pkt.size = 0;
pkt.data = NULL;
avcodec_encode_xxx( …, &pkt …. )
其实ffmpeg的官方提供的example里面就有这样的函数
https://www.ffmpeg.org/doxygen/2.2/transcode_aac_8c-example.html
版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章转载自:IT夜班车,否则按侵权处理 .