最新的ffmpeg解不已实时网络264码流
最新的ffmpeg解不了实时网络264码流<br />
各位同学有用最新的ffmpeg解过网络实时264码流的吗?我试了无数的方法都解不开。下面是大致的代码,
初始化:
avlogsetcallback( avlog_callback );
avcodecregisterall();
avCodec = avcodecfinddecoder( CODECIDH264 );
avParserContext = avparserinit( CODECIDH264 );
avContext = avcodecalloccontext3( avCodec );
avContext->codecid = CODECID_H264;
avFrame = avcodecallocframe();
int numBytes = avpicturegetsize(PIXFMTYUV420P, 720,576);
avBuf = (uint8_t*)malloc(numBytes);
avpicturefill((AVPicture *)avFrame, avBuf, PIXFMT_YUV420P,720, 576);
if(avCodec->capabilities & CODECCAPTRUNCATED)
avContext->flags|= CODECFLAGTRUNCATED;
avcodec_open2( avContext, avCodec, NULL)
解码:
while( curr264nalu_size )
{
unsigned char* buf = 0;
int buf_len = 0;
int len = avparserparse2(
avParserContext, avContext,
&buf, &buf_len,<br />
curr264naluptr , curr264nalusize ,
0, 0, 0);<br />
curr264nalu_ptr += len;
curr264nalu_size -= len;
if( buf_len > 0 )
{
AVPacket avpkt = {0};
avpkt.data = buf;
avpkt.size = buf_len;
avcodecdecodevideo2(this->avContext, this->avFrame, &got_picture, &avpkt);
if( got_picture )
{
....
}
}
在解码时got_picture永远为0.
而如果把收到的每一个curr264nalu都写入文件,文件可以用暴风影音正常播放。
我使用的dll,lib来自ffmpeg-20130514-git-56ba331-win32-shared。
哪位大侠看出是我代码的问题,还是该版本的ffmpeg就有问题呢?
Answers
提供一下思路吧,如果使用ffmpeg的接口的话,最好是用avreadframe的方法得到每一帧数据,然后调用解码函数,但是你的是网络流,那么需要注册自己的read函数,需要调用avioalloccontext(buf, BUFSIZE, 0, NULL, readdata, NULL, NULL)接口,调用你的网络读数据的接口,可以参照
建议你第一步先用ffmpeg的接口解码你保存的H264数据文件,然后在参照上面的网页,修改位网络数据。注意检查一些ffmpeg的返回值,并且注意h264的解码需要PPS和SPS参数,要看看这些参数是在每一个I帧前面,还是说通过RTSP的SDP会话来的(也可能你是http的)