我使用 live555 接收 RTP 视频帧(以 H264 编码的帧)。我使用 Live555 打开我的本地 .sdp 文件来接收帧数据。刚刚看到DummySink::afterGettingFrame被不断调用。如果DummySink中的fReceiveBuffer是正确的,为什么FFMPEG不能解码帧?我的代码错了?
这是我的代码片段:
http://paste.ubuntu.com/12529740/
函数 avcodec_decode_video2 总是返回失败,它的值小于零
fReceiveBuffer 是否存在一帧视频?
哦,这是我需要打开相关视频解码器的FFMPEG初始化代码:
http://paste.ubuntu.com/12529760/
最佳答案
再次阅读H264相关文档,发现I-frame(IDR)需要将SPS/PPS以0x00000001分隔的方式插入到header中,解码器有能力正确解码帧。这是一个相关的解决方案
FFmpeg can't decode H264 stream/frame data
Decoding h264 frames from RTP stream
现在,我的应用程序工作正常,它可以解码帧并将其转换为 OSD 图像以显示到屏幕。
关于c++ - 为什么我的应用程序无法解码 RTSP 流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32735471/