2011-03-18 6 views
2

두 번째 인스턴스의 오디오 트랙을 두 번 가져 옵니 다 (두 개의 별도 QTMovie 인스턴스) 두 번 가져 오려고 시도한 다음 첫 번째 오디오 트랙과 믹스합니다 예. 그것은 섞이지 않습니다. 첫 번째 트랙이 재생을 시작한 다음 중지되고 두 번째 트랙이 재생되기 시작합니다. 내용이 다른 2 개의 동영상 파일을 사용할 때 이런 일은 발생하지 않지만 파일을 다른 이름으로 복사하면 계속 발생합니다! 문제를 설명하는 간단한 예제 프로젝트를 만들었습니다. http://cl.ly/0s2U2s3S2F0Y052D2v0O/InsertTrack.zipQTKit이 오디오 트랙을 제대로 믹싱하지 않습니다.

이 문제의 해결책은 비용을 지불해도 좋습니다. 몇 가지 여기

답변

2

이 솔루션은 매우 정직없는 일이되어 같이

  1. -[QTMovie insertSegmentOf(Movie|Track):timeRange:atTime:]는 영화에 트랙을 추가하지 않는 트랙의 인코딩 (들) 일치하는 경우 이미 존재하는 트랙의 것. 대신 은 QuickTime Player Pro의 "Add Selection"(예 : 영화가 AAAAA이고 bbb를 삽입 한 후 AAbbbAAA를 얻은 경우)와 같이 세그먼트를 세그먼트를 기존 영화에 삽입합니다. (틀림없이, 클래스 참조는 여기에 간결하지 않습니다 ...)
  2. 불행히도 -[QTMovie insertSegmentOfTrack:fromRange:scaledToRange:]은 트랙을 추가하지 않습니다. 대신 삽입 된 세그먼트의 길이를 변경할 수있는 기능이 추가 된 insertSegmentOfTrack:timeRange:atTime:처럼 작동합니다.

해결책은 -[QTMovie insertSegmentOfMovie:fromRange:scaledToRange:]입니다.

귀하의 예를 들어

이, 실제로 꽤 솔직 뭔가 코드의 꽤 부트로드가 ...의 내가 아는

-(QTMovie *) composedMovie 
{ 
    NSDictionary *editableAttribute = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:QTMovieEditableAttribute]; 
    // load and prepare the base movie: 
    QTMovie *composition = [QTMovie movieWithFile:fileName error:nil]; 
    [composition setMovieAttributes:editableAttribute]; 
    // load and prepare the insertion 
    QTMovie *insertion = [QTMovie movieWithFile:insertionFileName error:nil]: 
    [insertion setMovieAttributes:editableAttribute]; 
    // as you'll probably want to avoid adding the video tracks... 
    NSArray *videoTracks = [insertion tracksOfType:QTMediaTypeVideo]; 
    for (QTTrack *track in videoTracks) { 
     [insertion removeTrack:track]; 
    } 
    // figure out the time-range 
    QTTimeRange sourceRange = QTMakeTimeRange(QTZeroTime, [insertion duration]); 
    QTTimeRange destinationRange = sourceRange; 
    destinationRange.time = QTMakeTime(1ll, 1l); // use an offset of 1 second 
    [composition insertSegmentOfMovie:insertion fromRange:sourceRange scaledToRange:destinationRange]; 
    return composition; 
} 

이 될 것입니다하지만 그것이 :-(당신이있어

+0

작동하는 방법 다음 번에 샌프란시스코에서 이메일을 보내고 점심 식사를 나에게! ([email protected]) – richcollins

+0

독일에서 살고있어 잠시 시간을 할애 할 수있는 WWDC에 참석할 수 없을 것입니다. -) – danyowdee

관련 문제