我们正在尝试在Chromecast设备上播放HLS视频。 我们启用了CORS。 我们可以成功播放普通的HLS视频。但是我们遇到了URL散列问题。
我们发送chromecast,一个带哈希的网址(出于安全目的) 例: http://domainname.com/70000871V/70000871V.m3u8?cp=%2FsFcurrent%2F70000871V%2F *&安培; CF = 1403&安培; E = 1493&安培; H = cbc90
以上基本上是一个m3u8视频索引文件,chromecast查看索引文件并选择要播放的分辨率,当它访问子文件时,它会删除url中提供的散列。这导致chromecast无法访问子文件,因为它删除了url中的哈希参数。
考虑m3u8文件包含一些文件,如70000871V_iphone_med.m3u8,所以当它尝试访问它们时,会删除散列...
如何告诉chromecast在访问索引文件时保留散列参数。
注意:此网址已在移动设备中成功播放。
控制台显示以下问题:
### MEDIA ELEMENT LOAD START sample_media_receiver.html:573XMLHttpRequest无法加载http://domainname.com/s/web_vod/current/90002466V/ROTOX013V_iphone_med.m3u8。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许来源'http://'访问。 sample_media_receiver.html:1
HOST ERROR - 致命错误:代码= 3 sample_media_receiver.html:487
### MEDIA ELEMENT STALLED视频网址:http://domainname.com/70000871V/70000871V.m3u8?cp=%2FsFcurrent%2F70000871V%2F *& cf = 1403& e = 1493& h = cbc90
.m3u8文件有,
ROTOX013V_iphone_hi.m3u8
ROTOX013V_iphone_med.m3u8
ROTOX013V_iphone_low.m3u8
ROTOX013V_ipad_hi.m3u8
如何制作?
答案 0 :(得分:0)
你可能想看一下chromecast' mediaList/MediaInfo。
并且在sample implementation。 - > ' buildMedia()'
Chromecast media support没有内置支持m3u8列表。
您可能希望在接口上实现一个简单的List包装器,而不是试图将m3u8处理推送到不支持它的堆栈中?
喜欢" m3u8-to-mediaInfoList"和" mediainfoList-to-m3u8"。
OR
在列表项级别执行此操作。如果你看一下这个' buildMedia'源代码中的方法,它是如何从m3u8项获取MediaInfo项的一个很好的例子。
github上的一个CC样本的次要mod ....
public static List<MediaInfo> buildMedia(String url, Context ctx) throws JSONException {
//check nulls
mediaList = new ArrayList<MediaInfo>();
JSONObject jsonObj = new VideoProvider().parseUrl(url, ctx);
JSONArray categories = jsonObj.getJSONArray(TAG_RESULTS);
if (null != categories) {
for (int i = 0; i < categories.length(); i++) {
JSONObject category = categories.getJSONObject(i);
String title = category.getString(TAG_MSG);
String subTitle = category.getString(TAG_MSG);
JSONObject media3 = category.getJSONObject(TAG_MEDIA3);
String videoUrl = media3.getString(TAG_URL);
JSONObject media4 = category.getJSONObject(TAG_MEDIA4);
String imageurl = media4.getString(TAG_URL);
String bigImageurl = media4.getString(TAG_URL);
String studio = category.getJSONObject(TAG_CREATEDBY).getString(TAG_USERNAME);
mediaList.add(buildMediaInfo(title, studio, subTitle, videoUrl, imageurl,
bigImageurl));
Log.d(TAG, "MediaInf " +i +" " +imageurl +" " +bigImageurl +" " +videoUrl);
}
}
return mediaList;
}
答案 1 :(得分:0)
您需要编写自定义接收器(使用MPL)并使用主机覆盖updateManifestRequestInfo / updateSegmentRequestInfo来实现所需的行为。