问题 packetizer_h264 packetizer warning: waiting for SPS/PPS
是因为解码器只是在第一次执行编码的时候,才编码出 SPS、PPS、和I_Frame;
是因为解码器只是在第一次执行编码的时候,才编码出 SPS、PPS、和I_Frame;
h264 packetizer has set so, that it sends sps/pps only first keyframe, I'm trying to figure what breaks if that is changed so sps/pps is written in every keyframe. [出自| http://trac.videolan.org/vlc/ticket/1384]
解决办法:
1、编码器编码出每个关键帧都加上SPS、PPS ,据说通常情况编码器编出的 SPS、PPS是一样的,所以这种方法耗费资源。
2、在服务器接收到客户端请求时,发送第一个package 加上 SPS、PPS。
具体如下:
-
1、在 VideoOpenFileSource 添加一个变量 isFirstFrame;
- 2、构造时初始化 isFirstFrame = true;
-
3、在int VideoOpenFileSource::readFromBufferChain() 修改如下:
-
1 if(isFirstFrame == true) 2 { 3 memcpy(fTo, h264_header, sizeof(h264_header)); /* h264_header = pps +sps*/ 4 offset = sizeof(h264_header); 5 framesize = BufferChain_get(fInput.video_bufs, fTo + offset); 6 offset += framesize; 7 isFirstFrame = false; 8 printf("this is the first fime\n"); 9 sleep(1); 10 } 11 else 12 { 13 framesize = BufferChain_get(fInput.video_bufs, fTo + offset); 14 offset += framesize; 15 } 1
[http://topic.csdn.net/u/20100801/17/ef35e664-92ff-4144-a35f-3984dcf11da3.html| 参考] ======================================================================== sdp 关于pps和sps的疑问: packetization-mode 主要是定义包的模式,单一 NALU单元模式(0);非交错(non-interleaved)封包模式(1);交错(interleaved)封包模式(2) sprop-parameter-sets 等于H.264 的序列参数集和图像参数 NAL单元,base64转换;(即= sps+pps) profile-level-id 这个参数用于指示 H.264 流的 profile 类型和级别。这知道这个是啥东东 参考 黑暗长老 www.cppblog.com/czanyou/ ffmpeg decode 关于pps sps问题: stackoverflow.com/questions/3493742/problem-to-decode-h264-video-over-rtp-with-ffmpeg-libavcodec/3500432#3500432
转自 http://hi.baidu.com/yuan07804017/blog/item/a4f54e3ee4d3d0c99e3d624f.html