
私は(かなり大きな)ファイルのセットを持っていますが、H264でMPEG-4 TS 形式コンテナ。時間的制約があるため、このコンテンツをトランスコードせずにスムーズ ストリーミングに再パッケージ化する必要があります (トランスコードには時間がかかりすぎるため)。
ffmpeg でこれを行う方法を見つけようとしています。ffmpeg には、このタスクに適した 2 つの異なる muxer があるようです。「smoothstreaming」muxer と「ismv」muxer の両方を試しましたが、どちらも問題が発生しています。
ffmpeg -i input.mpg -codec copy -f smoothstreaming ss_out
これにより、次のエラーが発生します。
ffmpeg バージョン N-79695-g675cfb2 Copyright (c) 2000-2016 FFmpeg 開発者 gcc 5.3.1 (Debian 5.3.1-14) 20160409 でビルド 構成: libavutil 55. 23.100 / 55. 23.100 libavcodec 57. 38.100 / 57. 38.100 libavフォーマット 57. 35.100 / 57. 35.100 libavデバイス 57. 0.101 / 57. 0.101 libavfilter 6. 44.100 / 6. 44.100 libswscale 4. 1.100 / 4. 1.100 libswresample 2. 0.101 / 2. 0.101 'input.mpg' からの入力 #0、mpegts: 再生時間: 01:28:41.98、開始: 2.040000、ビットレート: 2500 kb/s プログラム1 ストリーム #0:0[0x1e1]: ビデオ: h264 (メイン) ([27][0][0][0] / 0x001B)、yuv420p、720x576 [SAR 16:11 DAR 20:11]、25 fps、25 tbr、90k tbn ストリーム #0:1[0x1e2](eng): オーディオ: mp2 ([4][0][0][0] / 0x0004)、48000 Hz、ステレオ、s16p、192 kb/s [smoothstreaming @ 0x2616340] AVStream.codec を使用してコーデック パラメーターを muxer に渡すことは非推奨です。代わりに AVStream.codecpar を使用してください。 最後のメッセージが 1 回繰り返されました [smoothstreaming @ 0x2616340] ストリーム 0 にビット レートが設定されていません 出力 #0、スムーズストリーミングを 'ss_out' に出力します。 メタデータ: エンコーダ: Lavf57.35.100 ストリーム #0:0: ビデオ: h264 ([33][0][0][0] / 0x0021)、yuv420p、720x576 [SAR 16:11 DAR 20:11]、q=2-31、25 fps、25 tbr、50 tbn ストリーム #0:1(eng): オーディオ: mp2 (i[0][0][0] / 0x0069)、48000 Hz、ステレオ、192 kb/s ストリーム マッピング: ストリーム #0:0 -> #0:0 (コピー) ストリーム #0:1 -> #0:1 (コピー) 出力ファイル #0 のヘッダーを書き込めませんでした (コーデック パラメータが正しくありません ?): 引数が無効です
私が試したもう一つのことは、ffmpeg を使用して ismv にパッケージ化することです。
ffmpeg -i input.mpg -c copy -movflags isml+frag_keyframe -f ismv ss_out.ismv
ここまでは問題なく動作しますが、マニフェスト ファイルを作成するには ismindex ツールが必要ですが、これは失敗します。
ismindex -n ss_out ss_out.ismv
Unable to read the MFRA atom in ss_out.ismv (mfra size mismatch)
何か間違っているのでしょうか、それとも入力ファイルに問題があるのでしょうか?
答え1
したがって、私の質問で考えていた 2 つの解決策はどちらも機能しますが、最終結果は異なります。
ISMV マルチプレクサー + ismindex
必要だったのは、サーバー側のファイル (.ism、.ismc、.ismv) のセットでした。これを実現するために、次の 2 つのことを行いました。
ffmpeg -i input.mpg -c:v copy -c:a aac -b:a 192k -movflags frag_keyframe -f ismv ss_out.ismv
上記のコマンドは、ビデオ ストリームをトランスコードせずにコピーし、オーディオを AAC にトランスコードし (ただし、ffmpeg と ismindex はどちらも MP2 オーディオを扱わないようです)、それを .ismv にパッケージ化します。
ismindex -n ss_out ss_out.ismv
その後、ismindex ツールは必要な .ism ファイルと .ismc ファイルを作成します。
ここから取得したファイルは、Media Services を使用した IIS 経由でストリーミング可能でした。
スムーズストリーミングマルチプレクサー
最終的には 'smoothstreaming' マルチプレクサーも動作するようになりましたが、問題は、入力として .ismv ファイルも必要だったことです。そこで、まず上記と同じ ffmpeg コマンドを実行し、その後、再度 ffmpeg を使用して 'smoothstreaming' マルチプレクサーで再パッケージ化しました。
しかし、このソリューションで私が抱えていた問題は、従来の Web サーバーがスムーズなストリーミングを行うために必要なファイルが生成されることだった。そのため、ビデオ フラグメントが分割され、チャンクごとにメタデータが作成される。これらはすべて、通常ストリーミング サーバーによって処理される。