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)
}
説明とセグメントはすべてシームレスで、最後に組成物全体が入ります。
ただし、黒いビデオセグメントを追加するたびに再生が失敗します。黒いビデオが来ると、プレーヤーはその時にただ停止します。
誰も問題を見ていませんか?私はちょうどそれの周りに私の頭を得ることができません。
ありがとうございます!
アンドレアス