用c#将h.264打包到Apple Tv

本文关键字:Apple Tv | 更新日期: 2023-09-27 18:05:26

我正在尝试用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个字节。报头以以下小端字段开头:


大小描述4字节有效负载大小
2字节负载类型
2 bytes 0x1e if type = 2, else 6
8字节NTP时间戳
有三种类型的数据包:


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

任何指引我正确方向的帮助都将是非常感激的,因为我觉得我已经碰壁了。

用c#将h.264打包到Apple Tv

听起来像是自定义标题格式。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