我在iOS上工作,我想一个接一个地阅读视频文件,视频之间没有延迟。
此外,我必须能够在播放时刷新播放列表(将视频添加到队列中)。
我尝试使用AvQueuePlayer,它工作正常,我可以刷新播放列表,但每个视频之间有一点延迟。
我尝试使用AVMutableComposition,视频之间没有延迟,但我无法在播放视频时刷新播放列表。
存在其他任何解决方案?视频之间没有延迟,我可以刷新播放列表吗?
感谢。
编辑:
以下代码有效,我播放0.5秒的视频文件,没有差距! 但是有一个问题,声音很好,但视频每次都会冻结! 为什么?
AVMutableComposition *myCompo = [[AVMutableComposition alloc] init];
for (int countName = 0; countName<10; countName++)
{
//Initialize Asset
NSURL *MyURL = [[NSBundle mainBundle]
URLForResource: [NSString stringWithFormat:@"%d", countName] withExtension:@"mp4"];
AVURLAsset * myAsset = [[AVURLAsset alloc] initWithURL:MyURL options:nil];
//Track AUDIO
AVMutableCompositionTrack *compositionAudioTrack = [myCompo addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
[compositionAudioTrack setPreferredVolume:1.0];
AVAssetTrack *clipAudioTrack = [[myAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
//Track VIDEO
AVMutableCompositionTrack *compositionVideoTrack = [myCompo addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
AVAssetTrack *clipVideoTrack = [[myAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
//Time lenght
CMTime durationFile = clipAudioTrack.timeRange.duration;
CMTime timeCompo = myCompo.duration;
//Insert TRACK AUDIO
BOOL result = [compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, durationFile) ofTrack:clipAudioTrack atTime:timeCompo error:nil];
if(result)
{
NSLog(@"Audio Ok");
}
else
{
NSLog(@"Audio not ok");
}
//Insert TRACK VIDEO
result =[compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, durationFile) ofTrack:clipVideoTrack atTime:timeCompo error:nil];
if(result)
{
NSLog(@"Video Ok");
}
else
{
NSLog(@"Video not ok");
}
}
dispatch_sync(dispatch_get_main_queue(), ^{
player2 = [AVPlayer playerWithPlayerItem:[AVPlayerItem playerItemWithAsset:myCompo]];
playerLayer2 = [AVPlayerLayer playerLayerWithPlayer:player2];
playerLayer2.frame = [self view].layer.bounds;
playerLayer2.videoGravity = AVLayerVideoGravityResizeAspectFill;
[[self view].layer insertSublayer:playerLayer2 atIndex:0];
});
[player2 play];
答案 0 :(得分:1)
AVMutableComposition
有属性曲目(NSArray
),即将出现
你的所有视频preferedTrackID:
标记曲目的位置- (void)removeTrack:(AVCompositionTrack *)track;
删除任何内容
跟踪你不再需要使用- (AVMutableCompositionTrack
*)addMutableTrackWithMediaType:(NSString *)mediaType preferredTrackID:(CMPersistentTrackID)preferredTrackID;
来和
额外的视频轨道。
所有这些对于播放列表来说应该足够了。
答案 1 :(得分:0)
你可以下载adobe媒体播放器或adobe媒体再现它会工作,它为我做了,如果你想了解更多信息,你可以去creativecloud看到所有的产品,你会发现它从那里是最适合你的。