我正在编写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 将在日志中不显示任何内容:成功或失败。接下来调用errorCode 4的问题。
我在接收方获得了 load 事件。但是,回到发送方,我无法设法结束加载阶段并创建媒体会话。 我期待 sendLoadComplete()这样做,但我可能错了。如何更新媒体状态并访问loadMedia ResultCallback?
我的目标是使用 RemoteMediaPlayer.play(), pause(),...但是现在我遇到了&#39;否当前媒体会话&#39; 因为媒体尚未加载。
此外,我真的很高兴能够在处理之前记录发件人收到的任何邮件。有可能吗?
希望我没有忘记任何信息, 谢谢你的帮助!
编辑:我通过使用自定义消息渠道解决了这个问题,因为我似乎无法按照自己的方式使用RemoteMediaPlayer。
答案 0 :(得分:0)
我相信你收到的错误代码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)。对此问题的额外支持将有助于更快地修复! : - )
答案 1 :(得分:0)
.sendLoadComplete(true)
布尔值帮助我在发送者上接收加载的事件。也可以帮助你。