我用live555通过RTSP接收H264流,用其中的QuickTimeFileSink写成MP4文件,用VLC可以播放,但用其它软件无法播放!
其实就是openRTSP例子,真是太郁闷了,详细如下:
使用AVIFileSink录H264流成AVI一切正常,
使用QuickTimeFileSink录H264流成MP4就只能用VLC播放,其它的都无法播放.
为什么同样的数据流,,录成MP4就放不了?
我又试了,使用QuickTimeFileSink录MP4V-ES流成MP4文件,一切都正常.说明这个类的问题不大,
接收到H264流是FU-A分片的,每帧数据如下:
000000016764........数据.......00000001.....数据.........
每帧数据有两个左右NAL,解码时提示:
"AVC: Consumed only 1 bytes instead of 143955"
"AVC: Unknown NAL code: 0 (0 bits)
于是,我在录制时每个帧去掉开头的开始码00000001,结果播放时花屏非常严重,有时还是播放不了,解码提示为:
"AVC:Consumed only 120bytes instead of 145664"
"AVC:Consumed only 35760 bytes instead of 38959"
还是这个NAL开始码引起的, 解码时遇到00000001认为是结束了,因为每帧中间还有NAL,为什么会这样?录AVI时每帧也是这数据啊,为什么就可以正常解码?录的祼码流也是这样的一帧,也可以解码,放在这个MP4容器里面就不行?难道解码时送给解码器的每个帧时只能含有一个NAL?
期待大牛指点。
------解决方案--------------------------------------------------------
会不会是RTP网络包头没有拆干净, 录到MP4文件中的不止264数据还有RTP头造成解码不识别?
------解决方案--------------------------------------------------------
把你录制的H264 MP4文件用VLC串流为H264 MP4文件,若其他播放器能播放串流
后的文件,比较串流前后的MP4文件有何区别。
------解决方案--------------------------------------------------------
说明这个MP4文件不符合标准,里面有VLC自己能识别的字段,而替他PLAYER无法识别