2012-07-03 25 views
15

मैं जब वीडियो OS X पर AVFoundation का उपयोग कर खेल रहे उपशीर्षक प्रदर्शित करने के लिए कोशिश कर रहा हूँउपशीर्षक दिखाएँ एक AVFoundation AVPlayer साथ

मैं प्रलेखन के माध्यम से देखा है और मैं एक सक्षम करने के लिए एक तरह से नहीं मिल सकता है उपशीर्षक ट्रैक। एपीआई में उपशीर्षक पटरियों के लिए कई संदर्भ हैं, जो मुझे विश्वास दिलाता है कि यह समर्थित है।

आईओएस पर विधि -[AVPlayerItem selectMediaOption:inMediaSelectionGroup:] उपशीर्षक ट्रैक सक्षम करने के लिए उपयोग किया जाता है। यह विधि 10.7 एसडीके में उपलब्ध नहीं है। उपशीर्षक दिखाने का कोई और तरीका है?

संपादित करें: क्विकटाइम प्लेयर एक्स उपशीर्षक समर्थन, उद्घाटन this movie पर उदाहरण के लिए उपशीर्षक सबमेनू भाषा का एक विकल्प की पेशकश करने के लिए प्रकट होता है है, और जब अंग्रेजी चुन लिया जाता है उन्हें प्रदर्शित करेगा। इससे मुझे विश्वास होता है कि वे एपीआई में शामिल हैं ...

+1

आप का प्रयास किया था के लिए 'closedCaptionDisplayEnabled = YES' – Dustin

+0

@DustinRowland धन्यवाद समर्थित है, मैं याद किया था कि मैं नहीं जानता कि दिखाई देने लगेंगे। बस कोशिश की, जहां तक ​​मैं देख सकता था कुछ भी नहीं बदला। – joerick

+0

मेरे लिए क्या काम किया गया AVAsset और AVPlayerItem का उपयोग कर रहा था, जिसने मुझे मेरी वस्तुओं पर अधिक नियंत्रण दिया। – Winston

उत्तर

5

मैं इस मुद्दे में खुद भाग गया। मैंने पाया कि दुर्भाग्यवश ऐसा करने का एकमात्र तरीका क्यूटीकिट पर स्विच करने के अलावा, एक अलग उपशीर्षक परत (एक CATextLayer) बनाना है और इसे खिलाड़ी परत के लिए एक sublayer के रूप में उचित रूप से स्थिति है। विचार यह है कि आप प्रत्येक सेकेंड या तो ट्रिगर करने के लिए आवधिक समय पर्यवेक्षक स्थापित करते हैं और उपशीर्षक अपडेट करते हैं, साथ ही (और यह वैकल्पिक है) कुछ यूआई तत्व जो आपके पास हो सकता है यह दिखाता है कि वीडियो में बीतने का समय क्या है।

मैंने मूल सबरीप (.srt) फ़ाइल पार्सर क्लास बनाया; आप इसे यहां पा सकते हैं: https://github.com/sstigler/SubRip-for-Mac। दस्तावेज़ीकरण के लिए विकी जांचना सुनिश्चित करें। कक्षा बीएसडी लाइसेंस की शर्तों के तहत उपलब्ध है।

एक और चुनौती जो आप दौड़ सकते हैं वह है कि कैटलक्लेयर की ऊंचाई को गतिशील रूप से उपशीर्षक की अलग-अलग लंबाई और अलग-अलग दृश्यों की अलग-अलग चौड़ाई के लिए समायोजित करने के लिए कैसे करें (यदि आप इसे उपयोगकर्ता-आकार बदलने योग्य चुनते हैं)। मुझे एक महान CALayoutManager सबक्लास मिला जो ऐसा करता है, और इसे करने के लिए मैं इसे करने के लिए कुछ करने के लिए कुछ संशोधन करता हूं: https://github.com/sstigler/height-for-width

मुझे उम्मीद है कि इससे मदद मिलती है।

+0

बहुत धन्यवाद। सहायक जवाब, लेकिन मुझे नहीं लगता कि यह मेरे मामले में चाल करेगा। हमें वीडियो स्ट्रीम या वीडियो फ़ाइल के हिस्से के रूप में उपशीर्षक प्राप्त हो रहे हैं, हमारे पास वर्तमान में एक SRT फ़ाइल तक पहुंच नहीं है। अगर मैं एक निकालने का तरीका समझता हूं तो मैं काम में आ सकता हूं ?! – joerick

2

रास्ता उपशीर्षक फ़ाइल जोड़ने के लिए AVMutableCompositionTrack और खिलाड़ी का उपयोग कर इसे नियंत्रित करेगा मैं इसे करने की कोशिश की और यह काम किया है या जल्दी समय पाठ या किसी पाठ के साथ एक पाठ फ़ाइल को जोड़कर AVPlayer को AVMediaTypeClosedCaption ट्रैक के रूप में एस सी सी उपशीर्षक जोड़कर है AVMediaTypeText ट्रैक और खिलाड़ी उपशीर्षक क्यों इस AVMediaTypeSubtitle ट्रैक क्या उपशीर्षक फ़ाइल यह

+0

कृपया, यदि आप नमूना कोड साझा कर सकते हैं तो यह वास्तव में सहायक होगा। धन्यवाद। –

+1

sublerCLI का उपयोग करें आप srt या scc उपशीर्षक को उपशीर्षक ट्रैक में परिवर्तित कर सकते हैं AVMediaTypeSubtitle और AVMediaTypeClosedCaption ट्रैक एक कंटेनर m4v ================> var sublerTask = NSTask() sublerTask.launchPath = sublerPath // SublerCLI पथ sublerTask।तर्क = ["-सोर्स", srtFilePath, "- dest", tempM4V, "- भाषा", भाषा, "- मेटाडाटा", भाषा] sublerTask.launch() sublerTask.waitUntilExit() –

+0

इसके बाद आप पढ़ सकते हैं एम 4 वी AVAsset के रूप में और इससे उपशीर्षक ट्रैक ले लो –