我想在VideoView中播放vimeo视频,但这里有问题。
在桌面上下载视频的步骤如下(基于 ossguy.com 脚本):
- 获取第
vimeo.com/XXXClip_id
页(使用 67216430 进行测试) - 解析网页并获取签名和时间戳
- 以
player.vimeo.com/play_redirect?clip_id=XXXClip_id&sig=5e23c571c4032abd7507368237f43a2a&time=1378707147&quality=hd&&codecs=H264,VP8,VP6&type=moogaloop_local&embed_location=
的形式发送请求(SIG和时间在上面获得) - 上述请求将开始从网页下载,响应标头包含"位置"标头,其中包含 http://pdl.vimeocdn.com/70693/759/167687374.mp4?aksessionid=5e23c571c4032abd7507368237f43a2a&token=1378715414_ca8e14d352c93df0d33bbbadc3c888ac 形式的视频URL
我想在 android 中重复相同的步骤,因为从上一步获得的 URL 可以使用 VideoView 播放。但问题是当从步骤 3 发送相同的请求时,响应不包含"位置"标头。有什么想法吗?
如果有人需要答案,我发布了我的解决方案。下面是我的函数 httpRequest(),我在每一步中都使用它来获取页面和响应标头。我假设我在使用 DefaultHTTPClient 时遇到了重定向问题,因为"位置"标头将在步骤 3 中给出,实际上应该重定向到其中。
public URLConnection httpRequest(String path) {
HttpURLConnection conn = null;
try {
URL url = new URL(path);
conn= (HttpURLConnection) url.openConnection();
conn.setInstanceFollowRedirects(false); //you still need to handle redirect manully.
HttpURLConnection.setFollowRedirects(false);
conn.setReadTimeout(5000);
conn.addRequestProperty("Accept-Language", "en-US,en;q=0.8");
conn.addRequestProperty("User-Agent", "Mozilla/5.0");
conn.addRequestProperty("Referer", "google.com");
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return conn;
}
在安卓中
首先在你的项目中添加io.vov.vitamio.widget
包。
-
然后在
xml
布局文件中定义视频视图... -
然后在 java 文件中使用此代码。确保导入 vimeo 软件包中可用的软件包
videoView.setVideoURI(Uri.parse(path));
videoView.setMediaController(new MediaController(this));
videoView.requestFocus();
videoView.start();