2011年7月6日水曜日

RTMPClientの使い方その5、録画する。

録画の方法そのものは昔atwikiに書いたことがあって
http://www29.atwiki.jp/red5server/pages/29.html
ここにソースコードがあります(このソースコードもどこかのサイトから拾ってmina2.0に合わせただけのものです)。

そしてこのプログラムは間違っています。
どこが間違っているかというと、videoTS audioTSという変数を準備して、getTimestampで取得した時刻情報からパケットをおさめる時間を計算していますが、getTimestampがそもそもplay開始からの経過時間をもとにしているので、この計算が必要ないという・・・

    if (rtmpEvent instanceof VideoData) {
        videoTs += rtmpEvent.getTimestamp();
        tag.setTimestamp(videoTs);
    } else if (rtmpEvent instanceof AudioData) {
        audioTs += rtmpEvent.getTimestamp();
        tag.setTimestamp(audioTs);
    }

本当は
        tag.setTimestamp(rtmpEvent.getTimestamp());
だけでOK。いやむしろこうやらないとflvファイルがおかしくなります。

そして面白いのが、ここからです。
timestampの値を1/2 や 1/3にしてやると、通常の動画プレーヤーでみたらなんと倍速や3倍速になるという・・・
FMEでおくっているデータでも倍速になったりしてかなり楽しいことに・・・


イベントの処理時間をはやめているだけなんで、はやくなるかはプレーヤーのFLVの解釈のやりかた次第ですけどね。

2012/06/19追記
flvデータのタイムスタンプをいじって再生速度を変更させる件ですが、コーデックもろもろの条件により、ほぼ動作しません。
申し訳ありませんでした。

0 件のコメント:

コメントを投稿