androidでピアキャス配信するアプリ
※テスト中。バグや高負荷処理によるOSフリーズに注意してください※
peercast for androidと組み合わせてandroid単体で配信することを目指しています。が3Gのようなポート開放できない環境ではPCと連帯しなければ難しい模様。
ダウンロード
android 2.2 以上 ファイルサイズ:8MB /インストール後サイズ:27.5MB
[通常版] AndroidPecaBroadcaster.apk
[SDカード権限なし版] AndroidPecaBroadcaster_nosd.apk
配信方法
WiFiの場合
エンコード>配信開始の流れ。アプリがバックグラウンドになってもエンコードは継続されるのでエンコードを開始してからブラウザでPeercastの配信ページを開いて配信することもできます。
3Gの場合
VPNを利用する場合はポート転送が適切に設定されていればWiFiと同じように配信できます。しかし通常の状態ではポートを開放することができないのですこし面倒です。
まずpeercastが動いている配信用PCを用意します。それだけではまだ不十分で、ポートが開いていないためにpeercastからandroidのエンコーダ(ストリーミングサーバ)に接続することができません。ピアキャストが接続できるストリーミングサーバも同時に用意する必要があります。
そこでアプリに内蔵していたサーバ機能を分離してjavaアプリにしました。これはandroidからデータを受信して再送信する鏡みたいなものです。今のところguiはありません。コマンドプロンプトを起動して次のコマンドを入力します
java -jar FFWmeServer.jar
配信用PCのポート47711を開け、アプリの設定画面でPCと連帯するチェックボックスをオンにします
これでpush配信のような状態になり、android側のポートが開いていなくても配信できるようになります。
イメージとしてはこんな感じ
余談:例えばandroid-PC間をUDPにしたりすると面白いかも?そういえばUDP版peercastの話は・・・
Push配信をテストさせていただきました。
使用機種はSO-01EでOSVerは、4.1.2です。
まさかAndroidで配信できるようになるとは思ってもいませんでした。
スレッドの設定(掲示板URL)と
配信開始のチャンネル名・詳細などの、
前回の配信記録を残して頂けると、
毎回設定をしなくていいので助かります。
ツイキャスライブのようにレスの読み上げができると便利かなと思いました。
https://www.facebook.com/jp.twitcasting/posts/492943667392698
今後の参考になれば幸いです。
動作報告ありがとうございます。
pushは特に配信できなそうな要素がたくさんあって、本当に別の環境でもできるのか心配だったのでこれで一安心です。
読み上げの方は導入側の敷居が高いと思って今まで躊躇してましたが意外とそうでもなさそうなので対応しました。配信設定も保存されるようになりました。
これからもよろしくおねがいします。
AndroidPecaBroadcaster7.apkの
Push配信をSO-01Eを用いてテストさせて頂きました。
コメントの読み上げ機能と、
前回の配信設定保存機能は問題なく動きました。
ご対応ありがとうございました。
気付いたことですが、
端末上で強制終了などの予期せぬ通信切断があると、
Push先のサーバー上のPeerCastでは配信し続けていて、
サーバー上でチャンネル削除の操作が必要でした。
アプリにチャンネル削除機能があると助かります。
端末の縦横切替機能が働くと、通知バーからアプリが消えて、
配信してないようにみえますが、配信している状態が続いていました。
放置していると端末がスリープになってしまい、
配信しているかわかりませんでした。
とりあえず端末の設定でスリープを30分後にしました。
アプリ起動中はスリープ機能を無効にする設定が、
あると助かります。
カメラフォーカスの調整ができないので、
マニュアルフォーカスとオートフォーカスの
切り替え機能があると助かります。
FPSが画面に表示されていますが、
その隣に現在の視聴者数を表示したら、
配信されているかの確認が
画面上でできると思いました。
配信して数十分したら、
Push先のサーバのJava.exeがCPU100%になっていました。
再度配信して数十分放置してみましたが、
その状況が再現できませんでしたので、Javaが原因ではないかもしれません。
Push配信を開始してもサーバー上で
チャンネル作成できてないことがありました。
アプリ上でチャンネル作成ができているかの
確認の方法があると助かります。
1時間ほどWiFi経由でサーバー上に
Push配信をして気付いたことです。
今後の参考になれば幸いです。
詳細レポート非常にありがたい。
通知バー関連は配信アプリ表示中ですか?エンコード中は回転ロックとスリープ無効してるつもりなので、できてないならバグです。(バックグラウンド動作中なら可能)
しかも通知されていないのに配信されるというのはウィルス並の危険バグなので一旦公開を停止しておきました。報告ありがとうございました。
サーバのCPU消費が100%になる問題は他でも発生しているようで、確実ではありませんがループの起こりそうなところを少し対策してアップデートしておきしました。
その他ピアキャス関係については検討中。カメラフォーカスはそのうち実装する予定です。
通知バーから消えるのが下記の通り、
再現が出来ましたので報告します。
配信中に音だけ配信でいいやと思い、
SO-01Eを充電器ホルダーにセットして、
スリープボタンを押し画面表示を消して、
再度スリープを解除したところ、
下記のようにアプリが横画面になっており、
http://p.twipple.jp/gfaIy
通知バーを確認したら下記のようになっていました。
http://p.twipple.jp/rr8LF
配信は続いていました。
以上です。
別件ですが配信中にマイク入力のオンオフの切り替えが
機能としてあるといいかなと思いました。
わざわざ検証してもらってすいません。
アプリの終了処理に問題があり、通知とロックが解除されていました。
先ほどアップデートしたバージョンで改善されていると思います。
マイクについてはいつか入れたいと思っていたので次回以降対応する予定です。
AndroidPecaBroadcaster8.apkの
Push配信をSO-01E(OSVer4.1.2)を
用いてテストさせて頂きました。
アプリを起動し、エンコードをタッチし、
ビットレートを選択しEncodeを選択すると、
DirectURLが出る前に
アプリが強制終了されてホーム画面に戻ります。
アプリを一度削除して新しくインストールしても、
SDカード権限なし版でも同じ挙動でした。
いつもテストしてもらってありがとうございます。
細かく修正してるのでそのバージョンか忘れてしまいましたが、エンコード開始時にすごく落ちやすいバージョンがありました。エラーを出さずに落ちるので原因を特定できない状態です。(微妙にタイミングをずらしたりで改善する場合も)今度アップデートしたものも若干改善してるかもしれませんが確実ではありませんのでご了承ください。
機能については画面をシングルタップでオートフォーカス、ダブルタップでミュートが実装されました。
Javaのサーバがcpu100%になる問題は改善されましたか?
AndroidPecaBroadcaster9.apkの
Push配信機能をSO-01E(OSVer4.1.2)にて
テストさせて頂きました。
エンコードが正常に実行できました。
6回ほど実行しましたが、5回成功し1回だけホーム画面に戻りました。
オートフォーカス、ミュート両方とも正常に機能しました。
Javaのサーバがcpu100%は、
FFWmvServer.jar(最終更新: 7月31日)に
差し替えた後は、100%になりませんでした。
AndroidPecaBroadcaster9.apkの
Push配信機能をSO-01E(OSVer4.1.2)にて
テストさせて頂きました。
エンコーダーを開始してもサーバー側で受信してないようで、
配信開始をしても視聴できませんでした。
サーバ側のログは以下のとおりです。
//FFWmvServerログ開始
//エンコード開始
post from:/グローバルIP
655 30 26 b2 75 8e 66 cf 11 a6 d9 00 aa 00 62 ce 6c
new streaming header
//配信開始
get from:/127.0.0.1
get from:/127.0.0.1
//ここでアプリのエンコード停止を選択
3200 82 00 00 00 5d bc 02 00 00 00 00 01 05 6b 01 00
3200 82 00 00 00 5d 34 08 00 00 00 00 01 13 53 02 00
3200 82 00 00 01 5d 18 15 00 00 64 00 82 01 34 2d 04
3200 82 00 00 01 5d 0c 49 00 00 4c 04 8c 81 b2 cb 00
3200 82 00 00 01 5d 8c 55 00 00 4c 04 8c 01 d2 4e 00
3200 82 00 00 11 5d db 0a bc 66 00 00 64 00 82 01 fe
242 90 08 00 33 b1 e5 cf 11 89 f4 00 a0 c9 03 49 cb
12 24 45 08 00 00 00 00 00 00 00 08 00
0
get from:/127.0.0.1
//ログ終了
端末を再起動してエンコードを開始し、
配信開始したら正常に配信できました。
ログは以下のとおりです。
//FFWmvServerログ開始
//エンコード開始
post from:/端末のグローバルIP
655 30 26 b2 75 8e 66 cf 11 a6 d9 00 aa 00 62 ce 6c
new streaming header
3200 82 00 00 01 5d 84 1c 00 00 4c 04 8c 01 47 a4 00
140 90 08 00 33 b1 e5 cf 11 89 f4 00 a0 c9 03 49 cb
12 24 45 08 00 00 00 00 00 00 00 08 00
0
post from:/端末のグローバルIP
655 30 26 b2 75 8e 66 cf 11 a6 d9 00 aa 00 62 ce 6c
new streaming header
3200 82 00 00 09 5d 49 4d 1c 00 00 73 01 8d 02 9d 00
3200 82 00 00 09 5d 1b 91 1f 00 00 73 01 8d 02 af 00
//配信開始
get from:/127.0.0.1
3200 82 00 00 09 5d b2 d8 6c 00 00 73 01 8d 02 59 00
3200 82 00 00 01 5d 1c 70 00 00 90 01 8e 01 19 c0 00
3200 82 00 00 09 5d 39 a4 76 00 00 73 01 8d 02 8f 00
3200 82 00 00 01 5d 80 a2 00 00 90 01 8e 01 9a 3c 00
get from:/127.0.0.1
3200 82 00 00 09 5d 22 e2 aa 00 00 74 01 8d 02 af 00
3200 82 00 00 09 5d 60 0c b3 00 00 6c 01 8c 02 dc 00
connection abort
3200 82 00 00 09 5d 30 83 fe 00 00 74 01 8d 02 7c 00
3200 82 00 00 09 5d 1e 06 0d 01 00 74 01 8d 02 cc 00
3200 82 00 00 01 5d e4 48 01 00 94 01 8e 02 16 00 00
3200 82 00 00 01 5d ac 84 01 00 90 01 8e 01 dd b2 00
3200 82 00 00 09 5d 35 68 f5 01 00 73 01 8d 02 cd 00
3200 82 00 00 09 5d 4b b6 36 02 00 74 01 8d 02 35 00
3200 82 00 00 01 5d 2c 40 02 00 90 01 8d 01 bc 4e 00
3200 82 00 00 09 5d 13 0b 45 02 00 74 01 8d 02 84 00
3200 82 00 00 01 5d f0 49 02 00 90 01 8e 01 d5 20 00
3200 82 00 00 09 5d 25 ec 51 02 00 74 01 8d 02 cb 00
3200 82 00 00 09 5d 74 f4 59 02 00 90 01 8d 01 fe ae
1034 90 08 00 33 b1 e5 cf 11 89 f4 00 a0 c9 03 49 cb
12 24 45 08 00 00 00 00 00 00 00 08 00
0
//ログ終了
とりあえず端末の再起動で直るようです。
なんだかもうこのアプリはデモタさんが作っているような状態になって来ました・・・
new streaming headerの表示のあと
3200 82 00 …
の行が始まらないときはデータを受信できていません。
たぶんエラーが発生しつつアプリは落ちずにそのまま継続しているような状態ではないかと思います。
(エンコード停止してから受信してるっぽいのが若干気になりますが)
中身がほぼ共通のCaveCastではエンコード開始した直後、音声が始まる前に映像が入ってしまうとかなりの確率でエラーになっていたので、もしかするとPecaBroadcasterでもこれが原因なのかもしれないということで修正したものをアップしました。
ちなみに端末の再起動というのがアプリを再起動しただけではダメという意味なら、端末を再起動する代わりにアプリケーション管理画面でPecaBroadcasterと実行中のPecaBroadcasterサービスを停止してみてください。(エンコード部分はバックグラウンドサービスで実行されているため)
ワタシツクッテナイアルヨ。ビショウナガラオテツダイシテイルダケアルヨ。
修正ありがとうございます。
追伸
UDP?ガタッ