0

序文

独自のネイティブ オーディオ エンジンを備えた独自のプレーヤーがあります。最近、キャスト機能を追加することにしました。オーディオをカスタム キャスト アプリケーションに「ストリーミング」するためWebSocketに、float32 PCM を使用して送信し、 経由で再生することにしWebAudio APIました。カスタム オーディオ形式のため、独自のcast.receiver.media.Player実装を作成することにしました。sample.MyPlayer

問題

私が電話しplayたりpausecom.google.android.gms.cast.RemoteMediaPlayer私が得た

java.lang.IllegalStateException: 現在のメディア セッションがありません

もちろんコールプレイの前にやりますしcom.google.android.gms.cast.RemoteMediaPlayer.load、ここで面白い瞬間です。そして、何らかの理由でこれが Java 側の例外に関連しているように見えsample.MyPlayerませんでした。mediaSessionIdしかし、私sample.MyPlayer.loadのjs側が呼び出されました。

私のアプリケーションからのログの断片

cast_receiver.js:61 [ 21.034s] [cast.receiver.MediaManager] Load message received:{"requestId":2,"media":{ ... },"autoplay":false,"currentTime":0}

デフォルト受信者サンプルからのログのフラグメント

cast_receiver.js:61 [ 30.243s] [cast.receiver.MediaManager] 受信した読み込みメッセージ:{"type":"LOAD","re​​questId":2,"mediaSessionId":0,"customData":null,"media" :{ ... },"autoplay":true,"currentTime":0}

ご覧のとおり、カスタム レシーバーのペイロードにはmediaSessionId, type,customDataキーがありません

これは私が問題について見つけたすべてです。

じぶんのplayer.html

<!DOCTYPE html>
<html>
<head>
  <title>Cast Reference Receiver</title>
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="player.css" />
  <script type="text/javascript" src="//www.gstatic.com/cast/sdk/libs/receiver/2.0.0/cast_receiver.js"></script>
  <script type="text/javascript" src="//www.gstatic.com/cast/sdk/libs/mediaplayer/1.0.0/media_player.js"></script>
  <script type="text/javascript" src="player.js"></script>
</head>
<body style="margin: 0">
    <div id="player" class="player">
        <div class="logo"></div>
        <div class="spinner"></div>
        <div class="watermark"></div>
        <div class="gradient"></div>
        <div class="overlay">
            <div class="media-info">
                <div class="media-artwork"></div>
                <div class="media-text">
                    <div class="media-title"></div>
                    <div class="media-subtitle"></div>
                </div>
            </div>
            <div class="preview-mode-info">
                <div class="preview-mode-artwork"></div>
                <div class="preview-mode-text">
                    <div class="preview-mode-timer">
                        <div class="preview-mode-timer-starts">Up next in&nbsp;</div>
                        <div class="preview-mode-timer-countdown"></div>
                        <div class="preview-mode-timer-sec">&nbsp;secs...</div>
                    </div>
                    <div class="preview-mode-title"></div>
                    <div class="preview-mode-subtitle"></div>
                </div>
            </div>
            <div class="controls">
                <span class="controls-play-pause"></span>
                <span class="controls-cur-time"></span>
                <span class="controls-total-time"></span>
                <div class="controls-progress">
                    <div class="controls-progress-inner progressBar"></div>
                    <div class="controls-progress-thumb"></div>
                </div>
            </div>
        </div>
    </div>
    <script>
      var mediaManager_ = new cast.receiver.MediaManager(new sample.MyPlayer(), [
            cast.receiver.media.Command.LOAD, 
            cast.receiver.media.Command.PLAY, 
            cast.receiver.media.Command.STOP, 
            cast.receiver.media.Command.GET_STATUS,
            cast.receiver.media.Command.PAUSE, 
            cast.receiver.media.Command.STREAM_VOLUME,
            cast.receiver.media.Command.QUEUE_NEXT,
            cast.receiver.media.Command.QUEUE_PREV
        ]);
      var receiverManager = cast.receiver.CastReceiverManager.getInstance();
      receiverManager.start();
    </script>
</body>
</html>

質問

  1. 私のアプローチは一般的に正しいですか?
  2. cast.receiver.media.Playerの参照実装はどこにありますか? またはそれを適切に実装するための推奨事項はありますか?
  3. 問題は何java.lang.IllegalStateException: No current media sessionですか?
4

0 に答える 0