gpt4 book ai didi

java - 如何在 Android 的 ExoPlayer 中播放 Youtube 视频?

转载 作者:IT老高 更新时间:2023-10-28 20:52:06 25 4
gpt4 key购买 nike

我正在尝试在 exoplayer 中播放 youtube 视频,但这里有些困惑,我不知道 DASH url 是什么, 我只有真正的 youtube 网址,例如“https://www.youtube.com/watch?v=v1uyQZNg2vE”,我不知道如何从真实网址生成破折号网址。

短跑网址:

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),

真实网址:

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

最佳答案

我编写了一个类,它使用 http://www.youtube.com/get_video_info?&video_id=[video_id]&el=info&ps=default&eurl=&gl=US&hl=en 检索 DASH 和 HLS 等格式的实际 YouTube 视频流 URL。带有视频 ID 的网址,如 Karim Abdell Salam 所述.我还在使用 ExoPlayer 的应用程序中测试了 URL。它有效:

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+"&el=info&ps=default&eurl=&gl=US&hl=en";
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();
}
}

关于java - 如何在 Android 的 ExoPlayer 中播放 Youtube 视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29607104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com