【发布时间】:2013-08-14 07:39:42
【问题描述】:
我为 Chromecast 创建了一个自定义发送器和接收器应用程序。发件人应该通过网络发送一个 url (dash mpd)。接收者应创建一个视频元素,并在收到破折号 mpd url 后创建一些与视频元素交互的额外文件。
在发件人上我这样做:
var request = new cast.LaunchRequest(APP_ID, receiver);
request.parameters = params;
cast_api.launch(request, onLaunch);
接着是:
var request = new cast.MediaLoadRequest("http://dash.edgesuite.net/envivio/dashpr/clear/Manifest.mpd");
request.parameters = params;
cast_api.loadMedia(cv_activity.activityId, request, onLoad);
然后在接收器中我有:
var receiver = new cast.receiver.Receiver(APP_ID, [cast.receiver.RemoteMedia.NAMESPACE]);
var rampHandler = new cast.receiver.RemoteMedia();
rampHandler.addChannelFactory(receiver.createChannelFactory(cast.receiver.RemoteMedia.NAMESPACE));
rampHandler.onOpen = onOpen;
rampHandler.onMessage = onMessage;
rampHandler.onLoad = onLoad;
rampHandler.onInfo = onInfo;
rampHandler.onPlay = onPlay;
rampHandler.onStop = onStop;
rampHandler.onEnded = onEnded;
rampHandler.onMetadataLoaded = onMetadataLoaded;
rampHandler.onLoadMetaDataError = onLoadMetaDataError;
rampHandler.onVolume = onVolume;
当我启动接收器时,onOpen 和 onMessage 会被触发一次。调用 api.loadMedia 后似乎没有任何反应。从我读到的内容看来,api 正在访问 RemoteMedia 应该响应的 RAMP 调用。我希望在调用 api.loadMedia 后触发 onLoad 或 onMessage 。但什么也没有发生。 Chromecast 调试器中根本没有任何痕迹。
【问题讨论】:
-
你试过连接调试器吗?尝试访问 http://
:9222 并单击该简单 HTML 页面上的链接以打开类似 Chrome 的调试器。转到该调试器视图中的网络选项卡。然后,从发件人页面启动会话。您应该会看到一些网络流量出现。一个特别像“session?1”;这是 WebSocket 连接。如果单击它,然后将其从“Headers”切换到“Frame”,您可以看到 JSON 来回移动。它不会自动更新,您必须在网络流量列表中再次单击它。 -
我一直在使用调试器,但我不知道网络流量。好提示!然而,遗憾的是它并没有帮助。调用 api.loadMedia() 后我没有看到任何消息。传递给 api.loadMedia() 的回调确实被调用了,所以发生了一些事情......我只是不知道是什么。
-
我还与 LaunchRequest 一起传递了一些参数(在 api.launch 中),但我在网络流量中的任何地方都看不到这些参数..
-
不确定,听起来可能没有足够的逻辑暴露给任何一方的调试来弄清楚发生了什么。我发现 Chrome API 缺少参数验证和错误消息,这意味着有时您可能会犯一个愚蠢的错误而暂时没有发现它。关于参数,可能是它们没有被传递,请参阅此处的讨论:stackoverflow.com/a/18007132/48735
-
啊,很可能就是这样。我也尝试使用自定义频道,但在 Chrome Sender API 中看不到任何使用它们的方法。也许该功能尚未在 Chrome Sender API 上公开。