2012-09-04 40 views
10

का उपयोग कर मैं वास्तविक समय एन्कोडेड डेटा को वेबएम या ओजीवी पर लपेटना चाहता हूं और इसे एचटीएमएल 5 ब्राउज़र पर भेजना चाहता हूं।एचटीएमएल 5 (आउट वीब्रेट के साथ) के लिए रीयल टाइम स्ट्रीमिंग सिर्फ वीडियो टैग

क्या यह वेबएम या ओजीवी कर सकता है, एमपी 4 इसके एमडीएटी परमाणुओं के कारण ऐसा नहीं कर सकता है। (कोई वास्तविक समय में एच 264 और एमपी 3 को लपेट नहीं सकता है और इसे लपेटता है और इसे क्लाइंट को भेजता है) कहें कि मैं अपने वेबकैम से इनपुट और मेरे अंतर्निहित माइक्रो से ऑडियो खिला रहा हूं। Fragmented mp4 इसे संभाल सकता है लेकिन ऐसा करने के लिए libs खोजने में परेशानी है)।

मुझे यह cuz करने की ज़रूरत है, मैं ऑडियो और वीडियो को अलग से नहीं भेजना चाहता हूं।

अगर मैंने इसे अलग से भेज दिया, तो वीडियो पर ऑडियो टैग और वीडियो पर ऑडियो भेजना> (ऑडियो और वीडियो को डिमक्स किया गया और भेजा गया) क्या मैं उन्हें क्लाइंट ब्राउज़र पर जावास्क्रिप्ट के साथ सिंक कर सकता हूं। मैंने कुछ उदाहरण देखा लेकिन अभी तक सुनिश्चित नहीं है।

उत्तर

2

Evren,

जब से तुम कहा है इस सवाल के शुरू में, मीडिया सोर्स एक्सटेंशन https://www.w3.org/TR/media-source/ पर्याप्त करने के लिए परिपक्व है थोड़ी सी बफरिंग के साथ बहुत कम (30 एमएमएस) आईएसओ-बीएमएफएफ वीडियो/एमपी 4 सेगमेंट खेलने में सक्षम हो।

HTML5 live streaming

तो अपने बयान

का संदर्भ लें (एक वास्तविक समय में h264 और एमपी 3 लपेट नहीं कर सकते और लपेट और ग्राहक के लिए भेज)

बाहर है अब की तारीख हाँ आप इसे h264 + एएसी के साथ कर सकते हैं।

वहां कई कार्यान्वयन हैं; अवास्तविक मीडिया सर्वर पर एक नज़र डालें। अवास्तविक मीडिया सर्वर पूछे जाने वाले प्रश्न से: http://umediaserver.net/umediaserver/faq.html

कैसे की जाती है अवास्तविक एचटीएमएल 5 लाइव अलग एमपीईजी डैश से स्ट्रीमिंग? एमपीईजी-डीएएसएच के विपरीत, अवास्तविक मीडिया सर्वर वेब ब्राउज़र में एचटीएमएल 5 एमएसई तत्व पर लाइव स्ट्रीमिंग के लिए वेबसॉकेट प्रोटोकॉल का उपयोग करता है। प्रति एमपीईजी-डीएएसएच के HTTP अनुरोधों के माध्यम से सेगमेंट लाने से यह अधिक कुशल है। इसके अलावा, अवास्तविक मीडिया सर्वर 30 मिनट के रूप में कम से कम अवधि के खंड भेजता है। यह कम, उप-दूसरी विलंबता स्ट्रीमिंग की अनुमति देता है, जबकि एमपीईजी-डीएएसएच, अन्य HTTP खंड-आधारित लाइव स्ट्रीमिंग प्रोटोकॉल की तरह, कम विलंबता लाइव स्ट्रीमिंग प्रदान नहीं कर सकता है। http://umediaserver.net/umediaserver/demos.html सूचना HTML5 प्लेयर में विलंबता कि फ्लैश प्लेयर में के बराबर है:

उनकी क़ौम वेबपेज RTSP कैमरे से एक जीवित एचटीएमएल 5 फ़ीड है।

+0

