http

2017-05-26 8 views
7

के माध्यम से आरटीएमपी स्ट्रीमिंग मैं Nginx-rtmp का उपयोग कर स्ट्रीमिंग सेवा सेट अप करने का प्रयास कर रहा हूं। कॉन्फ़िगरेशन फ़ाइलhttp

rtmp { 
    server { 
     listen 1935; 

     chunk_size 4000; 

     # video on demand for flv files 
     application vod { 
      play /var/flvs; 
     } 

     # video on demand for mp4 files 
     application vod2 { 
      play /var/mp4s; 
     } 
    } 
} 

मैं चाहता हूं कि स्ट्रीमिंग सेवा http not rtmp के माध्यम से हो। आखिरकार हम क्लाइंट को https का उपयोग कर प्रॉक्सी सर्वर से कनेक्ट करना चाहते हैं और फिर प्रॉक्सी सर्वर आरटीएमपी का उपयोग कर स्ट्रीमिंग सर्वर से बात करते हैं। मैं अब HTTP का उपयोग कर परीक्षण कर रहा हूं। एक वीएलसी प्लेयर में 1935/vod2/gua.mp4: // the_ip:

global 
    log /dev/log local0 
    log /dev/log local1 notice 
    chroot /var/lib/haproxy 
    stats socket /run/haproxy/admin.sock mode 660 level admin 
    stats timeout 30s 
    user haproxy 
    group haproxy 
    daemon 

    #tune.ssl.default-dh-param 2048 

    # Default SSL material locations 
    ca-base /etc/ssl/certs 
    crt-base /etc/ssl/private 

    # Default ciphers to use on SSL-enabled listening sockets. 
    # For more information, see ciphers(1SSL). This list is from: 
    # https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/ 
    ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS 
    ssl-default-bind-options no-sslv3 

defaults 
    log global 
    mode tcp 
    option httplog 
    option dontlognull 
     timeout connect 5000 
     timeout client 50000 
     timeout server 50000 
    errorfile 400 /etc/haproxy/errors/400.http 
    errorfile 403 /etc/haproxy/errors/403.http 
    errorfile 408 /etc/haproxy/errors/408.http 
    errorfile 500 /etc/haproxy/errors/500.http 
    errorfile 502 /etc/haproxy/errors/502.http 
    errorfile 503 /etc/haproxy/errors/503.http 
    errorfile 504 /etc/haproxy/errors/504.http 


frontend rtmp-80 
     bind *:80 
     default_backend rtmp-over-http 

backend rtmp-over-http 
     server media01 127.0.0.1:1935 check maxconn 200 

मैं RTMP की uri का उपयोग कर स्ट्रीमिंग सेवा एक्सेस कर सकते हैं: तो मैं निम्नलिखित config का उपयोग कर एक HAProxy की स्थापना की। लेकिन इससे कोई फर्क नहीं पड़ता कि मैंने कोशिश की, यह काम नहीं करता है जब मैंने http://the_ip:80/vod2/gua.mp4 का उपयोग कर स्ट्रीमिंग तक पहुंचने का प्रयास किया।

क्या यह भी संभव है?

बहुत बहुत धन्यवाद!

उत्तर

1

HTTP और RTMP दो अलग बातें हैं। HTTP के माध्यम से आरटीएमपी पैकेज को स्थानांतरित करने का कोई तरीका नहीं है, क्योंकि यदि कोई क्लाइंट HTTP अनुरोध भेजता है, तो सर्वर HTTP प्रतिक्रिया वापस कर देगा और फिर क्लाइंट HTTP पैकेज का उपभोग करेगा। सिद्धांत रूप में, क्लाइंट HTTP पैकेज को अनपैक कर सकता है, लेकिन अतिरिक्त कार्य की आवश्यकता होगी।

