gpt4 book ai didi

ios - 如何无间隙地播放多个视频

转载 作者:行者123 更新时间:2023-11-29 02:50:59 25 4
gpt4 key购买 nike

我在 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];

最佳答案

  1. AVMutableComposition 具有属性 tracks(NSArray),这将是你所有的视频
  2. 使用preferedTrackID:标记轨道位置
  3. - (void)removeTrack:(AVCompositionTrack *)track;删除任何跟踪您不再需要的信息
  4. 使用 - (AVMutableCompositionTrack
    *)addMutableTrackWithMediaType:(NSString *)mediaType preferredTrackID:(CMPersistentTrackID)preferredTrackID;
    和额外的视频轨道。

    所有这些对于一个播放列表来说应该足够了。

祝你好运!

关于ios - 如何无间隙地播放多个视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24535947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com