2017-12-23 17 views
9

나는 현재 비디오와 오디오에 대한 별도의 소스를 가지고 AVPlayer를 사용하여 비디오를 재생하기 위해 노력하고있어, 그래서 다음과 같이 하나의 AVPlayerItem로 결합 :AVPlayer를 - 먼저 파일을 다운로드하지 않고 별도의 오디오 URL과 함께 플레이 네트워크 비디오

let videoAsset = AVURLAsset(url: videoURL) 
let audioAsset = AVURLAsset(url: audioURL) 
let duration = videoAsset.duration 
let composition = AVMutableComposition() 

let videoTrack = composition.addMutableTrack(withMediaType: AVMediaType.video, preferredTrackID: kCMPersistentTrackID_Invalid) 
try? videoTrack?.insertTimeRange(CMTimeRange(start: kCMTimeZero, duration: duration), of: videoAsset.tracks(withMediaType: .video)[0], at: kCMTimeZero) 

let audioTrack = composition.addMutableTrack(withMediaType: .audio, preferredTrackID: kCMPersistentTrackID_Invalid) 
try? audioTrack?.insertTimeRange(CMTimeRange(start: kCMTimeZero, duration: duration), of: audioAsset.tracks(withMediaType: .audio)[0], at: kCMTimeZero) 

let playerItem = AVPlayerItem(asset: composition) 

그러나이 코드 은 완료되기 전에 네트워크를 통해 비디오 및 오디오의 전체 소스을 가져옵니다. 'videoAsset.duration'또는 videoTrack.insertTimeRange을 호출하면이 네트워크 요청이 트리거됩니다.

먼저 전체 파일을 다운로드하지 않고 AVPlayer을 사용하여 이러한 개별 비디오 및 오디오 URL (MP4 비디오 및 AAC 오디오)을 함께 재생할 수 있습니까?

저는 Mac에서 Quicktime Player가 재생을 시작하기 전에 소스 파일을 가져 오는 것을 확인했습니다. 그러나 VLC 또는 IINA와 같은 것을 사용하지 않으면 재생이 즉시 시작될 수 있습니다.

감사합니다.

답변

2

이것은 MP4 형식 때문입니다. 스트리밍에보다 안정적인 다른 형식을 사용하는 것을 고려해야합니다.

+0

불행히도 내 스트림이 아니지만 별도의 비디오 및 오디오가있는 YouTube의 DASH 스트리밍 형식입니다. – weiran