ios - 在没有 MOOV Atom 的情况下识别 MDAT Atom 中的音频样本
<p><p>我正在尝试通过 ios 设备的 RTSP 编写实时视频广播。我正在使用 AVAssetWriter,所以我可以利用硬件编码。要通过 RTSP 发送,我必须从 MOOVblock 中获取 avcC 信息,但是 MOOVblock 仅在您完成 session 后才从 AVAssetWriter 写入,当然这还没有完成,因为我正在直播。</p>
<p>我通过对视频进行编码、写入、然后将单个样本缓冲区写入文件以及解析文件以获取 avcC 信息来解决此问题。效果很好。</p>
<p>在直播之后,由于 AVAssetWriter 只会写入文件,因此我将其写入文件,然后使用跟踪文件偏移量从该文件中读取。当我仅对视频执行此操作时,我可以从写入文件中的 MDAT Atom 读取 Nalu,而无需任何 MOOV 信息,因为每个 Nalu 的大小在 Nalu 的前 4 个字节中给出。因此,我可以读取该数量,对其进行处理,然后通过 RTSP 流将其发送出去。所以只有视频,一切都很好,我可以将真正好的高清流传输到流服务器。</p>
<p>我现在遇到的问题是当我尝试将音频合并到来自麦克风的流中时。我可以使用 AVAssetWriter 对其进行很好的编码,并且可以从中读取正确的交错格式的 mp4 文件,但是与 H264 Nalu 不同的是,文件中的音频样本的第一个字节没有样本的大小。到目前为止,我能看到的唯一定义方法是使用 MOOV 中的 STSZ 和 STCO Atom,我当然没有,因为它是直播。</p>
<p>考虑到所有这些,是否有人知道在没有来自 MOOV Atom 的信息的情况下识别 MDAT Atom 中的音频样本片段的方法?一旦我弄清楚了,我就可以回家了。</p>
<p>提前感谢您的任何见解。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>经过大量研究和发给人们的电子邮件后,我至少有一个答案,答案是,我不能这样做。通常,没有索引的流中的 AAC 样本包含在 ADTSheader 中,该 header 包含数据包的长度字段。但是,由于我将 AVAssetWriter 用于音频,并且 AVAssetWriter 直接写入 MP4 文件,因此由于 MOOV Atom 中的索引,ADTS 包装被剥离。 </p>
<p>因此,我必须对音频进行不同的编码,可能是通过音频队列服务,并在应用于 RTSP 流时将其融合到视频数据包中。</p>
<p>也许这会帮助其他人在未来看到同样的道路。</p>
<p>非常感谢 <a href="http://www.gdcl.co.uk" rel="noreferrer noopener nofollow">http://www.gdcl.co.uk</a> 上的 Geraint Davies引导我走上正确的道路。</p></p>
<p style="font-size: 20px;">关于ios - 在没有 MOOV Atom 的情况下识别 MDAT Atom 中的音频样本,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/24080961/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/24080961/
</a>
</p>
页:
[1]