2008-10-02 15 views
10

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

640x480.sdp:

 
v=0 
o=VideoServerIN IP4 192.168.0.2 
s=VideoStream640x480 
t=0 0 
c=IN IP4 192.168.0.2 
m=video 8000/2 RTP/AVP 96 
a=rtpmap:96 H264/90000 
a=fmtp:96 packetization-mode=0; profile-level-id=4D4033; sprop-parameter-sets=Z01AM5ZkBQHtCAAAAwAIAAADAYR4wZU=,aO48gJ== 
a=control:trackID=1 

960x480.sdp:

 
v=0 
o=VideoServerIN IP4 192.168.0.2 
s=VideoStream960x480 
t=0 0 
c=IN IP4 192.168.0.2 
m=video 8000/2 RTP/AVP 96 
a=rtpmap:96 H264/90000 
a=fmtp:96 packetization-mode=0; profile-level-id=4D4033; sprop-parameter-sets=J01AM5WwPA9sBAIA,KO4G8gA= 
a=control:trackID=1 

कैसे इन अलग-अलग फ़ाइलों एक भी SDP फाइल में जोड़ा जा सकता यहाँ दो उदाहरण एसडीपी फ़ाइलें हैं?

उत्तर

8

आपके दो एसडीपी उदाहरणों में पैरामीटर बहुत करीब हैं - स्ट्रीम नाम और स्पॉप-पैरामीटर-सेट अलग-अलग हैं। मुझे लगता है कि आपको स्ट्रीम नाम की परवाह नहीं है। आप अलग स्प्रॉप पैरामीटर सेट की जरूरत है और ग्राहकों का समर्थन मानक अच्छी तरह से आप अलग गतिशील पेलोड प्रकार प्रत्येक संकल्प के लिए एक एकल एसडीपी इस प्रकार का उपयोग करें और हो सकता है, तो:

 v=0 
    o=VideoServerIN IP4 192.168.0.2 
    s=VideoStream640x480 
    t=0 0 
    c=IN IP4 192.168.0.2 
    m=video 8000/2 RTP/AVP 96 97 
    a=rtpmap:96 H264/90000 
    a=fmtp:96 packetization-mode=0; profile-level-id=4D4033; sprop-parameter-sets=Z01AM5ZkBQHtCAAAAwAIAAADAYR4wZU=,aO48gJ== 
    a=rtpmap:97 H264/90000 
    a=fmtp:97 packetization-mode=0; profile-level-id=4D4033; sprop-parameter-sets=J01AM5WwPA9sBAIA,KO4G8gA= 
    a=control:trackID=1 

अन्य उत्तर की तरह यदि आप नहीं वास्तव में विभिन्न स्ट्रीम नामों या विभिन्न स्पॉप-पैरामीटर-सेटों की आवश्यकता होती है, जिन्हें आप अपने पहले एसडीपी और स्विच प्रारूप मध्य स्ट्रीम का उपयोग करने में सक्षम होना चाहिए। मैं H.264 या आपके विशेष डिकोडर के वास्तविक पेलोड को यह सुनिश्चित करने के लिए पर्याप्त नहीं जानता कि यह आपके अनुप्रयोगों में काम करेगा लेकिन यह वीडियो कॉन्फ़्रेंसिंग अनुप्रयोगों में बहुत आम है ताकि परिवर्तन को सिग्नल किए बिना संकल्पों के बीच गतिशील रूप से स्विच करने की अनुमति दी जा सके या एक अलग गतिशीलता की आवश्यकता हो पेलोड प्रकार।

हालांकि आप किसी अन्य उत्तर में उल्लिखित दो एसडीपी दस्तावेजों को जोड़ सकते हैं, मुझे नहीं लगता कि इससे इस मामले में मदद मिलेगी। एच264 डीकोडर्स केवल एक ही समय में एक ही स्पॉप-पैरामीटर-सेट पैरामीटर के साथ काम कर सकते हैं। चूंकि दोनों एसडीपी के पास एक ही पेलोड प्रकार, स्रोत पोर्ट इत्यादि होगा, इसलिए रिसीवर को पता नहीं चलेगा कि कौन सा स्पॉप-पैरामीटर-सेट पैरामीटर का उपयोग करना है। अद्यतन: नोट करें कि कुछ कार्यान्वयन एसडीपी (या केवल शुरुआत में एसडीपी से) नहीं, बल्कि उनके स्पॉप्स को बैंड में प्राप्त करते हैं। कि अपने वातावरण में लागू होता है एसडीपी स्प्रॉप पैरामीटर सेट inband अद्यतन किया जा सकता

संदर्भ:

  1. RFC 3984 RTP Payload Format for H.264 Video
  2. New proposed H.264 RTP Payload Format RFC 6184
  3. RFC 4566 SDP: Session Description Protocol

[क्षमा देने के लिए नहीं पूर्ण उद्धरण - सही करने के लिए स्वतंत्र महसूस करें]

+0

