我想从 HttpResponse 对象播放视频内容。内容正在从流媒体服务器下载。
我的要求是向服务器创建一个 HTTP POST 请求。请求包含视频的 URL、用户的用户名和密码,用于身份验证。
我想知道我们如何创建 HTTP POST 请求并播放/下载视频。
请提供一些提示、步骤/代码以继续。
谢谢,
我想从 HttpResponse 对象播放视频内容。内容正在从流媒体服务器下载。
我的要求是向服务器创建一个 HTTP POST 请求。请求包含视频的 URL、用户的用户名和密码,用于身份验证。
我想知道我们如何创建 HTTP POST 请求并播放/下载视频。
请提供一些提示、步骤/代码以继续。
谢谢,
我不是 100% 确定,但我认为由于格式存储视频元数据的方式,您无法流式传输大部分视频。这就是为什么您必须转换您的视频文件,而不仅仅是以任何格式显示它们。有一些协议可以封装此元数据并允许您流式传输任何视频(这就是 youtube mobile 所做的)。你应该看看 RTSP:http ://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol
如果您在 videoView 中使用 rtsp 链接,它应该可以完美地流式传输视频。关键是您的问题是服务器而不是客户端相关。
作为练习,您可以从 m.youtube.com 获取一个 rtsp 链接,然后使用 setVideoPath 传递给 videoView,它应该可以工作。
如果无法更改服务器实现,那么您可能是他们,我猜您的解决方案是:
1)自己下载和解码视频,您必须处理所有元数据并确保视频可以正常工作。从理论上讲,您可以为 android 编译 ffmpeg 来帮助您解决这个问题,但我无法在启用网络选项的情况下将其编译为 android。这是很多工作。
2) 编写您自己的 RTSP 或其他流协议的实现。在线程中下载视频,然后他们在设备中创建一个本地服务器以将该视频文件流式传输到 videoView 实例。我实际上有这个在一个应用程序上工作。Android 不支持客户端服务器使用的特定协议,我必须让它工作。我花了整整一个月的时间来做这件事。我不能发布任何示例代码,因为它都是客户的,但如果你有兴趣,我可以给你一些更多的信息。
无论哪种方式,如果您无法更改视频的服务器/格式,那么您应该为大量工作做好准备。
检查以下代码以在视频视图中显示 url http 或 rtsp。
现在在调用你的videoview之前..只要得到
public class VideoViewDemo extends Activity {
/**
* TODO: Set the path variable to a streaming video URL or a local media
* file path.
*/
private String path = "";
private VideoView mVideoView;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.videoview);
mVideoView = (VideoView) findViewById(R.id.surface_view);
if (path == "") {
// Tell the user to provide a media file URL/path.
Toast.makeText(
VideoViewDemo.this,
"Please edit VideoViewDemo Activity, and set path"
+ " variable to your media file URL/path",
Toast.LENGTH_LONG).show();
} else {
/*
* Alternatively,for streaming media you can use
* mVideoView.setVideoURI(Uri.parse(URLstring));
*/
mVideoView.setVideoPath(path);
mVideoView.setMediaController(new MediaController(this));
mVideoView.requestFocus();
}
}
}
现在,由于您的要求不同,首先向您的服务器发出 http post 请求...获取所需的输入流..将该流作为 mp4 写入本地文件系统。那么你可以使用下面的代码来播放内容
// this can be path on file system
String path="/adf.mp4" ;
public void playVideo() {
MediaController mediaController = new MediaController(this);
mediaController.setMediaPlayer(videoView);
videoView.setVideoPath(path);
videoView.setMediaController(mediaController);
videoView.requestFocus();
videoView.start();
mediaController.show();
我试过了,它对我有用:D no rtsp no nothing,只是一个带有 mp4 视频的 url,它播放了!
public class VideoActivity extends Activity {
public static final String KEY = "video_id";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fotogaleria_video);
Intent i = getIntent();
if(i.hasExtra(KEY)){
String url = "https://sites.google.com/site/tempmp4download/bnm.mp4";
VideoView vv = (VideoView)findViewById(R.id.fotogaleria_video);
// vv.setVideoPath(url);
vv.setVideoURI(Uri.parse(url));
vv.setMediaController(new MediaController(this));
vv.requestFocus();
vv.start();
}
}
}
查看以下链接
http://www.softwarepassion.com/android-series-get-post-and-multipart-post-requests/
对于流媒体,我认为您必须下载完整文件,然后在视频播放器中显示。