【发布时间】:2011-11-04 11:24:18
【问题描述】:
我正在尝试编写一个应用程序来像 SipDroid 一样流式传输视频,但 SipDroid 只能使用 H263 编解码器流式传输视频。 我想用 H264 编解码器流式传输视频,所以我必须写一个 nal 标头。
我从这里得到了一些信息:http://www.networkdictionary.com/rfc/rfc3984.php?page=0%2C0 我决定使用分段单元进行流式传输(5.8. Fragmentation Units (FUs)(第 8 页))。
我试图创建一个这样的最终标题:
nal header http://www.networkdictionary.com/images/rfc3984f14.gif
指标具有以下值:
indicator http://www.networkdictionary.com/images/rfc3984-3.gif
F = 0, NRI = 2, Type = 28;
和标题:
header http://www.networkdictionary.com/images/rfc3984-4.gif
S=0 (1 at first packet), E = 0 (1 at last packet), R = 0, Type = 1;
数据包的值在客户端和服务器端设置正确。但我无法从这些数据包中读取任何视频流。
服务器是一个简单的 java 服务器,它接收数据并将其写入文件。 我也尝试在 vlc 播放器上显示流,但它也不起作用。
有人知道问题出在哪里,或者在服务器端获取视频流缺少什么吗?
编辑:
好的,我想我已经解决了这个问题。我试图从(vlc 播放器)rtp 流中获取标头值。在此流中,数据包格式取决于帧大小。是对于 1 个数据包足够小的帧大小,因此必须将数据包声明为具有以下值的单个 nal 数据包: NAL 标头:f 0,nri 2,类型 1。如果帧大小大于数据包大小,则数据包拆分,格式看起来就像我在我的问题中发布的那样。
【问题讨论】:
标签: android stream video-streaming h.264 rtp