VLCメディアプレーヤーを使用してコマンドラインでビデオファイルをストリーミングする場合、どの種類の「マルチプレクサ」が好きかを伝える必要があります。
_vlc --network-caching=1000 -vvv <file> --sout '#http{mux=ts,dst=:8080}'
_
muxはどういう意味ですか?ビデオデータを多重化/多重化するとどうなりますか?
私がストリーミングしているビデオファイルには、H264(AVC)
ビデオストリームとAAC
オーディオコーデックがあります。 _.mp4
_コンテナ形式で保存されます。
マルチプレクサはそれで何をしていますか?コンテナのフォーマットを変更するだけですか?
ご存知のように、「video」は通常、実際にはオーディオとビデオの両方です。それらは通常一緒にはなりませんが、別々のエンティティとして存在します-あなたの場合はH.264とAACです。
1つのオプションは、実際には、ディスク上に2つの別々のファイルを用意し、それらを独立して再生することです。これは、多くの場合、 Digital Cinema コンテンツの配布方法です。
エンドユーザーにも同じエクスペリエンスが提供されますが、いくつかの問題が発生します。
これらの問題に対処するために、2つ(またはそれ以上)のストリームを1つのストリームに多重化できます...「 コンテナ 」の概念を入力してください。このコンテキストでは、この用語は「Mux」または「 マルチプレクサ 」と同義です。
「マルチプレクサ」はストリームの分割またはマージを処理する論理ブロック(コード)であり、「コンテナ形式」はデータの準備方法であり、ストレージまたは送信用にフォーマットされています。
より基本的な電子機器レベルでは、マルチプレクサは一度に1つの信号を伝送ラインに配置するだけです。
さまざまな機能と利点を持つ さまざまなコンテナのロード があります。コンテナの主な機能は次のとおりです。
ただし、多くの場合、コンテナ内の別のストリームにany任意のバイナリデータを格納することもできます。たとえば、 Matroska は、事実上すべてをサポートできる非常にオープンなフォーマットです。
.mp4
ファイルがあると言うとき、実際にはコンテナ形式を参照していない可能性があります。通常、データを処理する正しいアプリケーションを取得できる限り、そのアプリケーションは何を見て処理しているかを理解します。それに応じてそれ。
これがまだ機能する理由は次のいずれかです。
.mp4
は、ファイルの処理に使用するアプリケーションを識別します。たとえば、VLCはその後、拡張子を無視し、実際には...それがTSファイルであると正しく判断します。.ts
に変更して、何が起こるかを確認してくださいマルチプレクサとはどういう意味ですか?ビデオデータを多重化/多重化するとどうなりますか?
うまくいけば、私はこれを上で大部分カバーしました。
--sout '#http{mux=...}'
パラメーターを指定する必要がある理由は、VLCがストリーミングの準備をする前にファイルをデマルチプレクサするためである可能性があります。一部のコンテナ形式はストリーミングを適切にサポートしていないか、まったくサポートしていません(例: [〜#〜] avi [〜#〜] )ので、これは理にかなっています-これで、より適切なコンテナ。トランスポートストリームは良い候補であり、非常に多くのデバイス(テレビなど)がそれを処理できることはよく理解されています。
完全なパイプラインはおそらく次のようになります。
マルチプレクサはそれで何をしていますか?
マルチプレクサは、対象のストリームをストリーム全体から分離し、それらを独自のデコードおよびレンダリングパイプラインに供給します。
コンテナのフォーマットを変更するだけですか?
--sout '#http{mux=...}'
パラメータを参照している場合は、yes(申し訳ありませんが、私の最初の間違いです)...上記のように、ファイルはフォーマットになります...しかし、そのフォーマットは必ずしもうまくストリーミングされるとは限りません。これにより、ストリーミングを容易にするためにコンテナを変更したり、特定のデバイスの機能セットを変更したりできます。
Flv-muxingまたはts-muxingのいずれかを使用でき、どちらの方法でも問題なくビデオがストリーミングされるのはなぜですか?
これにより、サーバーが元のファイルを読み取るために使用しているコンテナー形式ではなく、サーバーとクライアントの間でコンテナー形式が変更されるためです。
ファイル名をmp4からtsに変更できるのはなぜですか?
magic はファイルのデータinを調べて、それが何であるかを確認するため、Unixシステムでは、ファイル拡張子はユーザーが使用するためのヒントにすぎません。
ファイルの実際のコンテナ形式を確認するにはどうすればよいですか?
file
ユーティリティを使用します-これは magic を使用してファイルを識別(フィンガープリント)し、それが最良の推測であることを示します。たとえば、このファイルは QuickTime コンテナを使用します。
$ file big_buck_bunny_720p_h264.mov
big_buck_bunny_720p_h264.mov: ISO Media, Apple QuickTime movie, Apple QuickTime (.MOV/QT)
howだけでなく、データが含まれていることを知りたい場合(たとえば、ファイルに含まれるストリームや使用されているコーデック)、 [を使用してファイルを検査する必要があります。 〜#〜] vlc [〜#〜] 、 GStreamer 、 FFmpeg 、または別のツール。たとえば、次の3つのストリームがあります。
$ 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に再マルチプレクサすると、そのデバイス以外でメディアをデコードできます。