gpt4 book ai didi

flv - 如何从可以由 Actionscript NetStream 播放的原始 h264 生成 FLV 流?

转载 作者:行者123 更新时间:2023-12-04 19:14:07 31 4
gpt4 key购买 nike

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

我创建 FLV 流的解决方案(基于 Adob​​e 规范:视频文件格式规范版本 10)是:

  • 等待 IDR 帧;
  • 放 FLV header
  • 把 PrevTagSize(0)
  • 将 FLV 标签与视频标签 VIDEODATA 与 AVCVIDEODATA
  • 放 PrevTagSize
  • 重复步骤 4,5 直到流式传输结束。

  • Stream看起来不错,可以被ffplay、mplayer、vlc等播放。
    但不是由基于 Actionscript NetStream 的播放器播放。

    因此,我得到了原始 h264 数据并使用 ffmpeg 将其转换为 FLV:

    ffmpeg -f h264 -i d1.h264 -vcodec 复制 -f flv d1.flv

    并尝试将 flv 的 my 和 ffmpeg 的进行比较。

    首先,我看到 ffmpeg 在 FLV header 之后立即添加了 AVC 序列 header 。
    我已经开始这样做了,但是 NetStream 仍然不支持我的流,并且其他玩家也停止播放它。

    好的,那我继续比较flv的。
    现在我看到 ffmpeg 编码的 FLV 中的 NAL 单元 header 发生了一些变化,但我无法理解这些变化的含义。我阅读了许多规范,但没有任何帮助。
    有人可以澄清我吗?

    例如,我的 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

    是否添加了一些计数器或其他任何东西?

    很高兴看到任何想法、链接等。

    最佳答案

    尝试使用以下命令来完成这项工作:

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

    您将获得一个 vlc 可播放的 .h264 文件,所有 NAL 都以 00 00 00 01 开头。

    关于flv - 如何从可以由 Actionscript NetStream 播放的原始 h264 生成 FLV 流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11862666/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com