एक बहुत बेहतर समाधान HTTP लाइव स्ट्रीमिंग (एचएलएस) उपयोग कर रहा है। nginx-vod-module एचएलएस का समर्थन करता है। इसे कॉन्फ़िगरेशन फ़ाइल में आसानी से कॉन्फ़िगर किया जा सकता है। जब सर्वर में कोई वीडियो डाला जाता है, तो ग्राहक http://127.0.0.1/vod/sample.mp4/index.m3u8 जैसे यूआरएल का उपयोग कर सकता है। Nginx सर्वर स्वचालित रूप से वीडियो को HTTP पैकेज में विभाजित करता है और एक प्लेलिस्ट प्रदान करता है। तो ग्राहक इसे खेल सकते हैं। एचएलएस व्यापक रूप से कई ओपन सोर्स प्लेयर (ब्राउज़रों के लिए) और मोबाइल डिवाइस (आईओएस और एंड्रॉइड दोनों) द्वारा समर्थित है। और इसे सुरक्षित परिवर्तन के लिए HTTPS के साथ आसानी से कॉन्फ़िगर किया जा सकता है।

3

खैर, वीडियो ग्राहक (अपने मामले वीएलसी प्लेयर में) पता करने के लिए जो प्रोटोकॉल से धारा को पढ़ने के लिए कोशिश कर रहा है है। तो संक्षेप में, नहीं। आपको क्लाइंट को यह संशोधित करना होगा कि यह वास्तव में आरटीएमपी सामग्री प्राप्त कर रहा है, न कि HTTP।

एक तरफ ध्यान दें पर, आप RTMP सर्वर के लिए पोर्ट 80 उपयोग करने के लिए कोशिश कर सकते हैं? लेकिन आम तौर पर HTTP के बंदरगाह को चोरी करना अच्छा नहीं है लेकिन वीडियो वास्तव में पोर्ट 80 के माध्यम से स्थानांतरित किया जाएगा (लेकिन HTTP के प्रोटोकॉल का उपयोग नहीं कर रहा है)।

अब आप (अपने सर्वर प्रॉक्सी का प्रयोग) का उपयोग नहीं के शरीर के माध्यम RTMP सामग्री पारित करने के लिए चाहते हैं, तो ग्राहक भी RTMP करने के लिए आने वाले पैकेट में परिवर्तित करने की जरूरत है। इस तरह यह संभव है, लेकिन फिर, आपको प्रत्येक पैकेट को बदलने के लिए सर्वर और क्लाइंट पक्ष दोनों पर प्रॉक्सी की आवश्यकता होगी। याद रखें कि आरटीएमपी को रीयल-टाइम स्ट्रीमिंग प्रोटोकॉल के रूप में बनाया गया था, इसलिए प्रॉक्सी के रूप में HTTP का उपयोग करने से इसके प्रदर्शन में काफी कमी आएगी।

वहाँ भी RTMPT, जो HTTP प्रोटोकॉल के माध्यम से RTMP पैकेट सुरंगों है। यह फ़ायरवॉल और अधिकांश कॉरपोरेट ट्रैफिक फ़िल्टरिंग को बाईपास करने के लिए बनाया गया था, लेकिन यह adds latency और कुल मिलाकर थोड़ा सा समर्थन है। मुझे लगता है कि Red5 streaming server supports it। मैंने उन मामलों को भी देखा है जहां फ़ायरवॉल संदिग्ध HTTP पैकेट ब्लॉक करते हैं और इससे सामान्य रूप से पैकेट नुकसान और अस्थिरता के कारण आरटीएमपीटी के साथ कुछ समस्याएं हो सकती हैं।

+0

धन्यवाद! किसी उपकरण/सेटअप के लिए कोई सुझाव जो आरटीएमपीएस स्ट्रीमिंग के लिए उपयोग किया जा सकता है? – Ryan

+1

ठीक है, आप आरटीएमपीटी की तलाश कर सकते हैं, जो मूल रूप से HTTP पर आरटीएमपी सुरंग है। मुझे नहीं पता कि आरटीएमपीटी के साथ एन्क्रिप्शन कैसे काम करेगा। –