Gui*_*rme 5 php video redirect android media-player
我工作的公司正在开发一个Android应用程序,它可以从网络上的URL播放视频文件.视频URL是PHP脚本的参数,可以正确编码并重定向到编码视频,如下所示:
header('Content-Type: video/'.$format);
header('Location:'.$output_video);
Run Code Online (Sandbox Code Playgroud)
$output_video编码视频的URL 在哪里(如果我们在浏览器中使用此URL,则它可以工作)并且$format是视频格式.
但是当我尝试使用流模式从API演示中执行MediaPlayerDemo_Video时,我收到如下错误:
MediaPlayer Command PLAYER INIT completed with an error or info PVMFErrCorrupt
MediaPlayer error (1. -10)
MediaPlayer Error (1.-10)
Run Code Online (Sandbox Code Playgroud)
如果我们在PHP脚本中对URL和格式进行硬编码,它也无法解决,但会出现不同的错误:
MediaPlayer info/warning (1. 28)
MediaPlayer Info (1 .28)
Run Code Online (Sandbox Code Playgroud)
有没有人知道如何解决这个问题?
提前致谢!
我遇到了同样的问题.事实证明,Android MediaPlayer不会处理重定向,所以你必须找到php脚本重定向你的位置并将其作为Jeorgesys解释的rtsp URL.
我能够通过执行HttpGet并且不遵循任何重定向来解决,然后从'Location'Http标头中拉出rtsp url.如果你有多个重定向,你会遇到一些麻烦,但幸运的是,在我的情况下,我只需要担心一次重定向.
public static String resolveRedirect(String url) throws ClientProtocolException, IOException {
HttpParams httpParameters = new BasicHttpParams();
HttpClientParams.setRedirecting(httpParameters, false);
HttpClient httpClient = new DefaultHttpClient(httpParameters);
HttpGet httpget = new HttpGet(url);
HttpContext context = new BasicHttpContext();
HttpResponse response = httpClient.execute(httpget, context);
// If we didn't get a '302 Found' we aren't being redirected.
if (response.getStatusLine().getStatusCode() != HttpStatus.SC_MOVED_TEMPORARILY)
throw new IOException(response.getStatusLine().toString());
Header loc[] = response.getHeaders("Location");
return loc.length > 0 ? loc[0].getValue() : null;
}
Run Code Online (Sandbox Code Playgroud)
响应是您尝试在 MediaPlayer 中流式传输什么文件,您的 URL 必须类似于 ::
rtsp://v1.cache5.c.youtube.com/CjYLENy73wIaLQkUvSkxA_7UKxMYESARFEIJbXYtZ29vZ2xlSARSBXdhdGNoYIPXxZHky7m5Rgw=/0/0/0/video.3gp
(尝试使用此网址)
使用rtsp协议和.3gp视频文件以及android 支持的正确编解码器。