Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Video ios AvmutualComposition曲目列表与调试_Video_Ios6_Avmutablecomposition_Avcomposition - Fatal编程技术网

Video ios AvmutualComposition曲目列表与调试

Video ios AvmutualComposition曲目列表与调试,video,ios6,avmutablecomposition,avcomposition,Video,Ios6,Avmutablecomposition,Avcomposition,有人能给我指出正确的方向,帮助我调试为什么ios 6.1中的AVPlayerItem的AvmutualComposition没有正确加载曲目列表 我正在做的是创建一个AVMutableCompositionTrack,并从相同的mp4为其添加时间范围以进行播放。这对我来说可以正确地处理其他文件,但是我有一个问题,一些文件以每秒30帧的速度以720p编码,它们无法正确地创建曲目列表。我想按顺序无缝地显示它们 以下是我的一些代码: - (AVPlayerItem *) loadVideoBy

有人能给我指出正确的方向,帮助我调试为什么ios 6.1中的AVPlayerItem的AvmutualComposition没有正确加载曲目列表

我正在做的是创建一个AVMutableCompositionTrack,并从相同的mp4为其添加时间范围以进行播放。这对我来说可以正确地处理其他文件,但是我有一个问题,一些文件以每秒30帧的速度以720p编码,它们无法正确地创建曲目列表。我想按顺序无缝地显示它们

以下是我的一些代码:

    - (AVPlayerItem *) loadVideoByAVComposition
    {
        AVComposition *composition = [ self loadCompositionTracks];
        AVComposition *immutableSnapshotComposition = [composition copy];
        AVPlayerItem *playerItemForComposition = [[AVPlayerItem alloc]initWithAsset:immutableSnapshotComposition];

        return playerItemForComposition;
     }
装载轨道:

    -(AVMutableComposition *) loadCompositionTracks
    {
        AVMutableComposition *composition = [[AVMutableComposition alloc]init];
        NSDictionary *optionsDictionary = [NSDictionary dictionaryWithObject:[NSNumber  numberWithBool:YES] forKey:AVURLAssetPreferPreciseDurationAndTimingKey];

        AVMutableCompositionTrack *compositionVideoTrack = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];

        // hard coded test mp4
        NSString *videoFileName = @"avi.mp4";
        AVAsset  *asset = [self getAVAssetByFileName:videoFileName optsDict:optionsDictionary];

        if (asset == nil) { return nil; }

        // add some track items
        [self addTrackList:compositionVideoTrack asset:asset];

        return composition;
    }
创建这些文件的桌面应用程序会按视频文件的帧数和持续时间导出信息。所以我从这些开始,转换成秒,添加到曲目列表中

    -(void)addTrackList:(AVMutableCompositionTrack *)track asset:(AVAsset *)asset
    {
        if (track == nil) { return; }

        CMTime insertionPointTime = kCMTimeZero;

        // add some test track insert points
        insertionPointTime =  [self addTrackItems:track asset:asset start:100 duration:800 insertTime:insertionPointTime];
        insertionPointTime =  [self addTrackItems:track asset:asset start:1500 duration:600 insertTime:insertionPointTime];
        insertionPointTime =  [self addTrackItems:track asset:asset start:2500 duration:500 insertTime:insertionPointTime];

     }
这是一种将时间范围添加到avmutualComposition的方法

    -(CMTime)addTrackItems:(AVMutableCompositionTrack *)track asset:(AVAsset *)asset start:(NSUInteger)start duration:(NSUInteger)duration insertTime:(CMTime)insertTime
    {
        if (track == nil) { return insertTime; }

        NSError *videoError = nil;

        Float64 secondsCalc = (start / 30);
        CMTime startTime =  CMTimeMakeWithSeconds(secondsCalc, 600);

        secondsCalc = duration / 30;
        CMTime cmDuration = CMTimeMakeWithSeconds(secondsCalc, 600);

        CMTimeRange timeRange = CMTimeRangeMake(startTime, cmDuration);

        // add video track
        AVAssetTrack *clipVideoTrack = [[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
        [track insertTimeRange:timeRange ofTrack:clipVideoTrack atTime:insertTime error:&videoError];

       if (videoError != nil)
       {
            NSLog(@"");
            NSLog(@"Error while adding track to composition");       
       }

       // calculate for next insert point
       CMTime resultInsertionPointTime = CMTimeAdd(insertTime, timeRange.duration);

       return resultInsertionPointTime;
    }
因此,该代码适用于一些视频文件,但其中一些可能只加载第一首曲目,然后不加载其他曲目等。只会得到黑色帧或视频停止。基本上,它没有正确地构建曲目列表。那么,我如何调试从加载返回的任何警告或错误代码,以告诉我时间范围是否有效等等


除了苹果的文档之外,还有其他好的资源可以解释加载过程吗。苹果的文档很少。我已经看过了一些wwdc会议。任何帮助都将不胜感激。谢谢

在我的桌面应用程序中导出的视频似乎是格式不正确的h.264视频。AVComposition对象不能正确播放,即使它可以在桌面上正确播放。这并不奇怪,因为Ipad希望h.264视频符合某些参数


如果有人知道ios上可以帮助调试视频问题的工具,那就太好了

有人有什么想法或建议吗?谢谢