Objective c 使用AVFoundation Framework分别播放mp4文件的音频和视频

Objective c 使用AVFoundation Framework分别播放mp4文件的音频和视频,objective-c,ios4,avfoundation,Objective C,Ios4,Avfoundation,我使用AVFoundation for iOS开发了一款媒体播放器。我正在使用AVPlayer播放音频视频文件,例如mp4文件。使用AVPlayer直接调用play、pause和api来播放文件似乎很简单 现在,我想分离音频和视频,并将它们作为单独的实体同时播放。我想这样做是因为,我可能会对音频或视频曲目进行一些编辑,然后播放文件 我可以使用AVAssetTracks将两者分开,但我不知道如何播放曲目。另外,我想同时播放这两首曲目,这样就不会出现AVSync问题 请指导我如何实现这个目标,即音频

我使用AVFoundation for iOS开发了一款媒体播放器。我正在使用AVPlayer播放音频视频文件,例如mp4文件。使用AVPlayer直接调用play、pause和api来播放文件似乎很简单

现在,我想分离音频和视频,并将它们作为单独的实体同时播放。我想这样做是因为,我可能会对音频或视频曲目进行一些编辑,然后播放文件

我可以使用AVAssetTracks将两者分开,但我不知道如何播放曲目。另外,我想同时播放这两首曲目,这样就不会出现AVSync问题

请指导我如何实现这个目标,即音频和视频渲染没有AVSync问题


谢谢。

实现这一点的最简单方法是拥有多个玩家物品。我将创建一个playerItem,其中所有曲目都是原始形式的,即mp4文件。然后使用AVAsset的子类AVMutableComposition创建另一个资产。这允许您只将某些曲目放入构图(即仅音频曲目)。如果只想播放音频,请播放playerItem AVPLayer setCurrentItem:该播放器具有与仅音频曲目的可变合成。如果只想播放视频,请播放具有可变合成的playerItem(仅视频曲目)。如果要同步播放这两个项目,请使用原始资源播放playerItem

我假设您希望同步播放编辑的版本。为此,您必须创建另一个AVMutableComposition并添加所有已编辑的曲目。然后使用新创建的AVMutableComposition调用setCurrentItem:

如果你所要做的只是编辑不同的曲目,而不必自己播放它们,你可以用一个AVMUTABLE组合来完成。只需添加音频和视频AVMutableCompositionTrack并进行编辑,直到您满意为止。如果编辑逻辑正确,则无论您分别编辑它们多少次,它们都将始终同步播放。只需确保在播放时不要尝试编辑。为此,必须创建副本并编辑副本