2013年1月31日木曜日

HttpLiveStreamingとかの話(iOS6.1でのバックグラウンド音楽再生について)

iOS6.1になって、safari標準搭載のquickTimeで動画をBGMとして再生しつつ、他のアプリをいじるということができなくなりました。

困るんですが・・・

で、なんとかしてくて、いろいろ調べてみました。

まずBGM再生になる条件について調べてみました。
ためしたこと。
・mp3の場合→ok
・m4aの場合→ok
・mp3準拠のhttpLiveStreamingの場合→ok
・mp4の場合→ng
・h.264 + aac or mp3のhttpLiveStreamingの場合→ng
・aac準拠のhttpLiveStreamingの場合→ok
とこんな感じになりました。

これだけみると、コーデックに動画コーデックがはいっているデータならアウトみたいですね。


で、仕事しながらyoutubeを聴きたかった僕としては、httpLiveStreamingから動画データを取り去って動作するようなプロキシを書いてやろうとおもっていたわけです。
が、youtubeのデータを確認したところ、どうやらmp4でやってるみたいですね。rangeリクエストが飛んでましたし、先頭データにftypがきたので、あーmp4だってわかりました。(バイナリを見てみただけで判定つくところがすばらしいですね。)

で、結局やらなかったmpegtsから動画コーデックを排除する動作ですが、たぶん次のようにすればできると思います。
1:mpegtsのヘッダ情報から、動画データのtrackIDを取得します。
2:PMTから動画のトラックデータを排除する。
3:PCRのtrackIDを確認しておく。たぶん、動画データのtrackIDになってる。
4:3でもし、音声データがPCRになっているなら、動画データの188バイトごとのパケットをすべて削除してしまえば、たぶんOK
5:3でもし、PCRが動画データになっている場合(たぶんたいていのデータでは、PCRは動画データ)、音声パケット(PCRデータのみで実体はなし)をねつ造してやって、はさみこめば出来上がり

となる予定でした。

ただ、非常に残念なことに、youtubeでは動画データがmp4だったので、しばらくmp4から動画データを排除する方法について調べたいと思います。

とりあえず、BGMとして再生できるようにしたい場合は、以前つくったjsegmenterをつかって、m4aやmp3のデータをつくってから、分割してやってHttpLiveStreamingをつくってもらえれば、とりあえずは、BGMとして流しつつ他のアプリをいじれることはわかりました。

0 件のコメント:

コメントを投稿