• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 在没有 MOOV Atom 的情况下识别 MDAT Atom 中的音频样本

[复制链接]
菜鸟教程小白 发表于 2022-12-12 22:49:44 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在尝试通过 ios 设备的 RTSP 编写实时视频广播。我正在使用 AVAssetWriter,所以我可以利用硬件编码。要通过 RTSP 发送,我必须从 MOOV block 中获取 avcC 信息,但是 MOOV block 仅在您完成 session 后才从 AVAssetWriter 写入,当然这还没有完成,因为我正在直播。

我通过对视频进行编码、写入、然后将单个样本缓冲区写入文件以及解析文件以获取 avcC 信息来解决此问题。效果很好。

在直播之后,由于 AVAssetWriter 只会写入文件,因此我将其写入文件,然后使用跟踪文件偏移量从该文件中读取。当我仅对视频执行此操作时,我可以从写入文件中的 MDAT Atom 读取 Nalu,而无需任何 MOOV 信息,因为每个 Nalu 的大小在 Nalu 的前 4 个字节中给出。因此,我可以读取该数量,对其进行处理,然后通过 RTSP 流将其发送出去。所以只有视频,一切都很好,我可以将真正好的高清流传输到流服务器。

我现在遇到的问题是当我尝试将音频合并到来自麦克风的流中时。我可以使用 AVAssetWriter 对其进行很好的编码,并且可以从中读取正确的交错格式的 mp4 文件,但是与 H264 Nalu 不同的是,文件中的音频样本的第一个字节没有样本的大小。到目前为止,我能看到的唯一定义方法是使用 MOOV 中的 STSZ 和 STCO Atom,我当然没有,因为它是直播。

考虑到所有这些,是否有人知道在没有来自 MOOV Atom 的信息的情况下识别 MDAT Atom 中的音频样本片段的方法?一旦我弄清楚了,我就可以回家了。

提前感谢您的任何见解。



Best Answer-推荐答案


经过大量研究和发给人们的电子邮件后,我至少有一个答案,答案是,我不能这样做。通常,没有索引的流中的 AAC 样本包含在 ADTS header 中,该 header 包含数据包的长度字段。但是,由于我将 AVAssetWriter 用于音频,并且 AVAssetWriter 直接写入 MP4 文件,因此由于 MOOV Atom 中的索引,ADTS 包装被剥离。

因此,我必须对音频进行不同的编码,可能是通过音频队列服务,并在应用于 RTSP 流时将其融合到视频数据包中。

也许这会帮助其他人在未来看到同样的道路。

非常感谢 http://www.gdcl.co.uk 上的 Geraint Davies引导我走上正确的道路。

关于ios - 在没有 MOOV Atom 的情况下识别 MDAT Atom 中的音频样本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24080961/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap