我有FLV流生成问题。我开发了DVR系统,它应该能够以FLV格式流式传输视频(在Actionscript NetStream上播放)。我从原始H264 NAL单元(0x00 0x00 0x00 0x01)接收编码器的视频,我也可以识别编码的帧IDR或非IDR。如何从Actionscript NetStream可以播放的原始h264生成FLV流?
我的解决方案来创建FLV流(基于Adobe规格:视频文件格式规范第10版)是:
- 等待IDR帧;
- 放FLV头
- 放PrevTagSize(0)
- 放FLV标签与视频标签可视数据与AVCVIDEODATA
- 放PrevTagSize
- 重复步骤4,5直到流的结束。
流看起来不错,并且可以通过ffplay时,MPlayer,VLC等 播放,但基于的ActionScript的NetStream不受播放器上播放。
所以,我得到的原始数据H264并将其转换使用的ffmpeg为FLV:
的ffmpeg -f H264 -i d1.h264 -vcodec复制-f FLV d1.flv
和尝试将flv的my和ffmpeg进行比较。
首先,我看到ffmpeg会在FLV标头后立即添加AVC序列标头。 我已经开始做同样的事情,但是NetStream仍然不支持我的流,而另一位玩家也不再玩它了。
好吧,然后我继续比较flv的。 现在我看到ffmpeg的编码FLV中的NAL单元标题有所改变,但我无法理解这些更改的含义。我读了很多规格,但没有什么帮助。 有人可以澄清我吗?
佛例如我的NAL单元看起来如此: 00 00 00 01 XX XX ... - 对于所有单元
的FFmpeg的NAL: 00 00 [14 BA] 61 ... 9A - 非IDR(二字节变量) 00 00 [7A 02] 65 88 ... - IDR(两个字节可变) 00 00 00 40 06 05 ... - SEI
是否添加了一些计数器或其他内容?
将高兴地看到任何想法,链接等
我工作的一个FLV复用器也不知道如何存储使用x264_encoder_encode编码时得到的x264_nal_t *数据。你的流是否正常工作?你能解释一下你的方法吗? – pollux 2012-10-11 20:07:15