का उपयोग कर वीडियो के साथ डेटा का सिंक्रनाइज़ेशन मैं सर्वर से क्लाइंट ब्राउज़र में वीडियो भेजने के लिए WebRTC
का उपयोग कर रहा हूं (मूल WebRTC API
और MCU WebRTC
सर्वर जैसे कुरेंटो) का उपयोग कर रहा हूं।वेबआरटीसी
ग्राहकों को भेजने से पहले वीडियो के प्रत्येक फ्रेम में मेटाडेटा (जैसे उपशीर्षक या कोई अन्य आवेदक सामग्री) शामिल था। मैं इस मेटाडेटा को क्लाइंट को भेजने का एक तरीका ढूंढ रहा हूं जैसे कि यह सिंक्रनाइज़ रहता है (उस समय तक यह वास्तव में प्रस्तुत किया गया है)। इसके अलावा मैं क्लाइंट साइड (जावास्क्रिप्ट द्वारा) से इस डेटा तक पहुंचने में सक्षम होना चाहता हूं। WebRTC DataChannel से डेटा भेजा जा रहा
- :
कुछ विकल्प मैं के बारे में सोचा। लेकिन मुझे नहीं पता कि डेटा को प्रति फ्रेम आधार पर सिंक्रनाइज़ किया गया है। लेकिन मुझे डेटा चैनल द्वारा भेजे गए डेटा को सुनिश्चित करने का कोई तरीका नहीं मिला और वीडियो चैनल सिंक्रनाइज़ किया गया है (फिर से, मुझे सिंगल फ्रेम का सटीक स्तर प्राप्त करने की उम्मीद है)।
- किसी भी तरह से क्लाइंट को मैन्युअल रूप से डेटा भेजना (वेबआरटीसी डेटा चैनल, websockets, आदि) वीडियो के टाइमस्टैम्प से मेल खाने वाले टाइमस्टैम्प के साथ। हालांकि, यहां तक कि यदि कुरेंटो या अन्य मध्य सर्वर वीडियो में टाइमस्टैम्प जानकारी को संरक्षित करते हैं, तो निम्न उत्तर के अनुसार जावास्क्रिप्ट से वीडियो टाइमस्टैम्प प्राप्त करने का कोई आवेदक तरीका नहीं है: How can use the webRTC Javascript API to access the outgoing audio RTP timestamp at the sender and the incoming audio RTP timestamp at the receiver?। मैंने मानक वीडियो तत्व के
timeupdate
ईवेंट का उपयोग करने के बारे में सोचा, लेकिन मुझे यह नहीं पता कि यह फ्रेम के सटीक स्तर के लिए काम करेगा, और मुझे यकीन नहीं है कि वेब वीडियो में लाइव वीडियो में इसका क्या अर्थ है। - डेटा को मैन्युअल रूप से भेजना और वीडियो को आवेदक रूप से अन्य
TextTrack
के रूप में संलग्न करें। फिर इसेonenter
औरonexit
का उपयोग सिंक्रनाइज़ली पढ़ने के लिए करें: http://www.html5rocks.com/en/tutorials/track/basics/। इसे अभी भी सटीक टाइमस्टैम्प की आवश्यकता है, और मुझे यकीन नहीं है कि टाइमस्टैम्प क्या हैं और यदि कुरनटो उन्हें पास करते हैं तो यह जानना नहीं है। - मैन्युअल रूप से फ्रेम को गिनने के लिए वेबआरटीसी के आंकड़े एपीआई का उपयोग करना (
getstats
का उपयोग करके), और उम्मीद है कि इस एपीआई द्वारा प्रदान की गई जानकारी सटीक है।
ऐसा करने का सबसे अच्छा तरीका क्या है, और मैंने किसी भी तरह से समस्याओं का समाधान कैसे किया है?
संपादित करें: उचित फ्रेम के साथ मेटाडेटा के सटीक सिंक्रनाइज़ेशन (एक फ्रेम से अधिक नहीं के संकल्प में) आवश्यक है।
यदि आप उन्हें अलग करते हैं तो आपको कभी भी सही सिंक्रनाइज़ स्ट्रीम नहीं मिलेंगी। आप दोनों धाराओं में एक स्वीकार्य बफर उपलब्ध होने तक आगे की प्रगति सुनिश्चित करने के लिए एक बफरिंग सिस्टम लागू कर सकते हैं। आपकी सबसे अच्छी शर्त फ्रेम फ्रेम के लिए सही फ्रेम को भूलना है, अगर आप चाहते हैं कि इसे वीडियो स्ट्रीम में फ्लाई पर वीडियो के रूप में एन्कोड करें। ऑडियो और ग्राफिक्स के अलावा, मुझे नहीं लगता कि आपको इतनी उच्च परिशुद्धता की आवश्यकता क्यों होगी। एक आप सही समय चीजों को भूल जाते हैं बहुत आसान हो जाता है। – Blindman67
धन्यवाद, अच्छा बिंदु। वैसे भी सवाल यह है कि प्रोग्रामेटिक तरीके से यह कैसे करना है, यह मानते हुए कि मैं यह सुनिश्चित कर सकता हूं कि वीडियो स्ट्रीम से पहले मेटाडेटा स्ट्रीम ब्राउज़र पर पहले ही पहुंच चुकी है। वीडियो को फिर से एन्कोड करने का आपका सुझाव अच्छा लगता है, लेकिन मुझे अभी भी वीडियो स्ट्रीम और मेटाडाटा स्ट्रीम के समय से मेल खाना पड़ेगा - मुझे यह भी यकीन नहीं है कि मध्य सर्वर प्रेजेंटेशन टाइमस्टैम्प को सुरक्षित रखता है। – MaMazav
मीडिया स्ट्रीम कुछ मदद प्रदान करते हैं। यदि आप एचटीएमएल 5 वीडियो का उपयोग कर रहे हैं तो आप बफरर्ड ऑब्जेक्ट को वापस करने के लिए buffered का उपयोग कर सकते हैं ताकि आपको यह बताने के लिए कि क्या buffered किया गया है। HTMLMediaElement इंटरफ़ेस वर्तमान समय को एक पठन लेखन विशेषता के रूप में प्रदान करता है। आप वीडियो के सेकंड में समय प्राप्त करने के लिए इसका उपयोग कर सकते हैं। वर्तमान फ्रेम संख्या 'frameNumber = Math.floor (videoElement.currentTime/frameRate) प्राप्त करने के लिए; ' वर्तमान समय पर लिखने से वीडियो उस समय की तलाश करेगा। – Blindman67