为 chromecast 设置 cors 标头
Posted
技术标签:
【中文标题】为 chromecast 设置 cors 标头【英文标题】:setting cors header for chromecast 【发布时间】:2014-08-23 01:07:56 【问题描述】:如何在 Chromecast 中为 M3U8 文件流设置 CORS 标头?在我的发件人(android)中,我正在设置 Metadata 和 MediaInfo,如下所示:
metaData = new MediaMetadata(MediaMetadata.MEDIA_TYPE_MOVIE);
metaData.putString(MediaMetadata.KEY_TITLE, "Demo Video");
MediaInfo mediaInfo = new MediaInfo.Builder(
"http://playertest.longtailvideo.com/adaptive/bbbfull/bbbfull.m3u8")
.setContentType("application/vnd.apple.mpegurl")
.setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
.setMetadata(metaData)
.build();
player.load(client, mediaInfo, true)
.setResultCallback(new ResultCallback<RemoteMediaPlayer.MediaChannelResult>()
@Override
public void onResult(RemoteMediaPlayer.MediaChannelResult mediaChannelResult)
Status status = mediaChannelResult.getStatus();
if (status.isSuccess())
);
我的 onLoad 方法是这样设置的:
mediaManager.onLoad = function(event)
console.log("### Media Manager - LOAD: " + JSON.stringify(event));
if(mediaPlayer !== null)
mediaPlayer.unload(); // Ensure unload before loading again
if (event.data['media'] && event.data['media']['contentId'])
var url = event.data['media']['contentId'];
mediaHost = new cast.player.api.Host(
'mediaElement': mediaElement,
'url': url
);
mediaHost.onError = function (errorCode)
console.error('### HOST ERROR - Fatal Error: code = ' + errorCode);
if (mediaPlayer !== null)
mediaPlayer.unload();
var initialTimeIndexSeconds = event.data['media']['currentTime'] || 0;
// TODO: real code would know what content it was going to access and this would not be here.
var protocol = null;
var parser = document.createElement('a');
parser.href = url;
var ext = ext = parser.pathname.split('.').pop();
if (ext === 'm3u8')
protocol = cast.player.api.CreateHlsStreamingProtocol(mediaHost);
else if (ext === 'mpd')
protocol = cast.player.api.CreateDashStreamingProtocol(mediaHost);
else if (ext === 'ism/')
protocol = cast.player.api.CreateSmoothStreamingProtocol(mediaHost);
console.log('### Media Protocol Identified as ' + ext);
if (protocol === null)
mediaManager['onLoadOrig'](event); // Call on the original callback
else
mediaPlayer = new cast.player.api.Player(mediaHost);
mediaPlayer.load(protocol, initialTimeIndexSeconds);
但是,我收到此错误:
XMLHttpRequest cannot load http://playertest.longtailvideo.com/adaptive/bbbfull/bbbfull.m3u8. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin '----' is therefore not allowed access.
对于 Chromecast,如何设置 Chromecast 的 CORS 标头?
【问题讨论】:
您必须启用托管媒体内容的网络服务器:developers.google.com/cast/docs/player#cors 【参考方案1】:可能为时已晚,但刚刚遇到同样的问题并通过下面提到的方法完成。
我没有办法在发件人应用程序端添加标题,所以分享我自己的经验。我在首先确认我的服务器支持 CORS 后解决了 CORS 问题。然后为了在 chromecast 上播放媒体,我需要添加 gstatic.com 以及在我的情况下另一个作为服务器上允许的域,这实际上是 CORS 的整个想法,即我们的服务器应该知道每个域。就是这样。
注意:非常肯定go through this official documentation. 但是对于初学者来说,从这里获取所有东西可能看起来有点棘手。所以也分享了自己的经验。
【讨论】:
您好,请您详细说明“添加 gstatic.com” 也请您查看此问题github.com/googlecast/CastReceiver/issues/26 您需要将 chromecast 来源(即服务器上的 gstatic)列入白名单,以便在 chromecast 请求时接收流。以上是关于为 chromecast 设置 cors 标头的主要内容,如果未能解决你的问题,请参考以下文章
Apache Solr:从 solrconfig.xml 为 CORS 设置 HTTP 响应标头
Chromecast 客户端是不是支持 Cache-Control 或 Expires 标头?