序文
独自のネイティブ オーディオ エンジンを備えた独自のプレーヤーがあります。最近、キャスト機能を追加することにしました。オーディオをカスタム キャスト アプリケーションに「ストリーミング」するためWebSocket
に、float32 PCM を使用して送信し、 経由で再生することにしWebAudio API
ました。カスタム オーディオ形式のため、独自のcast.receiver.media.Player実装を作成することにしました。sample.MyPlayer
問題
私が電話しplay
たりpause
、com.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","requestId":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 </div>
<div class="preview-mode-timer-countdown"></div>
<div class="preview-mode-timer-sec"> 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>
質問
- 私のアプローチは一般的に正しいですか?
- cast.receiver.media.Playerの参照実装はどこにありますか? またはそれを適切に実装するための推奨事項はありますか?
- 問題は何
java.lang.IllegalStateException: No current media session
ですか?