Skip to content
T Yoshizawa edited this page Aug 8, 2021 · 12 revisions

開発者向けの情報 (v4.0-)

PeerCast for Androidを自分のアプリから制御するには

jitpackを用いてlibpeercastをインポートしてください。
PeerCastControllerでサービスに接続することができます。

//アプリのメイン・アクティビティ
class YourMainActivity : Activity(), PeerCastController.EventListener {

 private lateinit var pecaController: PeerCastController 

 override fun onCreate(savedInstanceState: Bundle?) {
     super.onCreate(savedInstanceState)

     pecaController = PeerCastController.from(this)

     //開始・終了時に呼ばれるイベントリスナーを登録。
     pecaController.eventListener = this

     //もし、インストールされていれば、
     if (pecaController.isInstalled) {
         //PeerCastを開始します。
         pecaController.bindService()
     }
 }


 override fun onDestroy() {
     //アプリ終了なのでアンバインドする。
     if (pecaController.isConnected)
         pecaController.unbindService()
     super.onDestroy()
 }

 override fun onConnectService(controller: PeerCastController) {
     //bindServiceに成功した場合に呼ばれます。
     Log.i(TAG, "PeerCastが開始されました。")
 }

 /**通知を受信したとき*/
 override fun onNotifyMessage(types: EnumSet<NotifyMessageType>, message: String){
 }

 /**チャンネルの開始などの通知を受信したとき*/
 override fun onNotifyChannel(type: NotifyChannelType, channelId: String, channelInfo: ChannelInfo){
 }

 override fun onDisconnectService() {
     //アンバインドした後、またはサービスがKillされた場合に呼ばれます。
     Log.i(TAG, "PeerCastが停止しました。")
 }
}

JSON-RPCを使ってPeerCast-YTから情報を取得するには

private var rpcClient : PeerCastRpcClient? = null

override fun onConnectService(controller: PeerCastController) {
      //bindServiceに成功した場合に呼ばれます。
      Log.i(TAG, "PeerCastが開始されました。")
      rpcClient = PeerCastRpcClient(controller)

      GlobalScope.launch {
          try {
              rpcClient?.getChannels()
              // .getSettings()
              //  .bumpChannel() 
              //  ...
          } catch (e: JsonRpcException){
              //エラー
          }
      }
  }

  override fun onDisconnectService(controller: PeerCastController) {
      //アンバインドした後、またはサービスがKillされた場合に呼ばれます。
      Log.i(TAG, "PeerCastが停止しました。")
      rpcClient = null
  }  

ストリームを再生するには

vlcやMX等、ffmpeg系動画プレーヤーで視聴するにはリンクをmms://ではなく、

mmsh://localhost:7144/stream/1234..DF.wmv?tip=xxx:7144

としてMMS(HTTP)で開くのが良いです。
mms://だとプレーヤー側からピアキャスが対応してないMMS(TCP)で接続してくる為、再生できないことが多いです。


動作権限

AndroidManifest.xmlにネット接続の権限を追加します。

  <uses-permission android:name="android.permission.INTERNET" />

Androidコード部分のライセンスについて

PeerCastController.ktをはじめとするJavaのコード部分については、
GPL・MITのデュアルライセンスです。
(例えば、上のコードを利用したYPアプリは非GPLでの公開も可能)