2016-03-21 13 views
0

私の設定は次のとおりです。 このアプリケーションでは、ユーザーはビデオを並べて配置できます。 これらの動画は、それらの間のギャップを持っているか、これを達成するために0AVMutableVideoCompositionが再生されない

として後の時間に開始することができ、私はすべてのギャップ中のすべての黒のビデオやループ、それを追加機能を追加しました:

func getBlackVideoSegments(timerange: CMTimeRange) -> [AVCompositionTrackSegment] { 
    var compositionTrackSegments = [AVCompositionTrackSegment]() 
    if CMTimeCompare(timerange.duration, RTGlobals.blackVideo.duration) == -1 { 
     let compositionTrackSegment = AVCompositionTrackSegment(URL: RTGlobals.blackVideoURL, trackID: RTGlobals.blackVideoAssetTrack.trackID, sourceTimeRange: CMTimeRangeMake(kCMTimeZero, timerange.duration), targetTimeRange: timerange) 
     compositionTrackSegments.append(compositionTrackSegment) 
     addVideoCompositionInstruction(RTGlobals.blackVideoAssetTrack, timeRange: timerange, assetTrack: videoCompositionTrack) 
    } else { 
     var currentStart = timerange.start 
     var filledDuration = kCMTimeZero 
     while CMTimeCompare(filledDuration, timerange.duration) == -1 { 
      let durationToFill = CMTimeSubtract(timerange.duration, filledDuration) 
      var durationAdded = RTGlobals.blackVideo.duration 
      if CMTimeCompare(durationAdded, durationToFill) == 1 { 
       durationAdded = durationToFill 
      } 

      let compositionTrackSegment = AVCompositionTrackSegment(URL: RTGlobals.blackVideoURL, trackID: RTGlobals.blackVideoAssetTrack.trackID, sourceTimeRange: CMTimeRangeMake(kCMTimeZero, durationAdded), targetTimeRange: CMTimeRangeMake(currentStart, durationAdded)) 
      compositionTrackSegments.append(compositionTrackSegment) 
      addVideoCompositionInstruction(RTGlobals.blackVideoAssetTrack, timeRange: CMTimeRangeMake(currentStart, durationAdded), assetTrack: videoCompositionTrack) 

      currentStart = CMTimeAdd(currentStart, durationAdded) 
      filledDuration = CMTimeAdd(filledDuration, durationAdded) 
     } 
    } 
    return compositionTrackSegments 
} 

をとここで指示をどのように設定するのですか。

func addVideoCompositionInstruction(videoAssetTrack: AVAssetTrack, timeRange: CMTimeRange, assetTrack: AVAssetTrack) { 
    let instruction = AVMutableVideoCompositionInstruction() 
    instruction.timeRange = timeRange 
    let layerInstruction = AVMutableVideoCompositionLayerInstruction(assetTrack: assetTrack) 

    let videoSize = CGSizeMake(1920.0, 1080.0) 

    var transform = videoAssetTrack.preferredTransform 
    var scale:CGFloat = 1.0 
    var offset:CGFloat = 0.0 

    if fabs(videoAssetTrack.preferredTransform.b) == 1.0 && fabs(videoAssetTrack.preferredTransform.c) == 1.0 { 
     scale = videoSize.height/videoAssetTrack.naturalSize.width 
     offset = (videoSize.width - (videoAssetTrack.naturalSize.height * scale))/2.0 
    } else { 
     scale = videoSize.height/videoAssetTrack.naturalSize.height 
    } 
    transform = CGAffineTransformConcat(CGAffineTransformConcat(transform, CGAffineTransformMakeScale(scale, scale)), CGAffineTransformMakeTranslation(offset, 0)) 

    layerInstruction.setTransform(transform, atTime: timeRange.start) 

    instruction.layerInstructions = [layerInstruction] 

    instructions.append(instruction) 
} 

説明とセグメントはすべてシームレスで、最後に組成物全体が入ります。

ただし、黒いビデオセグメントを追加するたびに再生が失敗します。黒いビデオが来ると、プレーヤーはその時にただ停止します。

誰も問題を見ていませんか?私はちょうどそれの周りに私の頭を得ることができません。

ありがとうございます!

アンドレアス

答えて

0

私の質問への答えは非常に簡単です:ちょうどAppleは明らかに現時点では壊れたフレームワークを持っているのiOS 9.3 に更新します。 まだ完全に機能しない場合がありますが、問題ありません。 9.4で修正されると思います。

Bye! アンドレアス

関連する問題