2012-08-08 58 views
5

我有FLV流生成问题。我开发了DVR系统,它应该能够以FLV格式流式传输视频(在Actionscript NetStream上播放)。我从原始H264 NAL单元(0x00 0x00 0x00 0x01)接收编码器的视频,我也可以识别编码的帧IDR或非IDR。如何从Actionscript NetStream可以播放的原始h264生成FLV流?

我的解决方案来创建FLV流(基于Adobe规格:视频文件格式规范第10版)是:

  1. 等待IDR帧;
  2. 放FLV头
  3. 放PrevTagSize(0)
  4. 放FLV标签与视频标签可视数据与AVCVIDEODATA
  5. 放PrevTagSize
  6. 重复步骤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

是否添加了一些计数器或其他内容?

将高兴地看到任何想法,链接等

+0

我工作的一个FLV复用器也不知道如何存储使用x264_encoder_encode编码时得到的x264_nal_t *数据。你的流是否正常工作?你能解释一下你的方法吗? – pollux 2012-10-11 20:07:15

回答

1

有两种常见的H.264码流格式的包装。

  1. 附件B中开始码:00 00 01
  2. MP4是一个长度为前缀XX XX XX XX

你正在创建附录B,但好像你需要MP4封装格式(长度前缀)为FLV。 你必须删除(00)00 00 01并添加长度作为前缀。

3

尝试使用下面的命令做的工作:

ffmpeg -y -i test.flv -vcodec copy -vbsf h264_mp4toannexb test.h264 

你会得到一个VLC播放的.h264文件,所有NAL则开始00 00 00 01