AVPlayer - reproduza vídeo em rede com URL de áudio separado sem baixar os arquivos primeiro

9

No momento, estou tentando reproduzir um vídeo usando AVPlayer , que tem fontes separadas para vídeo e áudio, então os combino em um único AVPlayerItem , conforme abaixo:

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)

No entanto, o problema é que esse código busca toda a fonte do vídeo e do áudio pela rede antes de ser concluído. Chamar "videoAsset.duration" ou videoTrack.insertTimeRange acionará essa solicitação de rede.

Existe uma maneira de usar AVPlayer para reproduzir esses URLs de áudio e vídeo separados (vídeo MP4 e áudio AAC) sem precisar baixar o arquivo inteiro primeiro?

Tenho notado que, no meu Mac, o Quicktime Player também busca o arquivo de origem antes de começar a reprodução. No entanto, usar algo como VLC ou IINA não e a reprodução pode começar imediatamente.

Obrigado.

    
por weiran 23.12.2017 в 16:16
fonte

2 respostas

2

Isso é por causa do formato MP4. Você deve considerar usar outro formato que seja mais estável para streaming.

    
por Alexander Volkov 23.12.2017 / 23:44
fonte
0

Nunca encontrei uma maneira de usar AVPlayer para conseguir isso. Em vez disso, usei o VLCKit que suporta a reprodução de escravos de diferentes origens.

    
por weiran 05.05.2018 / 17:55
fonte