Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在没有MOOV-Atom的MDAT-Atom中识别音频样本_Ios_Objective C_Audio_Video_Mp4 - Fatal编程技术网

Ios 在没有MOOV-Atom的MDAT-Atom中识别音频样本

Ios 在没有MOOV-Atom的MDAT-Atom中识别音频样本,ios,objective-c,audio,video,mp4,Ios,Objective C,Audio,Video,Mp4,我正在尝试从ios设备通过RTSP编写实时视频广播程序。我正在使用AVAssetWriter,因此我可以利用硬件编码。要通过RTSP发送,我必须从MOOV块中获取avcC信息,然而,只有当您完成会话时,MOOV块才从AVAssetWriter写入,当然这还没有完成,因为我正在直播 我通过对视频进行编码、写入,然后完成对文件的单个样本缓冲,并解析文件以获得avcC信息,从而解决了这个问题。那很好用 之后对于实时流,因为AVAssetWriter只会写入文件,所以我将其写入文件,然后使用跟踪文件偏移

我正在尝试从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原子,当然我没有,因为这是一条活流

考虑到所有这些,有人知道在没有来自MOOV原子的信息的情况下在MDAT原子中识别音频样本段的方法吗?我一弄明白,我就有空回家了


提前感谢您提供的任何见解。

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

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

也许这将有助于其他人在未来看到同样的道路


非常感谢Geraint Davies at带领我走上正确的道路。

嗨,丹,我也在努力实现同样的目标。如果可能的话,请你为我指引正确的方向。