Ios 使用AVPlayer播放AVMutableComposition?

Ios 使用AVPlayer播放AVMutableComposition?,ios,avfoundation,Ios,Avfoundation,我正在尝试按顺序播放两个视频。我试过AVQueuePlayer,但在两个剪辑之间有一个巨大的“打嗝”。我需要让他们不受干扰地比赛 所以我尝试使用AVMutableComposition和AVPlayer,但无法正确使用 以下是我的代码(忽略内存泄漏,只在空项目中测试..): 代码对我来说似乎是正确的。每个视频的第一帧实际上被渲染到屏幕上。但这段视频根本不播放。我错过了什么?我需要弄清楚如何使用MutableTrack吗?也许你使用了错误的时间插入点和持续时间,两者都取决于实际的视频资源。我会这样

我正在尝试按顺序播放两个视频。我试过AVQueuePlayer,但在两个剪辑之间有一个巨大的“打嗝”。我需要让他们不受干扰地比赛

所以我尝试使用AVMutableComposition和AVPlayer,但无法正确使用

以下是我的代码(忽略内存泄漏,只在空项目中测试..):


代码对我来说似乎是正确的。每个视频的第一帧实际上被渲染到屏幕上。但这段视频根本不播放。我错过了什么?我需要弄清楚如何使用MutableTrack吗?

也许你使用了错误的时间插入点和持续时间,两者都取决于实际的视频资源。我会这样写:

CMTime insertionPoint = kCMTimeZero;
NSError * error = nil;
composition = [AVMutableComposition composition];
asset = /* obtain asset #1 */
if (![composition insertTimeRange:CMTimeRangeMake(kCMTimeZero, asset.duration) 
                          ofAsset:asset 
                           atTime:insertionPoint 
                            error:&error]) 
{
    NSLog(@"error: %@",error);
}
insertionPoint = CMTimeAdd(insertionPoint, asset.duration);

asset = /* obtain asset #2 */
if (![composition insertTimeRange:CMTimeRangeMake(kCMTimeZero, asset.duration) 
                          ofAsset:asset 
                           atTime:insertionPoint 
                            error:&error]) 
{
    NSLog(@"error: %@",error);
}
...
/* playback stuff */

嘿@gngwzrd我也遇到了这个问题,但我没有太多经验,而且我对iPhone开发还不熟悉。你能在这方面帮助我吗。我想播放多个视频从网络顺利没有任何差距的剪辑,然后我还需要寻找他们正确。你能帮我解决这个问题吗?我最终没有使用视频来无间隙播放,最好的解决方案是使用带有单独音频文件的PNG序列。哦,好的,那么查找问题呢,你解决了吗,就像寻找没有下载的流媒体视频一样?不,对于我们的项目,这些资产要么是设备上的本地资产,要么是在播放之前下载并保存到设备上的本地资产。既然我们使用了PNG序列,搜索就不再是问题了。在应用商店中签出“Ozgood”。不确定这是否正是你想要的,但你可以挑选一个像“Talking Tom”这样的应用来看看它是如何完成的。在iTunes中,将应用复制到您的桌面,显示软件包内容并开始四处窥探,您将看到他们是如何做到这一点的。谢谢兄弟:)。。。因此,现在还没有一个解决方案可以在iphone应用程序中流畅地传输多个文件而不产生间隙。嘿@madmw你能帮我解决这个问题吗
CMTime insertionPoint = kCMTimeZero;
NSError * error = nil;
composition = [AVMutableComposition composition];
asset = /* obtain asset #1 */
if (![composition insertTimeRange:CMTimeRangeMake(kCMTimeZero, asset.duration) 
                          ofAsset:asset 
                           atTime:insertionPoint 
                            error:&error]) 
{
    NSLog(@"error: %@",error);
}
insertionPoint = CMTimeAdd(insertionPoint, asset.duration);

asset = /* obtain asset #2 */
if (![composition insertTimeRange:CMTimeRangeMake(kCMTimeZero, asset.duration) 
                          ofAsset:asset 
                           atTime:insertionPoint 
                            error:&error]) 
{
    NSLog(@"error: %@",error);
}
...
/* playback stuff */