2012年6月8日金曜日

mpegtsによるiphoneのHttpLiveStreaming成功しました。

最近がんばっていた。mpegtsを切り分けたデータによるHttpLiveStreamingの動作がうまく動作しました。
iPhone4Sでばっちり視聴もできました。

https://github.com/taktod/streaming/commit/58c30b481cdea460f2d66344a78fd0a317833463

いままで実験で再生がコンバートにおいついてプチってきれていたんですが、原因は出力ファイルリストの中にコンバート中のファイルがはいっていたからでした。
サーバーのスペック不足とかでなくてよかったです。

実験やってみたところ、遅れはだいたい10秒程度でした。

いまのところ、生成ファイルのdurationがだいたい5秒ごとくらいになっています。これは変換パラメーターをいじれば2〜3秒くらいにできるかと思うので、生成中ファイルのことも念頭にいれると、遅延はやっぱりできて5秒程度かなと思います。

「変換や伝送経路の問題1秒」+「生成中のファイル3秒」+「DLや開始のずれ2秒」

なので会社でたたき出した遅延5秒は超えられそうにないですね。ちょっと厳しすぎる。

今日は他にも試してみました。

■コンバート用のパケットを自力で作る件。
github側にあがっているxuggleをつかってリアルタイムflvデータコンバート処理をやってみようと思ったのですが・・・

コンバート用のパケットをIContainer経由以外でつくろうとしたところ、いまのところ正しいメディアデータと判定されませんでした。
とりあえず試したのは
1:IBufferの生成からはじめて、IPacket.make(IBuffer)でつくってみる。
2:IPacket.make()でつくってから
streamIndex、data、timeBase、timestamp、pts、position等をいれてみたのですが変換可能なデータと見なされませんでした。

仕方ないので別のアプローチということで次のことも試してみました。
timestampの入れ替えがない状態のflvとしてデータを流す。
結果としては、これも失敗しました。やっぱり、ストリームを取得していると急に数Mbyteくらいの読み込みが要求されて、壊れました。
今回ためした動作では、disposable innerFrameを追記していたので、これをはずしてもどうしようもなかったら、ちょっとお手上げです。

■FTPをつかって、リアルタイムに別のサーバーにあげる件。

jakartaのプロジェクト commons netにはjavaでftpアップロードを実施するクラスが実装されています。
それをつかって、ファイルの生成されてからアップロードではなく、変換されたbyteデータをそのままftp経由でリモートサーバーに書き込んじゃえということをやってみました。

やってみたところ、意味不明なファイルが大量にできました。たぶん、ftpで経由での書き込みに遅延があるのに、mpegtsの書き込みが殺到するから、こわれたのかな・・・

とりあえず今週末は、jpegmp3ストリーム、httpLiveStreaming、rtmpのストリーミングこの3つが連携できるような状況にもっていって、それなりの動作するプログラムを作り上げたいところ。

0 件のコメント:

コメントを投稿