【问题标题】:How to play multiple videos, without gap如何播放多个视频,没有间隙
【发布时间】:2014-07-02 16:04:52
【问题描述】:

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

【问题讨论】:

    标签: ios video avmutablecomposition avqueueplayer


    【解决方案1】:
    1. AVMutableComposition 有财产轨道(NSArray),那将是 您的所有视频
    2. 使用preferedTrackID:标记轨道位置
    3. - (void)removeTrack:(AVCompositionTrack *)track;删除任何 跟踪您不再需要的地方
    4. 使用- (AVMutableCompositionTrack *)addMutableTrackWithMediaType:(NSString *)mediaType preferredTrackID:(CMPersistentTrackID)preferredTrackID; 和 附加视频轨道。

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

    祝你好运!

    【讨论】:

    • 我已经使用AVCompositionTrack 编辑了我的问题,但我的视频轨道有问题
    【解决方案2】:

    您可以下载 adobe media player 或 adobe media encore,它会起作用,它为我做的,如果您想了解更多信息,您可以去 creativecloud 查看所有产品,您会从那里找到它是最适合你的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-22
      相关资源
      最近更新 更多