मैं भी स्प्रॉप पैरामीटर सेट ड्रॉप और उन्हें इन-बैंड और केवल एक वीडियो मीडिया लाइन होगा। सभी h264 एन्कोडर्स को वैसे भी इनबैंड होगा। यदि आप चाहते हैं कि क्लाइंट वीडियो आकार को नियंत्रित करने के लिए और बस फ्लाई पर फ़ीड स्विच करें, तो मेरे पास कुछ प्रकार का बैक-चैनल होगा। जब संकल्प बदल गया है और इसका प्रदर्शन आकार बदलता है तो ग्राहक सिर्फ "पहचान" कर सकता है। यह मेरे लिए ठीक काम किया है। एकमात्र समस्या यह है कि आपको एसडीपी पैरामीटर अपडेट करने की आवश्यकता है यदि आपका आकार (बिट-रेट) निर्दिष्ट प्रोफ़ाइल-स्तर से बड़ा हो जाता है (5.1 पर वे संभवतः उपयोग नहीं कर रहे हैं)। –

2

मैं आरएफसी (RFC2327 - SDP: Session Description Protocol) पर गया हूं और ऐसा लगता है कि आप केवल दो एसडीपी दस्तावेज़ों को जोड़ सकते हैं। दस्तावेज़ स्पष्ट रूप से बताता है:

जब एसएपी द्वारा एसडीपी व्यक्त किया जाता है, तो प्रत्येक पैकेट में केवल एक सत्र विवरण की अनुमति है। जब एसडीपी को अन्य माध्यमों से व्यक्त किया जाता है, कई एसडीपी सत्र विवरण एक साथ संयोजित किए जा सकते हैं ('v =' पंक्ति एक सत्र विवरण की शुरुआत को दर्शाती है जो पिछले विवरण को समाप्त करती है)

0

मुझे लगता है कि यह आपके डिकोडर पर निर्भर करता है। यदि यह स्ट्रीम के अंदर पैरामीटर को बदलने का समर्थन करता है, तो यदि आप संकल्प बदलते समय एन्कोडर को संबंधित शीर्षलेख डालने के लिए कह सकते हैं, तो आपके डिकोडर को स्वचालित रूप से स्विच करना चाहिए।

आपका प्रश्न वास्तव में क्या है? यह है: मैं स्ट्रीम को रोकने/पुनरारंभ किए बिना संकल्प कैसे बदल सकता हूं?

मुझे नहीं लगता कि आप पहले से ही एक डिकोडर को बता सकते हैं, यहां संभावित संकल्प हैं जो आप कुछ एसडीपी जादू के साथ देखेंगे। या तो आपका डिकोडर H264 पैरामीटर परिवर्तन को समझने में सक्षम है, और फिर आप ठीक हैं, या आपको पूरी चीज़ को पुनरारंभ करना बंद करना होगा, और फिर गतिशील एसडीपी पर्याप्त है।

मुझे पता है कि उदाहरण के लिए, वीएलसी MP4 एन्कोडिंग परिवर्तन (उदाहरण के लिए निरंतर बिट दर करने के लिए विभिन्न बिट दर से बढ़ रहा है) पता लगाने में सक्षम है, लेकिन अगर आप बदलना संकल्प केवल एक चीज आप SDP के साथ कर सकते है दुर्घटना होगा विभिन्न मीडिया विवरण को गठबंधन करें, उदाहरण के लिए विभिन्न गतिशील पेलोड प्रकार और विभिन्न नियंत्रण-आईडी विशेषता के साथ।

0

आप या तो डायनामिक पेलोड चेंज या इन-स्ट्रीम पैरामीटर सेट चेंज या एसआईपी री-इनवेट कर सकते हैं।

पेलोड परिवर्तनों में कोई समस्या है कि यदि आप एन्कोडर और डिकोडर को नियंत्रित नहीं करते हैं तो आपको यह सुनिश्चित करने की ज़रूरत है कि दूसरा अंत दोनों पेलोड स्वीकार करता है, और वे पेलोड को सही ढंग से स्विच करेंगे (और आपके लिए पर्याप्त तेज़ - कोई आवश्यकता नहीं है उस पर)।

इन-स्ट्रीम परिवर्तनों में पैरामीटर-सेट पैकेट खो जाने पर समस्या होती है। गलत-डिकोडिंग से बचने के लिए आप पैरामीटर सेट के एक अलग सेट का उपयोग कर सकते हैं (जब आप बदलते हैं तो पैरामीटर-सेट 1 से 2 तक स्विच करें) - यदि सेट खो गए हैं, तो आपको केवल एक जमे हुए या खाली तस्वीर मिलनी चाहिए। मैं उन्हें कुछ बार फिर से लिखने की सलाह दूंगा (बहुत जल्दी उत्तराधिकार में नहीं)।

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

(नोट: मैं आरएफसी 3984bis के लेखक, आरएफसी 3984 के लिए अद्यतन कर रहा हूँ)

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