VLC 媒体播放器中的“mux”选项有什么作用?

VLC 媒体播放器中的“mux”选项有什么作用?

当我使用 VLC 媒体播放器通过命令行传输视频文件时,我必须告诉我,我喜欢哪种“mux”:

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

什么是多路复用器是什么意思?通过多路复用/复用视频数据可以做什么?

我正在流式传输的视频文件有H264(AVC)视频流和AAC音频编解码器。它以容器格式保存.mp4

多路复用器会用它做什么?它只是改变容器格式吗?

答案1

正如您所指出的,“视频“通常实际上既是音频又是视频。它们通常不会一起出现,而是作为单独的实体存在 - 在您的情况下是 H.266 和 AAC。

一个选择确实是在磁盘上有两个单独的文件,你可以独立播放它们 - 这通常是数字影院内容已分发。

它将为最终用户带来相同的体验,但会出现一些问题:

  • 有两个文件,必须作为一个文件处理”实体“... 丢失其中一个,媒体就无法使用
  • 音频/视频同步很容易失败,一个领先于另一个……除非你小心而明确地处理这个问题(例如:使用时间码

为了解决这些问题,你可以将两个(或更多)流复用为一个流......输入“容器“。在这种情况下,该术语在某种程度上与“多路复用器“ 或者 ”复用器“。

有人可能会说,“复用器“是处理拆分或合并流的逻辑块(代码),而“容器格式“是为了存储或传输而准备和格式化数据的方式。

在更基本的电子层面上,多路复用器每次只会将一个信号发送到传输线上。

多路复用器 多路分解器 图形

有一个装载不同的容器它们具有不同的特点和优点。容器的主要特点包括:

  • 多流
    • 多种音频流-例如:语言、音频描述、评论、频道(立体声与环绕声)等......
    • 一个或多个视频流 - 例如:观点
    • 字幕
    • 元数据-例如:章节、场景、艺术家/曲目名称等...
  • 音频/视频同步
  • 索引——为了方便查找,这是一个令人惊讶的复杂话题!

但通常情况下,也可以存储任何容器中另一个流中的任意二进制数据。例如马特罗斯卡是一种非常开放的格式,几乎可以支持任何事物。


当您说您有一个.mp4文件时,您可能实际上并不是指容器格式 - 通常,只要您可以让正确的应用程序来处理数据,该应用程序就会理解它正在查看的内容并进行相应的处理。

该方法仍然有效的原因是:

  • 因为你使用的是 unix 系统,并且文件类型使用“魔法“——这表示使用哪个应用程序来处理它,而不是文件的扩展名。
  • 因为您使用的是 Windows,所以.mp4识别使用哪个应用程序来处理文件 - VLC(例如)随后忽略扩展名,并正确确定实际上......它是一个 TS 文件。
    • 尝试重命名它.ts并看看会发生什么
    • 这是 Windows 使用的文件扩展名和 VLC 使用更魔法-esque 技术来识别数据。

mux 是什么意思?mux/多路复用视频数据有什么作用?

希望我上面已经基本讲完了这一点。

您需要提供该参数的原因--sout '#http{mux=...}'可能是因为 VLC 会在准备流式传输之前对文件进行解复用。某些容器格式不支持流式传输,或者根本不支持流式传输(例如:AVI),所以这是有道理的——你现在可以选择使用更合适的容器。传输流是一个很好的候选者,它被广泛理解,所以很多设备(例如电视)都能够处理它。

完整的流程可能看起来像这样:

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)

如果你想了解更多如何数据包含在内 - 例如:文件中包含哪些流,或者使用了哪些编解码器 - 那么您需要使用以下方法检查文件甚高频液晶流处理器FFmpeg或其他工具。例如,它有三个流:

  • 视频 - H.264,1280x720
  • 时间码信息
  • 音频 - 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 文件,那么您在客户端解码时会遇到严重问题(很可能根本无法工作)。

同样,如果你的目标设备是仅有的能够对传输流进行解复用,然后从 MP4 重新复用到 TS 将允许媒体在该设备上解码。

相关内容