Intereting Posts
SQLITE – установка версии новой базы данных Получите изображение Blob и преобразуйте это изображение в растровое изображение Как сделать TextView похожим на PreferenceCategory Header CollapsingToolbarLayout setTitle () не обновляется, если не свернут Элемент списка списка проведите пальцем влево и проведите пальцем вправо? Откройте приложение LinkedIn (страница профиля контакта) из моего приложения Android с использованием намерения? Java.lang.UnsupportedOperationException: это не поддерживается, используйте MenuItemCompat.setOnActionExpandListener () Android-приложение не может получить доступ к местоположению на эмуляторе, используя FusedLocationApi SearchClick OnCloseListener не работает Android-разработчик переходит на iOS. Что мне нужно знать? Материал TabLayout не работает Тестирование Android-модуля с помощью дооснащения и моккита Могу ли я подслушивать события Android touch? GetToken () не удалось. Ошибка состояния BAD_AUTHENTICATION SSLHandshakeException: сообщение о нарушении не выполнено на Android N / 7.0

Как воспроизводить видео на YouTube в ExoPlayer в Android?

Я пытаюсь воспроизвести видео youtube в exoplayer, но вот некоторая путаница, я не знаю, что такое URL-адрес DASH, у меня есть только настоящий URL-адрес YouTube, например « https://www.youtube.com/watch?v=v1uyQZNg2vE », i Не знаю, как создать тире URL-адрес реального URL-адреса.

Dash Url:

new Sample("Google Glass", "http://www.youtube.com/api/manifest/dash/id/bf5bb2419360daf1/source/youtube?" + "as=fmp4_audio_clear,fmp4_sd_hd_clear&sparams=ip,ipbits,expire,as&ip=0.0.0.0&" + "ipbits=0&expire=19000000000&signature=255F6B3C07C753C88708C07EA31B7A1A10703C8D." + "2D6A28B21F921D0B245CDCF36F7EB54A2B5ABFC2&key=ik0", DemoUtil.TYPE_DASH), 

Реальный URL:

  https://www.youtube.com/watch?v=v1uyQZNg2vE 

Solutions Collecting From Web of "Как воспроизводить видео на YouTube в ExoPlayer в Android?"

