繁体   English   中英

如何实现自己的cast.receiver.media.Player

[英]How to implement own cast.receiver.media.Player

前言

我有自己的播放器,带有自己的本地音频引擎。 最近,我决定向其中添加强制转换功能。 为了将音频“流式传输”到自定义演员表应用程序,我决定使用WebSocket并在其上发送float32 PCM,然后通过WebAudio API进行播放。 因为自定义音频格式,所以我决定编写自己的cast.receiver.media.Player实现sample.MyPlayer

问题

呼叫com.google.android.gms.cast.RemoteMediaPlayer上的playpause

java.lang.IllegalStateException:当前没有媒体会话

当然,在通话之前,我要做com.google.android.gms.cast.RemoteMediaPlayer.load ,这里是有趣的时刻。 出于某种原因, sample.MyPlayer未收到mediaSessionId似乎与Java端的异常有关。 但是我在js端的sample.MyPlayer.load调用了。

我的应用程序的日志片段

cast_receiver.js:61 [21.034s] [cast.receiver.MediaManager]接收到的加载消息:{“ 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” :{...},“自动播放”:true,“ currentTime”:0}

如您所见,我的自定义接收器中的有效载荷缺少mediaSessionIdtypecustomData

这是我发现的所有问题。

我的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问题java.lang.IllegalStateException: No current media session

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM