2012.11.09 しょーた
Wowza Media Serverを使ったのでメモですですです。
※完全に解決はできていない...( )
とりあえず、以下の端末で再生させる事を目標に頑張りました。
iOS端末
1. iPhone
2. iPad
3. iPod
Android端末
1. Android 4.0以降
iOS系端末では、HLS(Http Live Streaming)が利用でき、音声ファイルも mp3,AAC(m4a)に対応しているので、ただ audioタグを書くだけ。
<audio controls> <source type="audio/mpeg" src="http://fuga.com:1935/vod/_definst_/mp3:hogehoge.mp3/playlist.m3u8"> </audio>
問題はAndroid...
Android 4.0 以前は、Flash Playerがインストールされているため、HLSを使わず FlashでRTMPでストリーミングが行えました。 が、4.0では Flash Playerがインストールされておらず、2012年8月以降Google Play上での配布も停止しているため、Flashが使えません。
そこで、Android 4.0から正式に対応したとされるHLSを使いストリーミング再生を試みました。
試練 1
Androidは HLSを使ってmp3を再生する事ができない!!!
試練 2
Androidは HLSを使ってAAC(m4a)を再生する事ができない!!!!!!
......
ここで行き詰まりかけたのですが、Wowzaのフォーラムを漁る事で解決方法を発見。
Androidでは mp4(動画)であれば、HLSを使い再生する事が可能との事。そして、audioタグのtype属性には video/mp4 のように動画のマイムタイプも指定できるではありませんか!!
<audio controls> <source type="video/mp4" src="http://fuga.com:1935/vod/_definst_/mp4:test_media/v01_mp3.mp4/playlist.m3u8"> </audio>
↑これ↑で無事、再生できました。
ただ、端末により再生できない場合があるようなので、最悪 RTSP を使い動画プレイヤーでの再生を行う事で対応するしかないかもです...。
また、RTSPを利用する場合も mp3 は対応していないため、AAC(m4a)などの音声ファイルを用意する必要があります。
・iOSは mp3, AAC(m4a), mp4 などでHLSによるストリーミングが可能
・iOS4系では audioタグで動画を再生するとかわいそうな事になる
・Androidは mp4 のみ HLSに対応(..?)
・一部端末では動作しないもよう
・最悪、RTSP を使う(AAC=m4aを利用)
・Audioタグで mp4 を再生できる(type="video/mp4")
ffmpeg で mp3 を mp4 に変換する
用意するもの
・動画の背景にする画像 (blank.jp)
・音声ファイル (mp3 or m4a)
$ ffmpeg -loop 1 -shortest -i blank.jpg -i sample.mp3 -acodec copy -vcodec libx264 sample.mp4
くっそ、Android 4.0 って HTTP Live Streaming 対応したんじゃなかったのかよ。手元のデバイスで再生できたのたまたまかよ。なんでこんなに不具合報告相次ぐんだよ。。
— Yosuke Akamatsuさん (@yoski) 9月 30, 2012