2017-12-23 34 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 कॉल करने से इस नेटवर्क अनुरोध को ट्रिगर किया जाता है।

क्या इन अलग वीडियो और ऑडियो यूआरएल (एमपी 4 वीडियो और एएसी ऑडियो) को पूरी फ़ाइल को डाउनलोड किए बिना AVPlayer का उपयोग करने का कोई तरीका है?

मैंने देखा है कि मेरे मैक पर, क्विकटाइम प्लेयर प्लेबैक शुरू करने से पहले स्रोत फ़ाइल भी लाता है। हालांकि वीएलसी या आईआईएनए जैसे कुछ का उपयोग नहीं करता है और प्लेबैक तुरंत शुरू हो सकता है।

धन्यवाद।

उत्तर

2

यह एमपी 4 प्रारूप की वजह से है। आपको स्ट्रीमिंग के लिए अधिक स्थिर है जो एक और प्रारूप का उपयोग करने पर विचार करना चाहिए।

+0

दुर्भाग्यवश यह मेरी स्ट्रीम नहीं है, लेकिन YouTube के DASH स्ट्रीमिंग प्रारूप में अलग वीडियो और ऑडियो है। – weiran

संबंधित मुद्दे