【问题标题】:Streaming h.264 packetized to Apple Tv in C#在 C# 中将 h.264 流式传输到 Apple Tv
【发布时间】:2014-05-28 10:30:41
【问题描述】:

我目前正在努力用 C# 创建一个应用程序来与我的 Apple TV 交互。

以下链接是Apple TV使用的AirPlay协议(非官方):http://nto.github.io/AirPlay.html

从文档的顶部开始,到目前为止,我的应用程序使用 http 请求来回成功地将照片/幻灯片/视频发送到 appletv。

但是,我知道文档中关于镜像的部分。根据(非官方)协议,客户端在端口 7100 上连接到 Apple TV,并发送典型的 HTTP POST 请求,然后是有关会话的参数的二进制 PLIST。我对这部分没有任何问题。 由于缺乏经验,我对接下来要做什么感到有些困惑。

在发送初始 HTTP 标头后,Apple TV 需要一个 H.264 分组流,这我完全不知道,特别是因为我不知道这种流的有效负载/NAL 结构,以及如何构造这些字节数组以遵守协议(主要是因为我只处理过您的典型数据类型。

我的主要问题是: 如何设置正确的值以发送以遵守以下要求:

6.2.流数据包

视频流使用 128 字节的标头进行打包,后跟可选的有效负载。似乎只使用了头的前 64 个字节。标头以以下 little-endian 字段开头:

尺寸说明
4 字节有效负载大小
2 字节有效负载类型
2 字节 0x1e 如果类型 = 2,否则为 6
8 字节 NTP 时间戳
数据包有 3 种类型:

类型描述
0 视频比特流
1 个编解码器数据
2 次心跳

任何帮助我朝着正确方向前进的人都将非常感激,因为我觉得我遇到了一点砖墙。

【问题讨论】:

    标签: c# video-streaming h.264 apple-tv


    【解决方案1】:

    听起来像是自定义标题格式。 H.264 通常有两种传输格式,如下所述:

    http://msdn.microsoft.com/en-us/library/windows/desktop/dd757808%28v=vs.85%29.aspx 它要么由一系列网络抽象层单元 (NALU) 组成,每个单元都以等于 0x000001 或 0x00000001 的起始码为前缀

    每个 NALU 都以一个长度字段为前缀,该字段以字节为单位给出了 NALU 的长度。长度字段的大小可以变化,但通常为 1、2 或 4 个字节

    在此处下载 H.264 规范:http://www.itu.int/rec/T-REC-H.264-201304-S

    【讨论】:

      猜你喜欢
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-22
      • 2020-08-18
      • 2023-03-31
      • 2014-05-10
      相关资源
      最近更新 更多