我创建了一个应用,其中有一个带有YouTube链接的列表视图。现在,我想使用Chrome Cast播放这些视频。我遵循了官方文档,并且能够播放具有直接mp4链接的其他视频,但不适用于youtube链接。
当然,其他链接直接连接到视频(以* .mp4结尾),但是如何添加带有YouTube链接的媒体?我需要以某种方式创建带有youtube链接的MediaInfo对象,但是我不知道该怎么做,甚至可能。
我已找到此信息
MimeData数据=新的MimeData(“ v = g1LsT1PVjUA”,MimeData.TYPE_TEXT); mSession.startSession(“ YouTube”,data);
通过我的Android应用打开Chromecast YouTube视频
但是我不确定如何获取会话并将其加载到youtube会话中。如果有人可以帮助我,我将不胜感激。
谢谢你的帮助
去年,我写了一个Android应用,可以在大屏幕电视上的VLC上播放YouTube /本地媒体。它的表现非常好,但是我一直想用更优雅的东西代替VLC笔记本电脑。当Chromecast最终与官方SDK一起发布时,我感到非常兴奋。在尝试启动YouTube接收器应用播放YouTube视频时,我也遇到了同样的问题,因此我决定深入研究VLC是如何做到这一点的(开源很棒:))我发现YouTube视频ID只是一个JavaScript页面中嵌入了很多东西。诀窍是从中提取正确的信息。不幸的是,VLC脚本是用Lua编写的,所以我花了几周的时间学习足够的Lua来浏览Lua脚本。您可以在youtube.lua上搜索该脚本的源代码。
我用Java重写了脚本,并且能够修改CastVideos Android以轻松播放YouTube视频。请注意,由于Chromecast只能播放mp4视频容器格式,因此其他格式的视频可能无法播放。
如果有人感兴趣,这是我的测试代码。您可以使用CastHelloVideo-chrome加载自定义媒体来测试URL。
享受,
姓名
package com.dql.urlexplorer;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public class UrlExplore {
private static final String URL_ENCODED_STREAM_MAP = "\"url_encoded_fmt_stream_map\":";
private static final String VIDEO_TITLE_KEYWORD = "<meta name=\"title\"";
private static final String VIDEO_DESCRIPTION_KEYWORD = "<meta name=\"description\"";
private static final String VIDEO_THUMBNAIL_KEYWORD = "<meta property=\"og:image\"" ;
private static final String CONTENT_VALUE_KEYWORD = "content=\"";
//private static final String TEST_URL = "http://www.youtube.com/watch?v=JtyCM4BTbYo";
private static final String YT_UTRL_PREFIX = "http://www.youtube.com/watch?v=";
public static void main(String[] args) throws IOException {
while (true) {
String videoId = getVideoIdFromUser();
String urlSite = YT_UTRL_PREFIX + videoId;
System.out.println("URL = " + urlSite);
System.out.println("===============================================================");
System.out.println("Getting video site content");
System.out.println("===============================================================");
CloseableHttpClient httpclient = HttpClients.createDefault();
try {
HttpGet httpget = new HttpGet(urlSite);
System.out.println("Executing request " + httpget.getRequestLine());
// Create a custom response handler
ResponseHandler<String> responseHandler = new ResponseHandler<String>() {
public String handleResponse(
final HttpResponse response) throws ClientProtocolException, IOException {
int status = response.getStatusLine().getStatusCode();
if (status >= 200 && status < 300) {
HttpEntity entity = response.getEntity();
return entity != null ? EntityUtils.toString(entity) : null;
} else {
throw new ClientProtocolException("Unexpected response status: " + status);
}
}
};
String responseBody = httpclient.execute(httpget, responseHandler);
if (responseBody.contains(VIDEO_TITLE_KEYWORD)) {
// video title
int titleStart = responseBody.indexOf(VIDEO_TITLE_KEYWORD);
StringBuilder title = new StringBuilder();
char ch;
do {
ch = responseBody.charAt(titleStart++);
title.append(ch);
}
while (ch != '>');
String videoTitle = getKeyContentValue(title.toString());
System.out.println("Video Title = " + videoTitle);
}
if (responseBody.contains(VIDEO_DESCRIPTION_KEYWORD)) {
// video description
int descStart = responseBody.indexOf(VIDEO_DESCRIPTION_KEYWORD);
StringBuilder desc = new StringBuilder();
char ch;
do {
ch = responseBody.charAt(descStart++);
desc.append(ch);
}
while (ch != '>');
String videoDesc = getKeyContentValue(desc.toString());
System.out.println("Video Description = " + videoDesc);
}
if (responseBody.contains(VIDEO_THUMBNAIL_KEYWORD)) {
// video thumbnail
int thumbnailStart = responseBody.indexOf(VIDEO_THUMBNAIL_KEYWORD);
StringBuilder thumbnailURL = new StringBuilder();
char ch;
do {
ch = responseBody.charAt(thumbnailStart++);
thumbnailURL.append(ch);
}
while (ch != '>');
String videoThumbnail= getKeyContentValue(thumbnailURL.toString());
System.out.println("Video Thumbnail = " + videoThumbnail);
}
if (responseBody.contains(URL_ENCODED_STREAM_MAP)) {
// find the string we are looking for
int start = responseBody.indexOf(URL_ENCODED_STREAM_MAP) + URL_ENCODED_STREAM_MAP.length() + 1; // is the opening "
String urlMap = responseBody.substring(start);
int end = urlMap.indexOf("\"");
if (end > 0) {
urlMap = urlMap.substring(0, end);
}
String path = getURLEncodedStream(urlMap);
System.out.println("Video URL = " + path);
}
}
finally {
httpclient.close();
}
System.out.println( "===============================================================");
System.out.println("Done: ");
System.out.println("===============================================================");
}
}
static String getURLEncodedStream(String stream) throws UnsupportedEncodingException {
// replace all the \u0026 with &
String str = stream.replace("\\u0026", "&");
//str = java.net.URLDecoder.decode(stream, "UTF-8");
//System.out.println("Raw URL map = " + str);
String urlMap = str.substring(str.indexOf("url=http") + 4);
// search urlMap until we see either a & or ,
StringBuilder sb = new StringBuilder();
for (int i = 0; i < urlMap.length(); i++) {
if ((urlMap.charAt(i) == '&') || (urlMap.charAt(i) == ','))
break;
else
sb.append(urlMap.charAt(i));
}
//System.out.println(java.net.URLDecoder.decode(sb.toString(),"UTF-8"));
return java.net.URLDecoder.decode(sb.toString(),"UTF-8");
}
static String getKeyContentValue(String str) {
StringBuilder contentStr = new StringBuilder();
int contentStart = str.indexOf(CONTENT_VALUE_KEYWORD) + CONTENT_VALUE_KEYWORD.length();
if (contentStart > 0) {
char ch;
while (true) {
ch = str.charAt(contentStart++);
if (ch == '\"')
break;
contentStr.append(ch);
}
}
try {
return java.net.URLDecoder.decode(contentStr.toString(),"UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
/*
* Prompt the user to enter a video ID.
*/
private static String getVideoIdFromUser() throws IOException {
String videoId = "";
System.out.print("Please enter a YouTube video Id: ");
BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));
videoId = bReader.readLine();
if (videoId.length() < 1) {
// Exit if the user doesn't provide a value.
System.out.print("Video Id can't be empty! Exiting program");
System.exit(1);
}
return videoId;
}
}`enter code here`
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句