ตัวเลือก“ mux” ใน VLC media player ทำอะไร?


2

เมื่อฉันใช้เครื่องเล่นสื่อ VLC เพื่อสตรีมไฟล์วิดีโอด้วยบรรทัดคำสั่งฉันต้องบอกว่า "mux" ประเภทใดที่ฉันชอบ:

vlc --network-caching=1000 -vvv <file> --sout '#http{mux=ts,dst=:8080}'

อะไรMUXหมายความว่าอย่างไร จะทำอย่างไรโดยการ muxing / multiplexing ข้อมูลวิดีโอ

ไฟล์วิดีโอที่ฉันกำลังสตรีมมีH264(AVC)วิดีโอและAACตัวแปลงสัญญาณเสียง มันถูกบันทึกใน.mp4รูปแบบคอนเทนเนอร์

มัลติเพล็กเซอร์ทำอะไรกับมัน เป็นเพียงการเปลี่ยนรูปแบบคอนเทนเนอร์หรือไม่

คำตอบ:


3

ตามที่คุณได้ระบุไว้โดยทั่วไป" วิดีโอ " เป็นทั้งเสียงและวิดีโอ พวกเขามักจะไม่มารวมกัน แต่มีอยู่เป็นหน่วยงานที่แยกต่างหาก - ในกรณีของคุณ H.264 และ AAC

ทางเลือกหนึ่งคือการมีสองไฟล์แยกต่างหากบนดิสก์ซึ่งคุณเล่นอย่างอิสระ - นี่คือวิธีที่เนื้อหาในโรงภาพยนตร์ดิจิตอลกระจายออกไป

มันจะสร้างประสบการณ์แบบเดียวกันสำหรับผู้ใช้ แต่จะมีปัญหาหลายประการ:

  • มีสองไฟล์ซึ่งจะต้องจัดการเป็น " เอนทิตี้ " หนึ่ง ... สูญเสียอย่างใดอย่างหนึ่งและอื่น ๆ และสื่อไม่สามารถใช้งานได้
  • การซิงค์เสียง / วิดีโอสามารถล้มเหลวได้อย่างง่ายดายด้วยการก้าวไปข้างหน้า ... อีกเว้นแต่ว่าคุณจะจัดการด้วยความระมัดระวังและชัดเจน (เช่น: ใช้รหัสเวลา )

เพื่อแก้ไขปัญหาเหล่านี้คุณสามารถทวีคูณสตรีมสอง (หรือมากกว่า) เป็นสตรีมเดียว ... ป้อนแนวคิดของ " คอนเทนเนอร์ " ในบริบทนี้คำนี้มีความหมายเหมือนกันกับ " Mux " หรือ " Multiplexer "

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

ในระดับอิเล็กทรอนิกส์ขั้นพื้นฐานมัลติเพล็กเซอร์จะใส่สัญญาณเพียงเส้นเดียวในสายส่งในเวลาเดียวกัน

mux demux กราฟิก

มีภาชนะบรรจุที่แตกต่างกันซึ่งมีคุณสมบัติและประโยชน์ที่แตกต่างกัน คุณสมบัติที่สำคัญของภาชนะรวมถึง:

  • หลายกระแส
    • สตรีมเสียงหลายรายการ - เช่น: ภาษา, เสียงอธิบาย, ความเห็น, ช่อง (สเตอริโอเทียบกับเซอร์ราวด์) ฯลฯ ...
    • วิดีโอสตรีมหนึ่งรายการขึ้นไป - เช่น: มุมมอง
    • คำบรรยาย
    • ข้อมูลเมตา - เช่น: บท, ฉาก, ศิลปิน / ชื่อแทร็ค, ฯลฯ ...
  • การซิงโครไนซ์เสียง / วิดีโอ
  • การจัดทำดัชนี - เพื่ออำนวยความสะดวกในการค้นหาหัวข้อที่ซับซ้อนอย่างน่าประหลาดใจ!

อย่างไรก็ตามบ่อยครั้งที่มันเป็นไปได้ที่จะเก็บข้อมูลไบนารีใด ๆ ของอาร์บิเทียร์ในสตรีมอื่นภายในคอนเทนเนอร์ ตัวอย่างเช่นMatroskaเป็นรูปแบบเปิดที่เหลือเชื่อที่สามารถรองรับแทบทุกอย่าง


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

