HTTP โปรเกรสซีฟดาวน์โหลดทางเลือกที่ทำงานได้กับ HLS / DASH / RTMP เพื่อให้บริการวิดีโอสดหรือไม่


16

ฉันกำลังทำงานบนเว็บไซต์ที่ต้องการส่งกระแสข้อมูลวิดีโอสดให้กับผู้ใช้และดังนั้นฉันต้องรับทราบเกี่ยวกับสถานะขออภัยของเทคโนโลยีการสตรีมวิดีโอบนเบราว์เซอร์ในปัจจุบัน โซลูชันยอดนิยมสำหรับสตรีมมิงแบบสดในปัจจุบันทั้งหมดล้วนมีปัญหาด้านความเข้ากันได้ RTMP ต้อง Flash, HLS เป็นเพียงการสนับสนุน natively บน Safari และ Chrome สำหรับ Android, DASHไม่ได้กำเนิดสนับสนุนทุกที่และใช้dash.jsต้องใช้สื่อที่มาส่วนขยายซึ่งยังไม่ได้รับการสนับสนุนอย่างกว้างขวาง

สิ่งนี้นำไปสู่คำถามที่ฉันดูเหมือนชัดเจน: เป็นไปได้ไหมที่จะใช้งานง่าย ดาวน์โหลดแบบโปรเกรสซีฟเป็นทางเลือกแทนโปรโตคอลเช่น HLS, RTMP และ DASH ที่ต้องการการสนับสนุนเบราว์เซอร์หรือปลั๊กอิน

แนวคิดของการใช้การดาวน์โหลดแบบก้าวหน้าเพื่อสตรีมสื่อสดไม่เคยปรากฏมาก่อน คนทำไปแล้วสำหรับเสียง เครื่องมือเช่นliveCasterช่วยให้คุณสามารถสตรีมเสียง MP3 สดผ่านการตอบสนอง HTTP ก้าวหน้าเดียวโดยไม่จำเป็นต้องเป็นไฟล์ MP3 ที่บันทึกไว้ล่วงหน้าและห้องสมุดเช่น AmplitudeJS ได้หายไปจากทางของพวกเขาที่จะเพิ่มคุณสมบัติที่เกี่ยวข้องกับชนิดของเสียงสตรีมมิ่งที่มีชีวิตนี้

แม้ว่าฉันไม่เคยเห็นอินสแตนซ์ใด ๆ ของเทคนิคนี้ที่ใช้งานในวิดีโอแทนและฉันไม่สามารถบอกได้ว่าทำไม ดูเหมือนว่ามันจะลบเลเยอร์ของปัญหาด้านความเข้ากันได้กับเบราว์เซอร์ด้านที่ยุ่งและยากสำหรับการแลกเปลี่ยนที่ค่อนข้างน้อย (และความเข้ากันได้ยังคงเป็นปัญหาใหญ่สำหรับการสตรีมสดแม้ในกรณีที่ผู้เชี่ยวชาญทำเช่นนั้นถ้าฉันลองดูวิดีโอสดบน BBC ของ iPlayer ใน Firefox มันแค่ให้ข้อความข้อผิดพลาดบอกให้ฉันติดตั้ง Flash) แต่ก็ไม่มีใครใช้ เทคนิคนี้และฉันไม่เคยเห็นใครมาด้วยซ้ำพูดถึงความคิดนอกเหนือจากฉัน

ทำไม? มีข้อ จำกัด พื้นฐานที่ฉันไม่เห็นหรือไม่ว่าจะทำให้มันเป็นไปไม่ได้เพียงแค่สตรีมไฟล์วิดีโอเช่น MP4 ผ่านการดาวน์โหลดแบบโปรเกรสซีฟในขณะที่มันกำลังถูกสร้างขึ้นและเล่นใน<video>องค์ประกอบที่ดาวน์โหลด


คุณไม่สามารถใช้ไลบรารีจาวาสคริปต์ HLS (เช่น hls.js ที่นี่: github.com/video-dev/hls.js/tree/master ) เพื่อเพิ่ม cross browser HLS สำหรับหน้าของคุณหรือไม่ ฉันเดาว่านี่อาจไม่มีอยู่เมื่อคุณถามคำถามนี้ แต่แรกเริ่ม แต่ตอนนี้มันเกิดขึ้นแล้ว :)
stuckj

