最近がんばっていた。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 件のコメント:
コメントを投稿