เหตุผลที่ว่าสิ่งนี้ยังใช้งานได้:

  • เนื่องจากคุณใช้ระบบยูนิกซ์และมีการระบุประเภทไฟล์โดยใช้ " Magic " - นี่เป็นการระบุว่าแอปพลิเคชันใดที่จะใช้จัดการไม่ใช่ส่วนขยายของไฟล์
  • เนื่องจากคุณกำลังใช้ Windows การ.mp4ระบุแอปพลิเคชันที่จะใช้ในการจัดการไฟล์ - VLC (ตัวอย่าง) จะละเว้นส่วนขยายในภายหลังและพิจารณาอย่างถูกต้องว่าจริง ๆ แล้ว ... มันเป็นไฟล์ TS
    • ลองเปลี่ยนชื่อ.tsและดูว่าเกิดอะไรขึ้น
    • นี่คือการผสมผสานระหว่าง Windows โดยใช้นามสกุลไฟล์และ VLC โดยใช้เทคนิคMagic -esque เพื่อระบุข้อมูล

mux หมายถึงอะไร จะทำอย่างไรโดยการ muxing / multiplexing ข้อมูลวิดีโอ

หวังว่าฉันจะครอบคลุมเรื่องนี้ข้างต้นเป็นส่วนใหญ่

เหตุผลที่คุณจำเป็นต้องให้--sout '#http{mux=...}'พารามิเตอร์มีแนวโน้มเพราะ VLC จะ demux ไฟล์ก่อนที่จะเตรียมการสตรีม รูปแบบคอนเทนเนอร์บางรูปแบบไม่สนับสนุนการสตรีมมิ่งที่ดีหรือเลย (เช่น: AVI ) ดังนั้นจึงเหมาะสมแล้วตอนนี้คุณมีตัวเลือกให้ใช้คอนเทนเนอร์ที่เหมาะสมกว่า Transport Stream เป็นตัวเลือกที่ดีและเป็นที่เข้าใจกันดีว่าอุปกรณ์มากมาย (เช่น: ทีวี) จะสามารถจัดการกับมันได้

ไปป์ไลน์แบบเต็มอาจมีลักษณะดังนี้:

vlc ไปยัง vlc ไปป์ไลน์

มัลติเพล็กเซอร์ทำอะไรกับมัน

มัลติเพล็กเซอร์กำลังแยกสตรีมที่น่าสนใจออกจากสตรีมโดยรวมและป้อนเข้าไปในการถอดรหัสของตัวเองและเรนเดอร์ไปป์ไลน์

เป็นเพียงการเปลี่ยนรูปแบบคอนเทนเนอร์หรือไม่

หากคุณอ้างถึง--sout '#http{mux=...}'พารามิเตอร์ของคุณแล้วใช่ (ขออภัยสำหรับความผิดพลาดเดิมของฉัน) ... ตามที่กล่าวไว้ข้างต้นไฟล์จะอยู่ในรูปแบบ ... แต่รูปแบบนั้นไม่จำเป็นต้องสตรีม สิ่งนี้จะอนุญาตให้คุณเปลี่ยนคอนเทนเนอร์เพื่ออำนวยความสะดวกในการสตรีมหรือชุดคุณสมบัติของอุปกรณ์เฉพาะ

เหตุใดฉันสามารถใช้ flv-muxing หรือ ts-muxing และวิดีโอของฉันถูกสตรีมได้โดยไม่มีปัญหาทั้งสองทาง

เนื่องจากสิ่งนี้เปลี่ยนรูปแบบคอนเทนเนอร์ระหว่างเซิร์ฟเวอร์และไคลเอนต์ไม่ใช่รูปแบบคอนเทนเนอร์ที่เซิร์ฟเวอร์ใช้เพื่ออ่านไฟล์ต้นฉบับ

เหตุใดฉันจึงสามารถเปลี่ยนชื่อไฟล์จาก mp4 เป็น ts ได้

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

ฉันจะตรวจสอบรูปแบบคอนเทนเนอร์จริงของไฟล์ได้อย่างไร

ใช้fileยูทิลิตีนี้ใช้เวทย์ในการระบุ (ลายนิ้วมือ) ไฟล์และบอกให้คุณเดาได้ดีที่สุด ตัวอย่างเช่นไฟล์นี้ใช้คอนเทนเนอร์QuickTime :

