2012年5月26日土曜日

mpegtsについて調査してみます。その1

mpegtsについて調査してみたいと思います。

今回僕のやりたいことは、mpegtsのファイルを分割することではなく、mpegtsのファイルをコーデックで求められたバイトデータから生成することなので、ちょっと難易度高め?な気がします。

とりあえずgoogle先生に尋ねます。
[mpegts specification]でぐぐります。
http://en.wikipedia.org/wiki/MPEG_transport_stream
http://nomanganolife.blogspot.jp/2009/12/mpeg2-ts.html
http://allegro.dtiblog.com/blog-entry-185.html

とりあえず前知識としてこの3つくらいは読んでおきました。
わかったことは、最小単位は188バイトで構成されている。
いろんなヘッダが存在する。といったところ。

データを解析するにあたって、いつもつかっているマリオギャラクシー2のPVに対して次の変換を実行しました。

$ ffmpeg -i orgMario.flv -acodec libmp3lame -ab 64 -ar 44100 -vcodec libx264 -vpre default2 -s 320x240 -f mpegts mario.ts
$ ffmpeg -i orgMario.flv -acodec libmp3lame -ab 64 -ar 44100 -vcodec libx264 -vpre default2 -s 320x240 -f flv mario.flv

オリジナルデータもh264 + aacだったのでそのままvcodec copyとacodec copyでtsファイル化できるかなとおもったのですが、h264 bitstream malformatedというエラーがでてしまったので、今回red5 + xuggleで生成しようとおもっている h.264 + mp3の形式でとりあえず出力するようにしました。
なお、ffpresetのdefault2は前回の記事のxuggleで利用したもののsetProperty値の元ネタとなったものです。
2つつくった理由はflv側は動画データ、音声データの入り方を理解済みなのでデータがどのようにmpegtsに代入されているか理解するのに使える。
かつ同じ変換方法をつかえば出力される動画データ、音声データは一致する。
というのを期待しています。
あと、javaのプログラムをささっと書いて、188バイトずつのデータを取得し、文字列にしたテキストデータも準備しました。メモ書き用みたいなものです。
flvデータ
 tsデータ(幅を調節して、4行が1つのまとまりになるようにしてます。)
 txt形式に直したデータ

ではちまちま解析していくか・・・

0 件のコメント:

コメントを投稿