【发布时间】:2014-06-06 11:38:54
【问题描述】:
我正在尝试通过 ios 设备的 RTSP 编写实时视频广播。我正在使用 AVAssetWriter,所以我可以利用硬件编码。要通过 RTSP 发送,我必须从 MOOV 块中获取 avcC 信息,但是 MOOV 块仅在您完成会话时从 AVAssetWriter 写入,当然这还没有完成,因为我正在直播。
我已经通过编码、写入、然后将单个样本缓冲区完成到文件以及解析文件以获取 avcC 信息来解决此问题。效果很好。
在直播之后,由于 AVAssetWriter 只会写入文件,因此我将其写入文件,然后使用跟踪文件偏移量从该文件中读取。当我仅对视频执行此操作时,我可以从写入文件中的 MDAT Atom 读取 Nalu,而无需任何 MOOV 信息,因为每个 Nalu 的大小在 Nalu 的前 4 个字节中给出。因此,我可以读取该数量,对其进行处理,然后通过 RTSP 流将其发送出去。所以只有视频,一切都很好,我可以将真正好的高清流传输到流服务器。
我现在遇到的问题是当我尝试将音频合并到来自麦克风的流中时。我可以使用 AVAssetWriter 对其进行很好的编码,并且可以从中读取正确的交错格式的 mp4 文件,但是与 H264 Nalu 不同的是,文件中的音频样本的第一个字节没有样本的大小。到目前为止,我能看到的唯一定义方法是使用 MOOV 中的 STSZ 和 STCO Atom,我当然没有,因为它是直播。
考虑到所有这些,是否有人知道在没有来自 MOOV Atom 的信息的情况下识别 MDAT Atom 中的音频样本片段的方法?一旦我弄清楚了,我就可以回家了。
提前感谢您的任何见解。
【问题讨论】:
标签: ios objective-c audio video mp4