Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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
Cocoa 将音频与音频队列服务同步的建议?_Cocoa_Macos_Audio_Core Audio - Fatal编程技术网

Cocoa 将音频与音频队列服务同步的建议?

Cocoa 将音频与音频队列服务同步的建议?,cocoa,macos,audio,core-audio,Cocoa,Macos,Audio,Core Audio,我正在解码一种视频格式,它在一个单独的文件中附带了一个音频曲目。根据规格,我每1/75秒渲染一帧视频。视频文件的长度与音频曲目的长度相同 我使用音频队列服务播放音频(我之所以选择音频队列服务,是因为我认为在某些情况下,我需要精确的定时控制——正是我遇到的那种情况!)。这是一个很大的API,我的进步并没有超过苹果编程指南中的示例代码(尽管我已经用一个更好的ObjC API封装了东西) 在理想情况下,基本播放设置可以正常工作。视频和音频保持同步,并同时结束(在我自己的能力范围内)。但是,如果性能出现

我正在解码一种视频格式,它在一个单独的文件中附带了一个音频曲目。根据规格,我每1/75秒渲染一帧视频。视频文件的长度与音频曲目的长度相同

我使用音频队列服务播放音频(我之所以选择音频队列服务,是因为我认为在某些情况下,我需要精确的定时控制——正是我遇到的那种情况!)。这是一个很大的API,我的进步并没有超过苹果编程指南中的示例代码(尽管我已经用一个更好的ObjC API封装了东西)

在理想情况下,基本播放设置可以正常工作。视频和音频保持同步,并同时结束(在我自己的能力范围内)。但是,如果性能出现问题(或者我连接了泄漏仪器或其他东西),它们很快就会失去同步

这是我第一次写这种性质的东西:我以前没有声音或视频方面的经验。我当然没有音频队列服务的经验。所以我不知道接下来该怎么办


你做过这样的事吗?你有什么建议、技巧或窍门可以提供吗?我需要阅读一些基本的文档吗?任何帮助都将不胜感激

首先,我从来没有编写过这样的代码,所以我是从臀部开始拍摄的。另外,我已经用HAL和AUHAL做了相当多的编程,但从来没有用AudioQueue,所以我的方法可能不是使用AQ的最佳方式

显然,首先要决定的是将音频同步到视频还是将视频同步到音频。从这个问题看来,您已经决定将视频作为主控,音频应该与之同步


我将通过跟踪渲染视频的帧数以及帧速率来实现这一点。然后,在将音频缓冲区排队时,不要为开始时间传递单调递增的值,而是调整缓冲区的开始时间以匹配视频中观察到的任何中断。这有点模糊,因为我不知道您的音频来自何处,也不知道您是如何排队的,但希望原则是明确的。

我选择AudioQueue是因为它看起来很低级别。但也许这还不够低级。你建议跳得更深一点到哈尔和奥哈尔吗?你知道这方面的文档在哪里吗?/至于缓冲区的偏移,这可能是一个困难的问题,因为我真的不知道我在做什么,而AudioQueue函数为您做了很多但这可能是唯一的答案。也许跳转到较低的级别真的会有帮助。我不建议直接使用HAL,除非你必须这样做。就文档而言,大部分文档都在头文件中,但充其量只是稀疏的。如果你熟悉音频设备,AUHAL还不错。无论哪种情况,学习曲线都是陡峭的!我在音频缓冲区中找到了一些用于查找的资源。所以我想我应该能够修改你的答案。但是,如果没有,我将不得不研究音频单元。不管怎样,我认为这是我对这样一个深奥问题的最好答案。谢谢你的帮助!你用什么来播放视频?我已经用CGBitmapContextCreate创建了一个CGContextRef,我正在将像素写入它的数据流,并将其转换为CGImageRef,以便绘制成CALayer。为了提高效率,我只更新每帧改变的像素。幸运的是,它是一种非常低质量的视频格式。@JamesWilliams我正在开发类似的应用程序,分别渲染视频和发送音频数据,尝试使用音频队列服务进行同步,也取得了效果,但它在声音方面出现了小故障,使用AudioQueueReset将声音与视频同步,但出现了小故障,若你们分享一段播放音频的编程片段,那个么你们会非常喜欢……或者任何关于这一点的想法都会被忽略helpfull@PRSingh对不起,我七年前就放弃了。