我对使用ExoPlayer播放 YouTube 视频很感兴趣。我从ExoPlayer 示例中看到他们通过 DASH URL 播放 YouTube 视频。
我正在使用 Android YouTube API 来搜索视频,但没有看到为任何搜索结果获取 DASH URL 的方法。是否有人知道将 YouTube API (v3) 与 ExoPlayer 集成的任何示例(不使用硬编码的视频 URL),或者知道从 YouTube API 获取我需要的信息以将视频加载到 ExoPlayer 的方法?
我对使用ExoPlayer播放 YouTube 视频很感兴趣。我从ExoPlayer 示例中看到他们通过 DASH URL 播放 YouTube 视频。
我正在使用 Android YouTube API 来搜索视频,但没有看到为任何搜索结果获取 DASH URL 的方法。是否有人知道将 YouTube API (v3) 与 ExoPlayer 集成的任何示例(不使用硬编码的视频 URL),或者知道从 YouTube API 获取我需要的信息以将视频加载到 ExoPlayer 的方法?
要获取 DASH URL,您需要下载文件:http ://www.youtube.com/get_video_info?&video_id= " + videoId(sample "BU2zodCxwwo")。解析文件,获取 "dashmpd" 并使用它。
开始 url dashmpd,首先结束 url &。
XML 文件的此 URL,其中包含有关视频的信息。这个 URL 很少有生命,并不是所有的视频都包含 fmp4 格式。如果您使用旧 URL 或不包含 fmp4 格式的视频,则会出现 403 错误(您的客户端无权获取 URL)。这个问题的解决方法,我还没有找到。
public static Observable<String> downloadSound(String youtubeUrl, final String baseDir) {
return DownloadManager.downloadFile("http://www.youtube.com/get_video_info?&video_id=" + youtubeUrl, baseDir + File.separator + FILEYOUTUBE, new DownloadManager.IDownloadProgress() {
@Override
public void onProgress(long current, long max) {
}
})
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.map(new Func1<File, String>() {
@Override
public String call(File youtubeFile) {
String dashmpd = null;
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(youtubeFile.toString()));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
sb.append(line);
line = br.readLine();
}
String everything = sb.toString();
Log.d("TAG", everything);
dashmpd = getQueryParams(everything);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return dashmpd;
}
});
}
public static String getQueryParams(String url) {
String dashUrl1 = url.substring(url.lastIndexOf("dashmpd"));
String dashUrl2 = dashUrl1.substring(dashUrl1.lastIndexOf("dashmpd"), dashUrl1.indexOf("&"));
String dashUrl = null;
try {
dashUrl = URLDecoder.decode(dashUrl2.substring(dashUrl2.indexOf("http")), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return dashUrl;
}