4

我想从 HttpResponse 对象播放视频内容。内容正在从流媒体服务器下载。

我的要求是向服务器创建一个 HTTP POST 请求。请求包含视频的 URL、用户的用户名和密码,用于身份验证。

我想知道我们如何创建 HTTP POST 请求并播放/下载视频。

请提供一些提示、步骤/代码以继续。

谢谢,

4

4 回答 4

5

我不是 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 不支持客户端服务器使用的特定协议,我必须让它工作。我花了整整一个月的时间来做这件事。我不能发布任何示例代码,因为它都是客户的,但如果你有兴趣,我可以给你一些更多的信息。

无论哪种方式,如果您无法更改视频的服务器/格式,那么您应该为大量工作做好准备。

于 2011-06-29T03:01:31.647 回答
4

检查以下代码以在视频视图中显示 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();
于 2011-06-27T14:06:24.250 回答
2

我试过了,它对我有用: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();

        }

    }
}
于 2012-04-11T05:23:07.337 回答
1

查看以下链接

http://www.softwarepassion.com/android-series-get-post-and-multipart-post-requests/

http://w3mentor.com/learn/java/android-development/android-http-services/performa-a-http-post-request-with-the-httpclient-in-android/

对于流媒体,我认为您必须下载完整文件,然后在视频播放器中显示。

于 2011-06-21T10:33:09.273 回答