受信ファイルを H264 にエンコードしてセグメント化する Xuggle ベースのサーバー システムを作成しました。ただし、Quicktime でビデオを再生すると、ほとんど動作しますが (オーディオに小さな問題が発生することがあります)、ある品質のストリームから別の品質のストリームに変更すると、画像が失われます。
そこで、「mediastreamvalidator」を実行したところ、次のエラーが発生しました。
エラー: (-1) 不明なビデオ コーデック: 1836069494 (プログラム 0、トラック 0) エラー: (-1) セグメントを MPEG-2 TS または ES として解析できませんでした
そこで、FFMPEG を使用してコーデックスに関する情報を取得しました。 Xuggler エンコーディングの結果:
Input #0, mpegts, from 'segment_0.ts':
Duration: 00:00:09.40, start: 0.000000, bitrate: 3618 kb/s
Program 1
Metadata:
service_name : Service01
service_provider: FFmpeg
Stream #0.0[0x100]: Video: mpeg2video (Main), yuv420p, 960x540 [PAR 1:1 DAR 16:9], 104857 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc
Stream #0.1[0x101]: Audio: mp2, 48000 Hz, stereo, s16, 128 kb/s
Compressor によって作成されたファイルの結果:
Seems stream 0 codec frame rate differs from container frame rate: 180000.00 (180000/1) -> 25.00 (25/1)
Input #0, mpegts, from 'fileSequence1.ts':
Duration: 00:00:09.97, start: 19.984578, bitrate: 5308 kb/s
Program 1
Stream #0.0[0x101]: Video: h264 (Main), yuv420p, 960x540, 25 tbr, 90k tbn, 180k tbc
Stream #0.1[0x102]: Audio: aac, 22050 Hz, stereo, s16, 32 kb/s
主な違いは、Xuggler でエンコードされたファイルの場合、h264 ではなく Video: mpeg2video と表示されることです。ただし、エンコード中に、Coder を ICodec.ID.CODEC_ID_H264 に具体的に設定しました。
h264を強制的に使用するにはどうすればよいですか。オーディオも同様。AAC を指定して MP2 を取得します。
その後、FFMPEG を直接使用したところ、次の結果が得られました。
Input #0, mpegts, from 'encoded.ts':
Duration: 00:00:24.16, start: 1.400000, bitrate: 360 kb/s
Program 1
Metadata:
service_name : Service01
service_provider: FFmpeg
Stream #0.0[0x100]: Video: h264 (Main), yuv420p, 1920x1080 [PAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
Stream #0.1[0x101](eng): Audio: aac, 48000 Hz, stereo, s16, 57 kb/s
その方が良さそうです。FFMPEG を直接使用することもできますが、Xuggler を使用すると、プロセスの進行状況を簡単に追跡しながらファイルをセグメント化できます。