วิธีที่เราเร่งความเร็วการเข้ารหัสวิดีโอถึงแปดเท่า

วิธีที่เราเร่งความเร็วการเข้ารหัสวิดีโอถึงแปดเท่า

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

ฉันชื่อ Askar Kamalov เมื่อปีที่แล้วฉันเข้าร่วมทีมเทคโนโลยีวิดีโอ Yandex วันนี้ฉันจะเล่าสั้น ๆ ให้กับผู้อ่าน Habr เกี่ยวกับวิธีการที่กระบวนการเข้ารหัสแบบขนานทำให้เราสามารถเร่งการส่งวิดีโอไปยังผู้ใช้ได้อย่างมาก

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

คำไม่กี่คำเกี่ยวกับงานนั้นเอง ยานเดกซ์ไม่เพียงช่วยให้คุณค้นหาวิดีโอบนเว็บไซต์อื่น แต่ยังจัดเก็บวิดีโอสำหรับบริการของตัวเองด้วย ไม่ว่าจะเป็นรายการต้นฉบับหรือการแข่งขันกีฬาที่ออกอากาศ ภาพยนตร์บน KinoPoisk หรือวิดีโอบน Zen และ News ทั้งหมดนี้จะถูกอัปโหลดไปยังเซิร์ฟเวอร์ของเรา เพื่อให้ผู้ใช้สามารถรับชมวิดีโอได้ จะต้องเตรียม: แปลงเป็นรูปแบบที่ต้องการ สร้างตัวอย่าง หรือแม้แต่ดำเนินการผ่านเทคโนโลยี DeepHD. ไฟล์ที่ไม่ได้เตรียมไว้ใช้พื้นที่เพียงอย่างเดียว ยิ่งไปกว่านั้น เรากำลังพูดถึงไม่เพียงแต่เกี่ยวกับการใช้ฮาร์ดแวร์ให้เกิดประโยชน์สูงสุดเท่านั้น แต่ยังเกี่ยวกับความเร็วในการจัดส่งเนื้อหาไปยังผู้ใช้ด้วย ตัวอย่าง: สามารถค้นหาการบันทึกช่วงเวลาชี้ขาดของการแข่งขันฮ็อกกี้ได้ภายในหนึ่งนาทีหลังจากเหตุการณ์นั้นเอง

การเข้ารหัสตามลำดับ

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

วิธีที่เราเร่งความเร็วการเข้ารหัสวิดีโอถึงแปดเท่า

ไคลเอนต์อัปโหลดวิดีโอไปยังที่เก็บข้อมูล ส่วนประกอบตัววิเคราะห์จะรวบรวมข้อมูลเมตาและถ่ายโอนวิดีโอไปยังส่วนประกอบผู้ปฏิบัติงานเพื่อทำการแปลง ทุกขั้นตอนจะดำเนินการตามลำดับ ในกรณีนี้ อาจมีเซิร์ฟเวอร์เข้ารหัสได้หลายเซิร์ฟเวอร์ แต่มีเพียงเซิร์ฟเวอร์เดียวเท่านั้นที่ไม่ว่างในการประมวลผลวิดีโอใดวิดีโอหนึ่ง แผนภาพที่เรียบง่ายและโปร่งใส นี่คือจุดที่ข้อดีของมันสิ้นสุดลง รูปแบบนี้สามารถปรับขนาดได้ในแนวตั้งเท่านั้น (เนื่องจากการซื้อเซิร์ฟเวอร์ที่มีประสิทธิภาพมากกว่า)

การเข้ารหัสตามลำดับพร้อมผลลัพธ์ระดับกลาง

เพื่อให้การรอคอยอันเจ็บปวดราบรื่นขึ้น อุตสาหกรรมจึงมีตัวเลือกการเขียนโค้ดที่รวดเร็วขึ้นมา ชื่อนี้ทำให้เข้าใจผิด เพราะอันที่จริง การเขียนโค้ดแบบเต็มเกิดขึ้นตามลำดับและใช้เวลานานพอๆ กัน แต่ด้วยผลลัพธ์ระดับกลาง แนวคิดก็คือ: เตรียมและเผยแพร่วิดีโอเวอร์ชันความละเอียดต่ำโดยเร็วที่สุด และเผยแพร่เฉพาะเวอร์ชันที่มีความละเอียดสูงกว่าเท่านั้น

