ExoPlayer をYouTubeビデオの再生に使用することに興味があります。 ExoPlayerサンプル から、DASHURLを介してYouTubeビデオを再生していることがわかります。
Android YouTube APIを使用して動画を検索していますが、検索結果のDASHURLを取得する方法がわかりません。統合するためのサンプルを知っている人はいますか。 ExoPlayerを使用したYouTubeAPI(v3)(ハードコードされたビデオURLを使用しない)、またはビデオをExoPlayerにロードするためにYouTube APIから必要な情報を取得する方法を知っていますか?
DASH URLを取得するには、ファイルをダウンロードする必要があります: http://www.youtube.com/get_video_info?&video_id= "+ videoId(sample" BU2zodCxwwo ")。ファイルを解析し、" dashmpd "を取得してこれを使って。
開始URLdashmpd、最初に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;
}