我想创建一个可以在不使用ExoPlayer下载的情况下观看在线视频的项目。
ExoPlayer支持多种格式like these 我想支持所有这些格式(渐进式容器格式)。 我搜索了却找不到任何东西
我想检查用户输入的URL是否是受支持的URL。将不胜感激。
我正在使用ExoPlayer。您可以使用ExoPlayer try-catch
我尝试了这些代码,但是由于某些URL是HTTPS或URI,因此无法正常工作
String URL = et_url.getText().toString();
if(URL.matches("http://[a-zA-Z0-9._-]+.[a-z]/[a-zA-Z0-9._-].mp4"))
{
}
else if (URL.matches("http://[a-zA-Z0-9._-]+.[a-z]/[a-zA-Z0-9._-].mkv"))
{
}
答案 0 :(得分:1)
您可以“可能”通过您尝试编写的尾随文件扩展名regex检查URL是否找到了视频资源。
但是从理论上讲,the URL representation本身不会告诉您网络上某个URL(或更广泛地说是URI)指向的给定资源是否是视频。该URL可以是http://can_you_tell_this_is_a_video
之类的内容,并且仍然可以找到视频。
而且,即使您知道那是视频资源,也很难/不可能判断视频是否确实可以被播放器“播放”(支持的编码,文件格式等)。解决问题的更简单方法是尝试向播放器提供您从用户那里收到的任何URL。而且,如果玩家说该游戏不可玩,则继续下一步。
另一方面,如果您只需要确定URL所在的视频资源,那么直接的方法是使用HTTP客户端在URL上进行a HTTP HEAD request,然后检查{{3} },查看资源是否在the Content-Type header之间。
举个例子,如果您在https://sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4
上执行HEAD请求(可以对其进行测试the common video MIME types),则HTTP响应如下所示(服务器需要支持HEAD请求并提供正确的内容类型标头,通常应该如此):
HTTP/1.1 200 OK
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Accept-Ranges: bytes
Content-Length: 1055736
Content-Type: video/mp4
Date: Wed, 22 May 2019 20:51:28 GMT
Last-Modified: Fri, 17 Jun 2016 17:43:54 GMT
Server: Apache
使用此响应,现在您可以检查Content-Type
标头值-如您所见,在此示例中,资源的媒体类型为video/mp4
。
答案 1 :(得分:0)
您可以使用此方法解决此问题-
String fileType = getFileTypeFromURL("https://sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4");
if(fileType.equals("video")){
// Do your task here
}
private String getFileTypeFromURL(String url){
String[] splitedArray = url.split("\\.");
String lastValueOfArray = splitedArray[splitedArray.length-1];
if(lastValueOfArray.equals("mp4") || lastValueOfArray.equals("flv") || lastValueOfArray.equals("m4a") || lastValueOfArray.equals("3gp") || lastValueOfArray.equals("mkv")){
return "video";
}else if(lastValueOfArray.equals("mp3") || lastValueOfArray.equals("ogg")){
return "audio";
}else if(lastValueOfArray.equals("jpg") || lastValueOfArray.equals("png") || lastValueOfArray.equals("gif")){
return "photo";
}else{
return "";
}
}