ตามที่คุณได้ระบุไว้โดยทั่วไป" วิดีโอ " เป็นทั้งเสียงและวิดีโอ พวกเขามักจะไม่มารวมกัน แต่มีอยู่เป็นหน่วยงานที่แยกต่างหาก - ในกรณีของคุณ H.264 และ AAC
ทางเลือกหนึ่งคือการมีสองไฟล์แยกต่างหากบนดิสก์ซึ่งคุณเล่นอย่างอิสระ - นี่คือวิธีที่เนื้อหาในโรงภาพยนตร์ดิจิตอลกระจายออกไป
มันจะสร้างประสบการณ์แบบเดียวกันสำหรับผู้ใช้ แต่จะมีปัญหาหลายประการ:
- มีสองไฟล์ซึ่งจะต้องจัดการเป็น " เอนทิตี้ " หนึ่ง ... สูญเสียอย่างใดอย่างหนึ่งและอื่น ๆ และสื่อไม่สามารถใช้งานได้
- การซิงค์เสียง / วิดีโอสามารถล้มเหลวได้อย่างง่ายดายด้วยการก้าวไปข้างหน้า ... อีกเว้นแต่ว่าคุณจะจัดการด้วยความระมัดระวังและชัดเจน (เช่น: ใช้รหัสเวลา )
เพื่อแก้ไขปัญหาเหล่านี้คุณสามารถทวีคูณสตรีมสอง (หรือมากกว่า) เป็นสตรีมเดียว ... ป้อนแนวคิดของ " คอนเทนเนอร์ " ในบริบทนี้คำนี้มีความหมายเหมือนกันกับ " Mux " หรือ " Multiplexer "
อาจมีคนแย้งว่า " มัลติเพล็กเซอร์ " เป็นลอจิกบล็อก (รหัส) ที่เกี่ยวข้องกับการแยกหรือรวมกระแสในขณะที่ " รูปแบบคอนเทนเนอร์ " เป็นวิธีที่ข้อมูลถูกจัดเตรียมและจัดรูปแบบสำหรับการจัดเก็บหรือส่งข้อมูล
ในระดับอิเล็กทรอนิกส์ขั้นพื้นฐานมัลติเพล็กเซอร์จะใส่สัญญาณเพียงเส้นเดียวในสายส่งในเวลาเดียวกัน
มีภาชนะบรรจุที่แตกต่างกันซึ่งมีคุณสมบัติและประโยชน์ที่แตกต่างกัน คุณสมบัติที่สำคัญของภาชนะรวมถึง:
- หลายกระแส
- สตรีมเสียงหลายรายการ - เช่น: ภาษา, เสียงอธิบาย, ความเห็น, ช่อง (สเตอริโอเทียบกับเซอร์ราวด์) ฯลฯ ...
- วิดีโอสตรีมหนึ่งรายการขึ้นไป - เช่น: มุมมอง
- คำบรรยาย
- ข้อมูลเมตา - เช่น: บท, ฉาก, ศิลปิน / ชื่อแทร็ค, ฯลฯ ...
- การซิงโครไนซ์เสียง / วิดีโอ
- การจัดทำดัชนี - เพื่ออำนวยความสะดวกในการค้นหาหัวข้อที่ซับซ้อนอย่างน่าประหลาดใจ!
อย่างไรก็ตามบ่อยครั้งที่มันเป็นไปได้ที่จะเก็บข้อมูลไบนารีใด ๆ ของอาร์บิเทียร์ในสตรีมอื่นภายในคอนเทนเนอร์ ตัวอย่างเช่นMatroskaเป็นรูปแบบเปิดที่เหลือเชื่อที่สามารถรองรับแทบทุกอย่าง
เมื่อคุณพูดว่าคุณมี.mp4
ไฟล์คุณอาจไม่ได้อ้างถึงรูปแบบของคอนเทนเนอร์ - โดยทั่วไปตราบใดที่คุณสามารถรับแอปพลิเคชันที่ถูกต้องเพื่อจัดการข้อมูลแอปพลิเคชันนั้นจะเข้าใจสิ่งที่กำลังมองหาและดำเนินการตามนั้น
เหตุผลที่ว่าสิ่งนี้ยังใช้งานได้:
- เนื่องจากคุณใช้ระบบยูนิกซ์และมีการระบุประเภทไฟล์โดยใช้ " Magic " - นี่เป็นการระบุว่าแอปพลิเคชันใดที่จะใช้จัดการไม่ใช่ส่วนขยายของไฟล์
- เนื่องจากคุณกำลังใช้ Windows การ
.mp4
ระบุแอปพลิเคชันที่จะใช้ในการจัดการไฟล์ - VLC (ตัวอย่าง) จะละเว้นส่วนขยายในภายหลังและพิจารณาอย่างถูกต้องว่าจริง ๆ แล้ว ... มันเป็นไฟล์ TS
- ลองเปลี่ยนชื่อ
.ts
และดูว่าเกิดอะไรขึ้น
- นี่คือการผสมผสานระหว่าง Windows โดยใช้นามสกุลไฟล์และ VLC โดยใช้เทคนิคMagic -esque เพื่อระบุข้อมูล
mux หมายถึงอะไร จะทำอย่างไรโดยการ muxing / multiplexing ข้อมูลวิดีโอ
หวังว่าฉันจะครอบคลุมเรื่องนี้ข้างต้นเป็นส่วนใหญ่
เหตุผลที่คุณจำเป็นต้องให้--sout '#http{mux=...}'
พารามิเตอร์มีแนวโน้มเพราะ VLC จะ demux ไฟล์ก่อนที่จะเตรียมการสตรีม รูปแบบคอนเทนเนอร์บางรูปแบบไม่สนับสนุนการสตรีมมิ่งที่ดีหรือเลย (เช่น: AVI ) ดังนั้นจึงเหมาะสมแล้วตอนนี้คุณมีตัวเลือกให้ใช้คอนเทนเนอร์ที่เหมาะสมกว่า Transport Stream เป็นตัวเลือกที่ดีและเป็นที่เข้าใจกันดีว่าอุปกรณ์มากมาย (เช่น: ทีวี) จะสามารถจัดการกับมันได้
ไปป์ไลน์แบบเต็มอาจมีลักษณะดังนี้:
มัลติเพล็กเซอร์ทำอะไรกับมัน
มัลติเพล็กเซอร์กำลังแยกสตรีมที่น่าสนใจออกจากสตรีมโดยรวมและป้อนเข้าไปในการถอดรหัสของตัวเองและเรนเดอร์ไปป์ไลน์
เป็นเพียงการเปลี่ยนรูปแบบคอนเทนเนอร์หรือไม่
หากคุณอ้างถึง--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 จะช่วยให้สื่อที่จะถอดรหัสไม่ใช่อุปกรณ์ที่