คำตอบ:


3

คำถามของคุณถูกต้องและตามหลักเหตุผลผมคิดว่าคุณสามารถใช้การดาวน์โหลดแบบก้าวหน้าสำหรับการสตรีมวิดีโอสด อันที่จริงมีวิดีโอสตรีมมิ่งออนไลน์จำนวนมากเช่น YouTube และ HTTP ใช้อยู่แล้ว ฉันสมมติว่าคุณกำลังพูดถึงการสตรีมสดอย่างเคร่งครัดไม่ใช่แค่สตรีมมิง

คุณจะต้องใช้กรณีใช้งาน Live Streaming ด้วยตัวคุณเอง! ซึ่งโปรโตคอลการสตรีมมิฉะนั้น (RTMP เป็นต้น) ทำเอง ต่อไปนี้เป็นเหตุผลบางประการที่ต้องการโปรโตคอลและสถาปัตยกรรมเหล่านี้:

1. อัตราบิตผันแปร

วิดีโอสตรีมมิงสดส่วนใหญ่จะถูกเข้ารหัสใน VBR และวิดีโอของคุณจะต้องปรับให้เข้ากับการเปลี่ยนแปลงความแออัดของเครือข่ายของลูกค้าของคุณอย่างรวดเร็ว ดังนั้นวิดีโอของคุณสามารถเปลี่ยนความละเอียดหลายรายการในเวลาอันสั้นขึ้นอยู่กับว่าการเชื่อมต่อไคลเอนต์นั้นเร็วหรือช้าเพียงใด

ตามที่ Wikipedia

มันทำงานโดยการตรวจสอบแบนด์วิดธ์และความจุของผู้ใช้ CPU แบบเรียลไทม์และปรับคุณภาพของวิดีโอสตรีมตามนั้น

2. เนื้อหาสด

จุดสำคัญที่สุดคือการสตรีมสดหมายถึงเนื้อหาสด ไม่เหมือนกับ HTTP Progressive Download คุณไม่สามารถบัฟเฟอร์ได้ตลอดเวลา ผู้ใช้จะต้องเห็นเฟรมล่าสุดสำหรับทั้งโลกและไม่สามารถล้าหลังได้

3. ปิดการค้นหา

ปัญหาเล็กน้อย แต่โปรโตคอลไม่ควรอนุญาตให้ผู้ใช้ค้นหาแบบย้อนกลับโดยเฉพาะ สิ่งนี้ไม่เพียงถูกควบคุมในระดับเครื่องเล่นวิดีโอ แต่ยังอยู่ในระดับเครือข่าย

4. การตัดการเชื่อมต่อ / เครือข่ายที่ไม่น่าเชื่อถือเป็นประจำ

ฉันค่อนข้างชัดเจนเกี่ยวกับประเด็นนี้ แต่ฉันรู้ว่าเมื่อการดาวน์โหลด HTTP ขาเข้าถูกตัดการเชื่อมต่ออาจต้องใช้เวลาสักครู่ในการสร้างการจับมือกัน (แม้จะมีkeep-alive) โปรโตคอลสดเร็วกว่ามากในการเชื่อมต่อและยกเลิกการเชื่อมต่อเนื่องจากจุดต่อไป ->

5. ความหน่วงแฝง

HTTPจะทำงานผ่านTCPซึ่งให้การรับประกันการส่งแพ็กเก็ต เปรียบเทียบสิ่งนี้กับUDP ที่ใช้ในโพรโทคอลจำนวนมาก (โดยเฉพาะอย่างยิ่งการเล่นเกมแบบเล่นพร้อมกันหลายคน) ที่ความเร็วจัดลำดับความสำคัญมากกว่าการรับประกัน

ดูข้อมูลเพิ่มเติมได้ที่นี่ -> https://en.wikipedia.org/wiki/Streaming_media#Protocols

6. การคัดลอกเนื้อหา