$ file big_buck_bunny_720p_h264.mov
big_buck_bunny_720p_h264.mov: ISO Media, Apple QuickTime movie, Apple QuickTime (.MOV/QT)

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

  • วิดีโอ - h.264, 1280x720
  • ข้อมูล Timecode
  • เสียง - AAC, 48 kHz, 5.1 รอบทิศทาง
$ ffprobe big_buck_bunny_720p_h264.mov
ffprobe version 2.8.14-0ubuntu0.16.04.1 Copyright (c) 2007-2018 the FFmpeg developers
---8<--- snip --->8---
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'big_buck_bunny_720p_h264.mov':
  Metadata:
    major_brand     : qt
    minor_version   : 537199360
    compatible_brands: qt
    creation_time   : 2008-05-27 18:36:22
    timecode        : 00:00:00:00
  Duration: 00:09:56.46, start: 0.000000, bitrate: 5589 kb/s
    Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720, 5146 kb/s, 2                                                                                                           4 fps, 24 tbr, 2400 tbn, 4800 tbc (default)
    Metadata:
      creation_time   : 2008-05-27 18:36:22
      handler_name    : Apple Alias Data Handler
      encoder         : H.264
    Stream #0:1(eng): Data: none (tmcd / 0x64636D74) (default)
    Metadata:
      creation_time   : 2008-05-27 18:36:22
      handler_name    : Apple Alias Data Handler
      timecode        : 00:00:00:00
    Stream #0:2(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, 5.1, fltp, 437 kb/s (default)
    Metadata:
      creation_time   : 2008-05-27 18:36:22
      handler_name    : Apple Alias Data Handler

เหตุใดจึงต้องทำการทวีคูณไฟล์เพื่อทำการสตรีมผ่าน VLC

ฉันคิดว่าฉันได้กล่าวถึงเรื่องนี้ไปแล้ว แต่เพื่อให้ชัดเจน ... นี่เป็นการอนุญาตให้มีความยืดหยุ่น การดำเนินการ demux / mux นั้นค่อนข้างเบา (เมื่อเทียบกับการถอดรหัสแบบเต็ม) ดังนั้นการทำเช่นนี้เป็นเรื่องที่แน่นอนไม่ใช่ปัญหา

หากคุณพยายามที่จะให้บริการไฟล์ AVI โดยไม่ต้องทำการ remux มันคุณจะมีปัญหาสำคัญที่พยายามจะถอดรหัสมันที่เครื่องไคลเอนต์

อย่างเท่าเทียมกันหากคุณกำหนดเป้าหมายอุปกรณ์ซึ่งเป็นเพียงสามารถที่จะ demux กระแสการขนส่งแล้ว remuxing จาก MP4 เพื่อ TS จะช่วยให้สื่อที่จะถอดรหัสไม่ใช่อุปกรณ์ที่


ขอบคุณมากสำหรับคำตอบที่ละเอียดมาก! ฉันซาบซึ้งจริงๆเพราะทุกคนไม่ได้ใช้ความพยายามอย่างมากในการตอบคำถาม!
jjulianf

ฉันใช้ลีนุกซ์ สิ่งที่ฉันสงสัยเกี่ยวกับ: ฉันยังสามารถใช้flvสำหรับ muxing และ VLC-stream ของฉันยังคงใช้งานได้ดี นอกจากนี้การเปลี่ยนชื่อไฟล์ให้ใช้.tsงานได้และฉันยังสามารถเล่นวิดีโอได้! ดังนั้นคำถามที่เหลือ: 1. ) เหตุใดฉันจึงสามารถใช้ flv-muxing หรือ ts-muxing และวิดีโอของฉันถูกสตรีมโดยไม่มีปัญหาทั้งสองทาง? 2. ) ทำไมฉันสามารถเปลี่ยนชื่อไฟล์จากmp4เป็นts? ฉันจะตรวจสอบรูปแบบคอนเทนเนอร์จริงของไฟล์ได้อย่างไร
jjulianf

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

1
ฉันได้ทำการอัปเดตเพื่อตอบคำถามพิเศษของคุณและฉันได้แก้ไขข้อผิดพลาดเกี่ยวกับ mux - ฉันคิดว่าคุณกำลังระบุอินพุต mux แต่คุณกำลังส่งออก ...
Attie
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.