我正在尝试将实时视频从我的 android 手机流式传输到我 PC 上的桌面 RTSP 服务器。流媒体视频可以在其他设备上播放。我使用的是 H.264 视频编码器,因此服务器返回的 SDP(作为 DESCRIBE
请求的回复)应包含 profile-level-id
和 sprop-parameter-sets
字段。
Spydroid 项目展示了如何通过解析(从 avcC
块)从记录到 SD 卡的虚拟文件中提取这些信息。但我不能那样做。在 Spydroid 中,媒体记录器和 RTSP 服务器在同一设备上,因此服务器始终可以在流式传输之前记录与记录器相同配置的测试文件。但是我将视频作为 RTP 流直接从电话传输到远程服务器。
所以我的问题是:
编辑:
我正在使用 android 手机生成流,但服务器可以从任何来源接收 RTP 流。那么,有没有什么通用的方法来获取这些值?
最佳答案
您可以从序列参数集 NAL 单元中提取 profile-level-id
(如果实际上参数集甚至在流中发送),它是 NAL header 之后的前 3 个字节。即来自具有级别 3.0 的基线配置文件流的 SPS NAL 单元的前四个字节将如下所示:67
42
00
1E
忽略第一个字节,这只是表明它是一个 SPS NAL 单元(0x67 & 0x1F == 0x7
SPS 是 NAL 类型 7,PPS 是 NAL 类型 8)。其他 3 个字节为您提供配置文件、约束标志和级别(实际上,它只是第 3 个字节中的级别乘以 10)。sprop-parameter-sets
是 Base64 编码的 Sequence Parameter Sets 和 Picture Parameter Sets,用逗号隔开。所以只需 Base64 编码 SPS 和 PPS NAL 单元(Nal 类型 7 和 NAL 类型 8)并用逗号分隔,你应该很高兴。