เซิร์ฟเวอร์สตรีมสดส่วนใหญ่จะตอบกลับเฉพาะเนื้อหาของเวลาปัจจุบันเท่านั้น แม้ว่ามันจะเป็นไปได้ที่จะคัดลอกเนื้อหาของสตรีมสด แต่ก็ต้องหันไปจับภาพหน้าจอและอื่น ๆ การให้การดาวน์โหลด HTTP แบบโปรเกรสซีฟทำให้การคัดลอกเนื้อหาค่อนข้างน่าสนใจ

ตอนนี้ HTTP สามารถสร้างแบบจำลองเพื่อให้ส่วนใหญ่ข้างต้น

HTTP Live สตรีมมิ่ง (HLS)ของ Apple ที่คุณกล่าวถึงใกล้เคียงกับสิ่งที่คุณพยายามจะทำให้สำเร็จ

และมีงานวิจัยที่กำลังดำเนินอยู่ในสาขานี้ตามที่ได้รับที่นี่ -> http://www.streamingmedia.com/Articles/ReadArticle.aspx?ArticleID=65749&PageNum=2

ฉันกำลังมองหาข้อมูลเพิ่มเติมและจะอัปเดตคำตอบนี้


ดูเหมือนว่าไม่ถูกต้องในการพูดถึงเวลาแฝงซึ่งเป็นข้อเสียของการใช้การดาวน์โหลด HTTP แบบโปรเกรสซีฟเนื่องจากคู่แข่งหลัก ได้แก่ DASH และ HLS ซึ่งส่งเซ็กเมนต์วิดีโอผ่านการร้องขอ HTTP ตามลำดับหลายครั้ง ฉันไม่ทราบรายละเอียดของโพรโทคอลทุกอย่าง แต่ฉันคิดว่าวิธีหลังต้องใช้เวลาแฝงขั้นต่ำอย่างน้อยที่สุดก็ใช้ความยาวเซกเมนต์ในขณะที่วิธีการดาวน์โหลดแบบโปรเกรสซีฟไม่มีวิธีแฝงขั้นต่ำทางทฤษฎีโฆษณาได้เปรียบของวิธีการดาวน์โหลดก้าวหน้าใช่มั้ย?
Mark Amery

นอกจากนี้ข้อกังวลอื่น ๆ ที่นี่เช่นการค้นหาและการกู้คืนจากการยกเลิกการเชื่อมต่อเป็นปัญหาที่นำไปใช้อย่างเท่าเทียมกันกับการใช้งาน JavaScript ของ DASH แต่ dash.js น่าจะเอาชนะพวกเขาได้ ฉันคิดว่าพวกเขาอาจจะเอาชนะได้สำหรับผู้เล่นที่ดาวน์โหลดแบบโปรเกรสซีฟเพียงขโมยโซลูชันใด ๆ ก็ตามที่ผู้พัฒนา dash.js ออกมา
Mark Amery

@ MarkAmery ถ้าคุณเปรียบเทียบกับ DASH และ HLS แล้วใช่ฉันเดาว่ามันเทียบเคียง แต่ถ้าคุณเปรียบเทียบกับโพรโทคอลเก่าบางตัวที่มีมากกว่า UDP HTTP จะเสียมือ! แม้ว่าคุณจะเห็นระบบเรียลไทม์จำนวนมากในปัจจุบันถูกสร้างขึ้นโดยใช้ Websockets และหลีกเลี่ยง HTTP เนื่องจากปัญหาความล่าช้า
Gaurav Ramanan

1
อย่างไรก็ตามความง่ายในการคัดลอกเนื้อหาเป็นข้อเสียจริงกว่า dash.js และ HLS และฉันไม่แน่ใจว่ากระแสบิตเรตของตัวแปรจะสามารถใช้งานได้อย่างไรโดยใช้การดาวน์โหลดแบบโปรเกรสซีฟ
Mark Amery

@ MarkAmery เมื่อพูดถึงเรียลไทม์และสตรีมสดเราต้องพิจารณาประสิทธิภาพและความเป็นไปได้ไม่ใช่แค่ ฉันจะดู DASH แต่ฉันสงสัยว่ามีเกณฑ์มาตรฐานที่แสดงการเปรียบเทียบประสิทธิภาพระหว่าง Streaming Protocols และ HTTP ที่กู้คืนจากการยกเลิกการเชื่อมต่อหรือไม่
Gaurav Ramanan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.