使用sendLoadComplete()的Chromecast接收器不';更新状态

使用sendLoadComplete()的Chromecast接收器不';更新状态,chromecast,Chromecast,我正在编写一个Chromecast接收器来播放不同类型的内容(包括嵌入式flash视频)。我想使用我自己的JS库来创建播放器画布,而不是依赖html视频元素 我当前被阻止,因为我无法使用自定义行为加载媒体: 接收人: 在HTML中没有什么特别之处,我只是将我的库加载到#mediaWrapper div中,然后从中创建一个MediaManager 发件人: 我使用我自己的android应用程序将其转换到设备上。我不能使用配套库,因为它将是一个钛模块 private void createMedia

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

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

接收人: 在HTML中没有什么特别之处,我只是将我的库加载到#mediaWrapper div中,然后从中创建一个MediaManager

发件人: 我使用我自己的android应用程序将其转换到设备上。我不能使用配套库,因为它将是一个钛模块

private void createMediaPlayer(){
//创建远程媒体播放器
mRemoteMediaPlayer=新的RemoteMediaPlayer();
mRemoteMediaPlayer.setOnStatusUpdatedListener(
新的RemoteMediaPlayer.OnStatusUpdatedListener(){
@凌驾
状态更新时的公共无效(){
Log.e(标签“onStatusUpdated”);
}
}
});
mRemoteMediaPlayer.setOnMetadataUpdatedListener(
新的RemoteMediaPlayer.OnMetadataUpdatedListener(){
@凌驾
MetadataUpdate()上的公共void{
Log.e(标记“onMetadataUpdated”);
}
});
试一试{
Cast.CastApi.setMessageReceivedCallbacks(mApiClient,
mRemoteMediaPlayer.getNamespace(),mRemoteMediaPlayer);
}捕获(IOE异常){
Log.e(标记“创建媒体频道时异常”,e);
}
mRemoteMediaPlayer
.requestStatus(mApiClient)
.setResultCallback(
新的ResultCallback(){
@凌驾
公共void onResult(MediaChannelResult){
Log.e(标记“请求状态:”,result.toString();
如果(!result.getStatus().issucess()){
Log.e(标记“请求状态失败”);
}
}
});
}
专用void loadMedia(MediaInfo MediaInfo,布尔自动播放){
试一试{
mRemoteMediaPlayer.load(mApiClient、mediaInfo、autoplay)
.setResultCallback(新的ResultCallback(){
@凌驾
公共void onResult(MediaChannelResult){
Log.e(标记“loadMedia ResultCallback已到达”);
if(result.getStatus().issucess()){
Log.e(标记“媒体加载成功”);
}否则{
Log.e(标记“加载媒体时出错:+result.getStatus().getStatusCode());
}
}
});
}捕获(例外e){
Log.e(标签“加载过程中打开介质的问题”,e);
}
}
预期行为: 我基本上先调用createMediaPlayer()一次,然后调用loadMedia(…)。首次调用loadMedia将在日志中不显示任何内容:也不显示成功或失败。下一个呼叫出现错误代码4

我在接收端得到加载事件。但是,回到发送方,我无法结束加载阶段并创建媒体会话。 我本以为sendLoadComplete()会这样做,但我可能错了。如何更新媒体状态并访问loadMedia ResultCallback

我的目标是使用RemoteMediaPlayer.play(),pause()。。。但现在我只能说“没有当前媒体会话”,因为媒体还没有加载

此外,我非常喜欢能够在处理之前记录发送者收到的任何消息。可能吗

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


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

我相信您收到的错误代码4是假的;看见正如上面提到的,我为此()创建了一个Chromecast问题。对这个问题的额外支持将帮助它更快地得到修复!:-)

.sendLoadComplete(true)


布尔值帮助我接收发件人上加载的事件。可能也会对您有所帮助。

嗨,吉姆,这里的错误代码并不让我吃惊,因为只有在我多次调用load时才会发生(请参阅Ali Naddaf的答案:)。我的问题是,第一个电话从来没有给出任何结果!Cast receiver SDK媒体管理器仅适用于HTML媒体元素。这是个坏消息!:(文档说明mediaElement可以是“DOM媒体元素或实现cast.receiver.media.player接口的播放机”,但该类似乎已经不存在了……关于如何在没有mediaElement的情况下使用RemoteMediaPlayer,有什么建议吗?
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) {
...
}
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);
    }
}