streaming MP4 के माध्यम से लाइव स्ट्रीमिंग




h.264 mpeg (4)

बस अपने प्रश्न के 2 पैरा को देख रहे हैं ("वीडियो एएसएफ से ffmpeg द्वारा सर्वर पर ट्रांसकोड किए गए हैं"), आपने उल्लेख किया कि आप सर्वर पर वीडियो ट्रांसकोड करने के लिए एफएफएमपी का उपयोग कर रहे हैं।

फ़ाइल की शुरुआत में MOOV परमाणु रखने के लिए qt-faststart या MP4Box का उपयोग करें। (आप यह भी सुनिश्चित करें कि सार्वभौमिक समर्थन के लिए H264 वीडियो और AAC ऑडियो कोडेक का उपयोग करें)

आशा है कि इसने आपकी मदद की।

मैं एक ऑनलाइन टीवी सेवा पर काम कर रहा हूं। लक्ष्यों में से एक वीडियो बिना किसी अतिरिक्त ब्राउज़र प्लग-इन के खेला जाना है (फ्लैश को छोड़कर)।

मैंने MP4 का उपयोग करने का निर्णय लिया, क्योंकि यह HTML5 ब्राउज़रों के अधिकांश और फ्लैश (फ़ॉलबैक के लिए) द्वारा समर्थित है। FFMpeg द्वारा सर्वर पर ASF से वीडियो ट्रांसकोड किए जाते हैं।

हालाँकि, मैंने पाया कि MP4 को लाइव-स्ट्रीम नहीं किया जा सकता क्योंकि इसमें मेटाडेटा के लिए एक मोव एटम होता है जिसे लंबाई निर्दिष्ट करनी होती है। FFMpeg सीधे mp4 को stdout में स्ट्रीम नहीं कर सकता, क्योंकि यह फ़ाइल के अंत में moov डालता है। ( लाइव ट्रांसकोडिंग और MP4 की स्ट्रीमिंग एंड्रॉइड में काम करती है लेकिन नेटस्ट्रीम में फ्लैश प्लेयर में विफल रहती है। Play.FileStructureInInididience )

बेशक, एमपीईजी-टीएस मौजूद है, लेकिन यह एचटीएमएल 5 <video> द्वारा समर्थित नहीं है।

जो मैंने सोचा था कि वह MP4 के लिए वास्तविक समय में स्ट्रीम को ट्रांसकोड करने के लिए एक विधि है, और इसके लिए प्रत्येक नए HTTP अनुरोध पर, पहले एक मूव भेजें जो वीडियो की लंबाई के लिए एक बहुत लंबी संख्या निर्दिष्ट करता है, और फिर बाकी को भेजना शुरू करें MP4 फ़ाइल।

क्या इस तरह से स्ट्रीमिंग के लिए MP4 का उपयोग करना संभव है?

कुछ शोध और एवी ५०१ के उत्तर के बाद, मैं समझता हूं कि फ़्रेम का आकार ज्ञात होना चाहिए ताकि यह काम कर सके।

क्या mp4 फ़ाइल को छोटे भागों में विभाजित किया जा सकता है ताकि इसे स्ट्रीम किया जा सके?

बेशक, दूसरे कंटेनर / प्रारूप पर स्विच करना एक विकल्प है, लेकिन फ्लैश और एचटीएमएल 5 दोनों के साथ संगत एकमात्र प्रारूप mp4 / h264 है, इसलिए यदि मुझे दोनों का समर्थन करना है, तो मुझे दो बार ट्रांसकोड करना होगा।


आप खंडित MP4 का उपयोग कर सकते हैं। एक खंडित MP4 फ़ाइल निम्नानुसार बनाई गई है:

moov [moof mdat]+

मोव बॉक्स में केवल पटरियों (कितने, उनके प्रकार, कोडेक आरंभीकरण और इतने पर) के बारे में बुनियादी जानकारी शामिल है, लेकिन ट्रैक में नमूनों के बारे में कोई जानकारी नहीं है। सैंपल लोकेशन और सैंपल साइज के बारे में जानकारी moof बॉक्स में होती है, प्रत्येक moof बॉक्स में mdat होता है जिसमें नमूने होते हैं जैसा कि पूर्ववर्ती moof बॉक्स में वर्णित है। आमतौर पर कोई एक (moof, mdat) की लंबाई का चयन 2,4 या 8 सेकंड के आसपास करेगा (उस पर कोई विनिर्देश नहीं है लेकिन ये मान अधिकांश usecases के लिए उचित प्रतीत होते हैं)।

यह एक अनुपयोगी MP4 स्ट्रीम बनाने का एक तरीका है।


नहीं, यह सिर्फ बहुत लंबी लंबाई नहीं है .. आपको एक mp4 में हेडर बनाने के लिए हर फ्रेम का सटीक आकार जानना होगा। [यही कारण है कि यह विभिन्न एन्कोडर द्वारा अंत में बनाया जाता है]।


यहाँ पर मेरे विचार हैं कि कुछ लोग इसे दूसरों के रास्ते पर छोड़ सकते हैं। मैं अज्ञानता का अनुरोध करता हूं क्योंकि किसी ने वास्तव में इस प्रक्रिया को पूरी तरह से प्रलेखित नहीं किया है, यह एक शिक्षित अनुमान है।

AvAssetWriter केवल एक फ़ाइल को एन्कोड करता है, मेमोरी में एन्कोडेड वीडियो प्राप्त करने का कोई तरीका नहीं लगता है। फ़ाइल को पढ़ना, जबकि इसे एक बैकग्राउंड थ्रेड से लिखा जा रहा है कि सॉकेट का परिणाम प्राथमिक स्ट्रीम में है, यह अनिवार्य रूप से एक m4v है, जो कि h264 / accd mdata के साथ एक कंटेनर है, लेकिन कोई moov परमाणु नहीं है। (दूसरे शब्दों में कोई हेडर नहीं) कोई भी सेब सप्लाय किया गया खिलाड़ी इस स्ट्रीम को नहीं खेल सकता है, लेकिन ffplay पर आधारित एक संशोधित खिलाड़ी स्ट्रीम को डिकोड और प्ले करने में सक्षम होना चाहिए। यह काम करना चाहिए, क्योंकि ffplay libavformat का उपयोग करता है, जो प्राथमिक धाराओं को डिकोड कर सकता है, क्योंकि एक फ़ाइल लंबाई जानकारी नहीं है, कुछ चीजों को नाटक, DTS और PTS द्वारा निर्धारित किया जाना है और खिलाड़ी फ़ाइल के भीतर की तलाश नहीं कर सकता है।

वैकल्पिक रूप से m4v स्ट्रीम से एक कच्ची नलिका का उपयोग rtmp स्ट्रीम बनाने के लिए किया जा सकता है।

यदि आप आगे चर्चा करना चाहते हैं तो आप मुझसे सीधे संपर्क कर सकते हैं।

आपको डेटा कैसे मिलता है।

चूँकि आपकी फाइल को किसी भी तरह से प्राप्त करने वाले पक्ष में फ़ाइल का पुनर्निर्माण करना है, इसलिए मुझे लगता है कि आप इसे केवल एक प्रकार का खंड बना सकते हैं, स्टीव मैक्फारिन ने थोड़ा सा AppleSegmentedEolder लिखा था जिसे आप उसके गिथब पृष्ठ पर पा सकते हैं, यह आपके लिए moov परमाणुओं के कुछ मुद्दों को हल करता है सभी फ़ाइल जानकारी है।