ในด้านหนึ่ง วิดีโอจะพร้อมใช้งานเร็วขึ้น และเป็นประโยชน์กับงานสำคัญต่างๆ แต่ในทางกลับกัน ภาพจะออกมาพร่ามัว และทำให้ผู้ชมเกิดความรำคาญ

ปรากฎว่าคุณไม่เพียงแต่ต้องประมวลผลวิดีโออย่างรวดเร็ว แต่ยังต้องรักษาคุณภาพของวิดีโอด้วย นี่คือสิ่งที่ผู้ใช้คาดหวังจากบริการวิดีโอในขณะนี้ อาจดูเหมือนว่าเพียงพอแล้วที่จะซื้อเซิร์ฟเวอร์ที่มีประสิทธิภาพสูงสุด (และอัปเกรดเซิร์ฟเวอร์ทั้งหมดในคราวเดียวเป็นประจำ) แต่นี่เป็นทางตัน เนื่องจากมีวิดีโออยู่เสมอที่จะทำให้แม้แต่ฮาร์ดแวร์ที่ทรงพลังที่สุดทำงานช้าลง

การเข้ารหัสแบบขนาน

การแบ่งปัญหาที่ซับซ้อนออกเป็นปัญหาที่ซับซ้อนน้อยกว่าและแก้ไขพร้อมกันบนเซิร์ฟเวอร์ต่างๆ จะมีประสิทธิภาพมากกว่ามาก นี่คือ MapReduce สำหรับวิดีโอ ในกรณีนี้ เราไม่ได้ถูกจำกัดด้วยประสิทธิภาพของเซิร์ฟเวอร์เดียวและสามารถปรับขนาดในแนวนอนได้ (โดยการเพิ่มเครื่องใหม่)

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

ดังนั้น ในสถาปัตยกรรมใหม่ เราได้แบ่งบล็อกคนงานเสาหินด้วยการเข้ารหัสตามลำดับออกเป็นไมโครเซอร์วิส Segmenter, Tcoder, Combiner

วิธีที่เราเร่งความเร็วการเข้ารหัสวิดีโอถึงแปดเท่า

  1. Segmenter แบ่งวิดีโอออกเป็นส่วนๆ ประมาณ 10 วินาที ชิ้นส่วนประกอบด้วย GOP หนึ่งรายการขึ้นไป (กลุ่มรูปภาพ). GOP แต่ละรายการมีความเป็นอิสระและมีการเข้ารหัสแยกกัน เพื่อให้สามารถถอดรหัสได้โดยไม่ต้องอ้างอิงถึงเฟรมจาก GOP อื่นๆ นั่นคือสามารถเล่นชิ้นส่วนแยกจากกันได้ การแบ่งส่วนนี้ช่วยลดเวลาแฝง ช่วยให้การประมวลผลเริ่มต้นเร็วขึ้น
  2. Tcoder ประมวลผลแต่ละส่วน รับงานจากคิว ดาวน์โหลดแฟรกเมนต์จากที่เก็บข้อมูล เข้ารหัสเป็นความละเอียดที่แตกต่างกัน (โปรดจำไว้ว่าผู้เล่นสามารถเลือกเวอร์ชันตามความเร็วการเชื่อมต่อ) จากนั้นนำผลลัพธ์กลับเข้าไปในที่เก็บข้อมูล และทำเครื่องหมายแฟรกเมนต์ว่าประมวลผลแล้ว ในฐานข้อมูล หลังจากประมวลผลแฟรกเมนต์ทั้งหมดแล้ว Tcoder จะส่งงานเพื่อสร้างผลลัพธ์สำหรับส่วนประกอบถัดไป
  3. Combiner รวบรวมผลลัพธ์ร่วมกัน: ดาวน์โหลดส่วนย่อยทั้งหมดที่สร้างโดย Tcoder สร้างสตรีมสำหรับความละเอียดที่แตกต่างกัน

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

ผลการวิจัย

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

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

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

เขียนความคิดเห็นว่างานใดในสาขาการทำงานกับวิดีโอที่คุณต้องการอ่าน

ลิงก์ที่เป็นประโยชน์เกี่ยวกับประสบการณ์ของเพื่อนร่วมงานในอุตสาหกรรม

ที่มา: will.com

เพิ่มความคิดเห็น