Я написал класс, который извлекает фактический URL видеопотока YouTube для формата DASH и HLS, используя http://www.youtube.com/get_video_info?&video_id=%5Bvideo_id%5D url с идентификатором видео, как описано Каримом Абделлом Саламом . Я также тестировал URL-адрес в приложении, использующем ExoPlayer, и он работает:

 import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.ProtocolException; import java.net.URL; import java.net.URLDecoder; import java.util.Map; import java.util.TreeMap; /** * Represents youtube video information retriever. */ public class YouTubeVideoInfoRetriever { private static final String URL_YOUTUBE_GET_VIDEO_INFO = "http://www.youtube.com/get_video_info?&video_id="; public static final String KEY_DASH_VIDEO = "dashmpd"; public static final String KEY_HLS_VIDEO = "hlsvp"; private TreeMap<String, String> kvpList = new TreeMap<>(); public void retrieve(String videoId) throws IOException { String targetUrl = URL_YOUTUBE_GET_VIDEO_INFO + videoId; SimpleHttpClient client = new SimpleHttpClient(); String output = client.execute(targetUrl, SimpleHttpClient.HTTP_GET, SimpleHttpClient.DEFAULT_TIMEOUT); parse(output); } public String getInfo(String key) { return kvpList.get(key); } public void printAll() { System.out.println("TOTAL VARIABLES=" + kvpList.size()); for(Map.Entry<String, String> entry : kvpList.entrySet()) { System.out.print( "" + entry.getKey() + "="); System.out.println("" + entry.getValue() + ""); } } private void parse(String data) throws UnsupportedEncodingException { String[] splits = data.split("&"); String kvpStr = ""; if(splits.length < 1) { return; } kvpList.clear(); for(int i = 0; i < splits.length; ++i) { kvpStr = splits[i]; try { // Data is encoded multiple times kvpStr = URLDecoder.decode(kvpStr, SimpleHttpClient.ENCODING_UTF_8); kvpStr = URLDecoder.decode(kvpStr, SimpleHttpClient.ENCODING_UTF_8); String[] kvpSplits = kvpStr.split("=", 2); if(kvpSplits.length == 2) { kvpList.put(kvpSplits[0], kvpSplits[1]); } else if(kvpSplits.length == 1) { kvpList.put(kvpSplits[0], ""); } } catch (UnsupportedEncodingException ex) { throw ex; } } } public static class SimpleHttpClient { public static final String ENCODING_UTF_8 = "UTF-8"; public static final int DEFAULT_TIMEOUT = 10000; public static final String HTTP_GET = "GET"; public String execute(String urlStr, String httpMethod, int timeout) throws IOException { URL url = null; HttpURLConnection conn = null; InputStream inStream = null; OutputStream outStream = null; String response = null; try { url = new URL(urlStr); conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(timeout); conn.setRequestMethod(httpMethod); inStream = new BufferedInputStream(conn.getInputStream()); response = getInput(inStream); } finally { if(conn != null && conn.getErrorStream() != null) { String errorResponse = " : "; errorResponse = errorResponse + getInput(conn.getErrorStream()); response = response + errorResponse; } if (conn != null) { conn.disconnect(); } } return response; } private String getInput(InputStream in) throws IOException { StringBuilder sb = new StringBuilder(8192); byte[] b = new byte[1024]; int bytesRead = 0; while (true) { bytesRead = in.read(b); if (bytesRead < 0) { break; } String s = new String(b, 0, bytesRead, ENCODING_UTF_8); sb.append(s); } return sb.toString(); } } } - import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.ProtocolException; import java.net.URL; import java.net.URLDecoder; import java.util.Map; import java.util.TreeMap; /** * Represents youtube video information retriever. */ public class YouTubeVideoInfoRetriever { private static final String URL_YOUTUBE_GET_VIDEO_INFO = "http://www.youtube.com/get_video_info?&video_id="; public static final String KEY_DASH_VIDEO = "dashmpd"; public static final String KEY_HLS_VIDEO = "hlsvp"; private TreeMap<String, String> kvpList = new TreeMap<>(); public void retrieve(String videoId) throws IOException { String targetUrl = URL_YOUTUBE_GET_VIDEO_INFO + videoId; SimpleHttpClient client = new SimpleHttpClient(); String output = client.execute(targetUrl, SimpleHttpClient.HTTP_GET, SimpleHttpClient.DEFAULT_TIMEOUT); parse(output); } public String getInfo(String key) { return kvpList.get(key); } public void printAll() { System.out.println("TOTAL VARIABLES=" + kvpList.size()); for(Map.Entry<String, String> entry : kvpList.entrySet()) { System.out.print( "" + entry.getKey() + "="); System.out.println("" + entry.getValue() + ""); } } private void parse(String data) throws UnsupportedEncodingException { String[] splits = data.split("&"); String kvpStr = ""; if(splits.length < 1) { return; } kvpList.clear(); for(int i = 0; i < splits.length; ++i) { kvpStr = splits[i]; try { // Data is encoded multiple times kvpStr = URLDecoder.decode(kvpStr, SimpleHttpClient.ENCODING_UTF_8); kvpStr = URLDecoder.decode(kvpStr, SimpleHttpClient.ENCODING_UTF_8); String[] kvpSplits = kvpStr.split("=", 2); if(kvpSplits.length == 2) { kvpList.put(kvpSplits[0], kvpSplits[1]); } else if(kvpSplits.length == 1) { kvpList.put(kvpSplits[0], ""); } } catch (UnsupportedEncodingException ex) { throw ex; } } } public static class SimpleHttpClient { public static final String ENCODING_UTF_8 = "UTF-8"; public static final int DEFAULT_TIMEOUT = 10000; public static final String HTTP_GET = "GET"; public String execute(String urlStr, String httpMethod, int timeout) throws IOException { URL url = null; HttpURLConnection conn = null; InputStream inStream = null; OutputStream outStream = null; String response = null; try { url = new URL(urlStr); conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(timeout); conn.setRequestMethod(httpMethod); inStream = new BufferedInputStream(conn.getInputStream()); response = getInput(inStream); } finally { if(conn != null && conn.getErrorStream() != null) { String errorResponse = " : "; errorResponse = errorResponse + getInput(conn.getErrorStream()); response = response + errorResponse; } if (conn != null) { conn.disconnect(); } } return response; } private String getInput(InputStream in) throws IOException { StringBuilder sb = new StringBuilder(8192); byte[] b = new byte[1024]; int bytesRead = 0; while (true) { bytesRead = in.read(b); if (bytesRead < 0) { break; } String s = new String(b, 0, bytesRead, ENCODING_UTF_8); sb.append(s); } return sb.toString(); } } } 

Вот тестовый код:

 public static void main(String[] args) { String youTubeVideoID = "v1uyQZNg2vE"; YouTubeVideoInfoRetriever retriever = new YouTubeVideoInfoRetriever(); try { retriever.retrieve(youTubeVideoID); System.out.println(retriever.getInfo(YouTubeVideoInfoRetriever.KEY_DASH_VIDEO)); } catch (IOException e) { e.printStackTrace(); } } 

У меня была такая же проблема, но я, наконец, нашел простейшее решение и его работу так хорошо

  1. Сначала вам нужно называть этот URL .. http://www.youtube.com/get_video_info?&video_id=v1uyQZNg2vE и не забудьте изменить последний идентификатор с целевым.

  2. Теперь вы получите уведомление о загрузке файла с именем get_video_info без расширения.

  3. Попробуйте открыть этот файл, используя блокнот и так далее.
  4. Теперь у вас есть правильные данные, но вы не можете их прочитать, потому что он закодирован. Вам нужен HTML-декодер, чтобы использовать эти данные, используя этот: http://meyerweb.com/eric/tools/dencoder/

– просто вставьте свои данные и несколько раз нажмите несколько раз, чтобы убедиться, что он хорошо декодирован

Наконец, найдите ключ под названием dashmpd и наслаждайтесь URL-адресом ur

Вам нужно будет получить ответ HTTP с URL-адреса youtube (в вашем случае реального URL-адреса), а затем найдите раздел «url_encoded_fmt_stream_map». В этом разделе вы получите URI, который нужно дважды декодировать, чтобы получить URL-адрес DASH, который вы ищете.