को हटाएं यह अवास्तविक के विज्ञापन की तरह पढ़ता है। "वहां कई कार्यान्वयन हैं" अभी तक एकमात्र सुझाव अवास्तविक से एक समाधान है जिसके लिए लाइसेंस की आवश्यकता है। चूंकि यह 4 साल पहले की तुलना में पिछले सबसे अच्छे उत्तर की तुलना में एक बहुत अधिक वर्तमान उत्तर है, इसलिए कई कार्यान्वयन में से एक यह देखना अच्छा लगेगा कि अन्य लोग निर्माण कर सकते हैं। – JohnMetta

0

100% सुनिश्चित नहीं है कि आप यह कर सकते हैं। एचटीएमएल 5 ने किसी भी लाइव स्ट्रीमिंग तंत्र को मंजूरी नहीं दी है। आप websockets का उपयोग कर सकते हैं और ब्राउज़र को वास्तविक समय में डेटा भेज सकते हैं। लेकिन आपको खुद को पार्सिंग तर्क लिखना है और मुझे नहीं पता कि आप डेटा को खिलाएंगे जैसे खिलाड़ी के पास आता है।

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

+1

मुझे एक डब्लूएमवी फ़ाइल पढ़ने की जरूरत है। प्रतिपादन गति के साथ वास्तविक समय ट्रांसकोड करें। (जैसे कि मैं एक फ़ाइल में देख रहा हूं और लिख नहीं रहा हूं) वीपी 8 को एन्कोड किया गया और इसे वेबएम में लपेटें। ब्राउज़र file.webm को इंगित करने जा रहा है जिसे ट्रांसकोड किया जा रहा है। अनुरोध होने पर , मैं सर्वरसाइड पर लंबे मतदान के लिए जा रहा हूं। और मैं उस http सॉकेट पर लिखने जा रहा हूं (आप इसका नाम "प्रतिक्रिया" कह सकते हैं) तो एक तरीका संचार है, यह सर्वर ब्राउज़र पर वेबएम फ़ाइल को दबा रहा है। ब्राउज़र एक फ़ाइल को प्रगतिशील डाउनलोड कर रहा है, कम से कम ऐसा लगता है कि यह एक फ़ाइल है लेकिन यह एक वेबस्ट्रीम को वेबम में लपेटा जा रहा है। –

+2

करने योग्य। शायद फ़ाइल को सीधे लिखने के लिए सरल और एक वेबसर्वर से फ़ाइल की सेवा करें। यह सुनिश्चित करने के लिए कि "वास्तविक समय" में सेवा दी जाती है और तेज़ या धीमी नहीं है, यह सुनिश्चित करने के लिए लक्षित बिटरेट पर सेट वेबसर्वर थ्रॉटलिंग का उपयोग करें। कुछ कमरे पाने के लिए ट्रांसकोडिंग कुछ सिर शुरू करें। कार्य करना चाहिए। थ्रॉटलिंग महत्वपूर्ण है ताकि खिलाड़ी उस गति से तेज़ी से नहीं खींच सके जिस पर आप उत्पादन कर रहे हैं (लक्ष्य बिटरेट) – av501

10

मैंने यह वेबएम के लिए निम्न प्रकार के रूप में उबंटू पर चल रहे ffmpeg/ffserver के साथ किया था (एमपी 4 और ओग थोड़ा आसान है, और उसी सर्वर से इसी तरह से काम करना चाहिए, लेकिन आपको ब्राउज़रों में संगतता के लिए सभी 3 प्रारूपों का उपयोग करना चाहिए)।

सबसे पहले, libvpx ड्राइवरों को शामिल करने के लिए स्रोत से ffmpeg बनाएं (भले ही आप किसी संस्करण का उपयोग कर रहे हों, आपको वेबम स्ट्रीम करने के लिए नवीनतम (इस महीने के रूप में) की आवश्यकता है क्योंकि उन्होंने वैश्विक रूप से शामिल करने के लिए कार्यक्षमता को जोड़ा है हेडर)। मैंने इसे उबंटू सर्वर और डेस्कटॉप पर किया, और this guide ने मुझे दिखाया - कैसे अन्य ओएस can be found here के लिए निर्देश।

एक बार जब आप ffmpeg/ffserver का उपयुक्त संस्करण प्राप्त कर लेते हैं तो आप उन्हें स्ट्रीमिंग के लिए सेट अप कर सकते हैं, मेरे मामले में यह निम्नानुसार किया गया था।

वीडियो कैप्चर डिवाइस पर:

ffmpeg -f video4linux2 -standard ntsc -i /dev/video0 http://<server_ip>:8090/0.ffm 
  • कि "-f video4linux2 -मानक NTSC मैं/dev/video0" भाग अपने इनपुट स्रोत के आधार पर बदल सकती है (मेरा एक वीडियो के लिए है कार्ड ग्रहण करें)।

