h264 解码 rtsp link 错误
h264 decoding rtsp link error
我正在使用 live555 库接收 RTSP 流并使用 ffmpeg 对其进行解码。
起初,我无法解码来自 live555 的数据。经过一番搜索后,我了解到在将帧发送到 FFmpeg 之前,我需要为我的帧数据包含序列 (SPS) 和图片参数集 (PPS)。
header : 00 00 00 01 67 4d 00 14 95 b8 58 25 90 00 00 00 01 68 ee 3c 80 00 00 00 01
FFmpeg can't decode H264 stream/frame data
现在我可以拍摄框架了,但是出现了一个小问题。 [![在此处输入图片描述][1]][1]
3包还有问题。 FFmpeg 无法解码它们我建议它们是特殊命令。因为9,4和5字节这么小就来了。
他们在这里
[h264@0x137c00]无帧!
00 00 00 01 67 4d 00 14 95 b8 58 25 90 00 00 00 01 68 ee 3c 80 00 00 00 01 67 4d 00 14 95 b8 58 25 90
[h264@0x137c00] 无帧!
00 00 00 01 67 4d 00 14 95 b8 58 25 90 00 00 00 01 68 ee 3c 80 00 00 00 01 68 ee 3c 80
[h264@0x137c00] 无帧!
00 00 00 01 67 4d 00 14 95 b8 58 25 90 00 00 00 01 68 ee 3c 80 00 00 00 01 06 e5 01 ec 80
[h264@0x137c00] 没有帧!
有什么建议吗?
00 00 00 01 67开头的数据包是你的SPS,00 00 00 01 68是你的PPS。您可能想使用 h264 AVParser 将 PPS/SPS/frame 组合成单个数据包,这正是 ffh264 解码器所期望的。典型的 RTSP 流(或任何网络流)将每隔几秒左右重复一次 PPS/SPS。
好的,我可能已经解决了问题。我在解码帧之前添加了解析操作。
avparser= av_parser_init(AV_CODEC_ID_H264);
len= av_parser_parse2(avparser,mCodecContext,&data,&lenght_parse,encodedFrame,encodedFrameSize,0,0,0);
while(encodedFrameSize)
{
len= av_parser_parse2(avparser,mCodecContext,&data,&lenght_parse,encodedFrame,encodedFrameSize,0,0,0);
encodedFrame += len;
encodedFrameSize -=len;
if(lenght_parse)
{
av_init_packet(&pkt);
pkt.data=data;
pkt.size=lenght_parse;
length = avcodec_decode_video2(mCodecContext,decodedFrame,&gotFrame,&pkt);
}
}
昨天测试了app,新问题出来了。应用程序在 4-5 小时后停止流式传输。我认为问题是基于解码操作。现在我正在努力解决这个问题。
日复一日,我正在接近解决方案!
我正在使用 live555 库接收 RTSP 流并使用 ffmpeg 对其进行解码。 起初,我无法解码来自 live555 的数据。经过一番搜索后,我了解到在将帧发送到 FFmpeg 之前,我需要为我的帧数据包含序列 (SPS) 和图片参数集 (PPS)。
header : 00 00 00 01 67 4d 00 14 95 b8 58 25 90 00 00 00 01 68 ee 3c 80 00 00 00 01
FFmpeg can't decode H264 stream/frame data
现在我可以拍摄框架了,但是出现了一个小问题。 [![在此处输入图片描述][1]][1]
3包还有问题。 FFmpeg 无法解码它们我建议它们是特殊命令。因为9,4和5字节这么小就来了。
他们在这里
[h264@0x137c00]无帧! 00 00 00 01 67 4d 00 14 95 b8 58 25 90 00 00 00 01 68 ee 3c 80 00 00 00 01 67 4d 00 14 95 b8 58 25 90 [h264@0x137c00] 无帧! 00 00 00 01 67 4d 00 14 95 b8 58 25 90 00 00 00 01 68 ee 3c 80 00 00 00 01 68 ee 3c 80 [h264@0x137c00] 无帧! 00 00 00 01 67 4d 00 14 95 b8 58 25 90 00 00 00 01 68 ee 3c 80 00 00 00 01 06 e5 01 ec 80 [h264@0x137c00] 没有帧!
有什么建议吗?
00 00 00 01 67开头的数据包是你的SPS,00 00 00 01 68是你的PPS。您可能想使用 h264 AVParser 将 PPS/SPS/frame 组合成单个数据包,这正是 ffh264 解码器所期望的。典型的 RTSP 流(或任何网络流)将每隔几秒左右重复一次 PPS/SPS。
好的,我可能已经解决了问题。我在解码帧之前添加了解析操作。
avparser= av_parser_init(AV_CODEC_ID_H264);
len= av_parser_parse2(avparser,mCodecContext,&data,&lenght_parse,encodedFrame,encodedFrameSize,0,0,0);
while(encodedFrameSize)
{
len= av_parser_parse2(avparser,mCodecContext,&data,&lenght_parse,encodedFrame,encodedFrameSize,0,0,0);
encodedFrame += len;
encodedFrameSize -=len;
if(lenght_parse)
{
av_init_packet(&pkt);
pkt.data=data;
pkt.size=lenght_parse;
length = avcodec_decode_video2(mCodecContext,decodedFrame,&gotFrame,&pkt);
}
}
昨天测试了app,新问题出来了。应用程序在 4-5 小时后停止流式传输。我认为问题是基于解码操作。现在我正在努力解决这个问题。
日复一日,我正在接近解决方案!