【问题标题】:Chromecast receiver using sendLoadComplete() doesn't update status使用 sendLoadComplete() 的 Chromecast 接收器不更新状态
【发布时间】:2014-08-24 11:05:48
【问题描述】:

我正在编写一个 Chromecast 接收器来播放不同类型的内容(包括嵌入式 Flash 视频)。我想使用自己的 JS 库来创建播放器画布,而不是依赖 html 视频元素。

我目前被阻止,因为我无法使用自定义行为加载要加载的媒体:

接收者:

在 HTML 中没有什么花哨的,我只是将我的库加载到 #mediaWrapper div 中。然后我从中创建一个 MediaManager

var node = $( "#mediaWrapper" )[0];
var phiEngine = new phi.media.Player( node );
window.mediaManager = new cast.receiver.MediaManager( phiEngine );
window.castReceiverManager = cast.receiver.CastReceiverManager.getInstance();

/* Override Load method */
window.mediaManager['origOnLoad'] = window.mediaManager.onLoad;
window.mediaManager.onLoad = function (event) {
    console.log('### Application Load ', event);

    /* Custom code (load lib, set metadata, create canvas ...) */

    window.mediaManager.sendLoadComplete(); // Doesn't seem to do anything

    // window.mediaManager['origOnLoad'](event);
    // -> Fails 'Load metadata error' since url is not a video stream
    // -> ex: youtube url
}

/* Will never be called */
window.mediaManager['origOnMetadataLoaded'] = window.mediaManager.onMetadataLoaded;
window.mediaManager.onMetadataLoaded = function (event) {
...
}

发件人:

我使用自己的 android 应用程序投射到设备上。我不能使用 Companion 库,因为它将是一个 Titanium 模块

private void createMediaPlayer() {
    // Create a Remote Media Player
    mRemoteMediaPlayer = new RemoteMediaPlayer();
    mRemoteMediaPlayer.setOnStatusUpdatedListener(
        new RemoteMediaPlayer.OnStatusUpdatedListener() {
            @Override
            public void onStatusUpdated() {
                Log.e(TAG, "onStatusUpdated");

                }
            }
    });

    mRemoteMediaPlayer.setOnMetadataUpdatedListener(
        new RemoteMediaPlayer.OnMetadataUpdatedListener() {
            @Override
            public void onMetadataUpdated() {
                Log.e(TAG, "onMetadataUpdated");

            }
    });

    try {
        Cast.CastApi.setMessageReceivedCallbacks(mApiClient,
            mRemoteMediaPlayer.getNamespace(), mRemoteMediaPlayer);
    } catch (IOException e) {
        Log.e(TAG, "Exception while creating media channel", e);
    }

    mRemoteMediaPlayer
    .requestStatus(mApiClient)
    .setResultCallback(
        new ResultCallback<RemoteMediaPlayer.MediaChannelResult>() {
            @Override
            public void onResult(MediaChannelResult result) {
                Log.e(TAG, "Request status : ", result.toString());
                if (!result.getStatus().isSuccess()) {
                    Log.e(TAG, "Failed to request status.");
                }
            }
    });
}


private void loadMedia( MediaInfo mediaInfo, Boolean autoplay ) {
    try {
        mRemoteMediaPlayer.load(mApiClient, mediaInfo, autoplay)
        .setResultCallback(new ResultCallback<RemoteMediaPlayer.MediaChannelResult>() {
            @Override
            public void onResult(MediaChannelResult result) {
                Log.e(TAG, "loadMedia ResultCallback reached");

                if (result.getStatus().isSuccess()) {
                    Log.e(TAG, "Media loaded successfully");
                } else {
                     Log.e(TAG, "Error loading Media : " + result.getStatus().getStatusCode() );
                }
            }
        });
    } catch (Exception e) {
        Log.e(TAG, "Problem opening media during loading", e);
    }
}

预期行为:

我基本上是先调用一次createMediaPlayer(),然后调用loadMedia(...)。第一次调用 loadMedia在日志中不显示任何内容:也不显示成功或失败。下一个调用错误代码 4 的问题。

我在接收方收到 load 事件。但是,回到发送方,我无法结束加载阶段并创建一个 媒体会话。 我期待 sendLoadComplete() 这样做,但我可能错了。如何更新媒体状态并达到 loadMedia ResultCallback ?

我的目标是使用 RemoteMediaPlayer.play()pause()、...但现在我遇到了 'No current media session ' 因为媒体尚未加载。

另外,我真的很高兴能够在处理之前记录发件人收到的任何消息。有可能吗?

希望我没有忘记任何信息, 感谢您的帮助!

编辑:我通过使用自定义消息通道解决了这个问题,因为我似乎无法按照我想要的方式使用 RemoteMediaPlayer。

【问题讨论】:

  • Cast 接收器 SDK 媒体管理器仅适用于 HTML 媒体元素。
  • 这是个坏消息! :( 文档指出 mediaElement 可以是 “实现 cast.receiver.media.Player 接口的 DOM 媒体元素或播放器。”,但似乎该类不再存在.. . 关于如何在没有 mediaElement 的情况下使用 RemoteMediaPlayer 的任何建议?

标签: chromecast


【解决方案1】:

我认为您收到的错误代码 4 是伪造的;见https://plus.google.com/u/0/+JimRenkel2014/posts/aY5RP7X3QhA。如上所述,我为此创建了一个 Chromecast 问题 (https://code.google.com/p/google-cast-sdk/issues/detail?id=305&thanks=305&ts=1403833532)。对此问题的额外支持将帮助它更快地得到修复! :-)

【讨论】:

  • 嗨,Jim,这里的 errorCode 并不让我感到惊讶,因为只有在我多次调用 load 时才会发生(请参阅 Ali Naddaf 的回答:stackoverflow.com/a/23877967/1496236)。我的问题是第一次调用从来没有给出任何结果!
【解决方案2】:

.sendLoadComplete(true)

布尔值帮助我在发送者上接收到加载的事件。也可以帮到你。

【讨论】:

    猜你喜欢
    • 2021-02-26
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 2023-03-05
    • 2020-03-11
    • 2015-04-14
    • 1970-01-01
    • 2021-05-10
    相关资源
    最近更新 更多