प्रासंगिक ffserver.conf अंश:

Port 8090 
#BindAddress <server_ip> 
MaxHTTPConnections 2000 
MAXClients 100 
MaxBandwidth 1000000 
CustomLog /var/log/ffserver 
NoDaemon 

<Feed 0.ffm> 
File /tmp/0.ffm 
FileMaxSize 5M 
ACL allow <feeder_ip> 
</Feed> 
<Feed 0_webm.ffm> 
File /tmp/0_webm.ffm 
FileMaxSize 5M 
ACL allow localhost 
</Feed> 

<Stream 0.mpg> 
Feed 0.ffm 
Format mpeg1video 
NoAudio 
VideoFrameRate 25 
VideoBitRate 256 
VideoSize cif 
VideoBufferSize 40 
VideoGopSize 12 
</Stream> 
<Stream 0.webm> 
Feed 0_webm.ffm 
Format webm 
NoAudio 
VideoCodec libvpx 
VideoSize 320x240 
VideoFrameRate 24 
AVOptionVideo flags +global_header 
AVOptionVideo cpu-used 0 
AVOptionVideo qmin 1 
AVOptionVideo qmax 31 
AVOptionVideo quality good 
PreRoll 0 
StartSendOnKey 
VideoBitRate 500K 
</Stream> 

<Stream index.html> 
Format status 
ACL allow <client_low_ip> <client_high_ip> 
</Stream> 
  • इस नोट feeder_ip ऊपर उल्लिखित ffmpeg आदेश पर अमल करने पर एक सर्वर के लिए कॉन्फ़िगर किया गया है, और client_high_ip जबकि के माध्यम से client_low_ip करने के लिए सर्वर तो server_ip पर सर्वर के लिए server_ip पर वेबएम वार्तालाप में एमपीईजी को संभालना (नीचे जारी)।

यह ffmpeg आदेश मशीन पर निष्पादित किया जाता है पहले से server_ip रूप में जाना जाता है (यह वास्तविक एमपीईजी संभालती है -> webm रूपांतरण और एक अलग फ़ीड पर यह वापस फ़ीड ffserver में):

ffmpeg -i http://<server_ip>:8090/0.mpg -vcodec libvpx http://localhost:8090/0_webm.ffm 

एक बार ये सभी शुरू हो गए हैं (पहले ffserver, फिर feeder_ip ffmpeg प्रक्रिया तब सर्वर_आईपी ffmpeg प्रक्रिया) आप http: //: 8090/0.webm पर लाइव स्ट्रीम तक पहुंचने में सक्षम होना चाहिए और http पर स्थिति की जांच करनी चाहिए : //: 80 9 0/

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

+0

धन्यवाद, मुझे इसे सीधे शो के साथ मिला। यह बहुत उपयोगी है। –

+0

@ EvrenBingøl, क्या आप अधिक जानकारी प्रदान कर सकते हैं? – alfadog67

+0

यह थोड़ी देर हो गया है इसलिए मुझे याद है; क्लाइंट सर्वर से एक ओजीवी फ़ाइल का अनुरोध करता है जो रीयलटाइम वीडियो का प्रतिनिधित्व करता है। भेजा जा रहा डेटा डायरेक्टएक्स का उपयोग कर सर्वर पर फ्लाई पर ओजीवी में परिवर्तित हो जाता है। तो कहें कि आप एक वीडियो चैट करना चाहते हैं। आप अपने वीडियो और ऑडियो डेटा को अपने हेडर के साथ सर्वर पर भेज देंगे (जो भी हो सकता है) और डायरेक्टएक्स उस ओजीवी में परिवर्तित हो जाता है और इसे अंत प्राप्त करने के लिए भेजता है। ओजीवी बहुत अच्छी तरह से संभालता है। –

4

मैं क्लाइंट एचटीएमएल 5 वीडियो टैग पर वेबएम स्ट्रीम रिले करने के लिए स्ट्रीम-एम सर्वर का उपयोग करता हूं। https://github.com/yomguy/stream-m

उत्पादन में अच्छी तरह से काम करता है। चीयर्स

संपादित करें: ध्यान दें कि Icecast अब भी बॉक्स से बाहर WebM स्ट्रीम कर सकते हैं;)