【问题标题】:Android Video streaming from HttpResponse object来自 HttpResponse 对象的 Android 视频流
【发布时间】:2012-12-27 16:44:54
【问题描述】:

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

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

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

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

谢谢,

【问题讨论】:

    标签: android video-streaming android-video-player


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,renam.antunes。目前服务器使用 Http 流媒体,检索到的视频文件为 .mp4 格式。其他支持流式传输的链接(如pocketjourney.com/downloads/pj/video/famous.3gp)在 Android 客户端应用程序中运行良好。您能否提供有关启用流式传输的服务器所需的服务器配置的更多详细信息?
    • 这里:stackoverflow.com/questions/1613737/…。 Android 3.0 应该可以与 HTTP Live Streaming 一起使用,从 2.2 开始你有 flash 10.1,所以我想你可以编写一个基于 flash 的应用程序并使用 RTMP/Flash HTTP Streaming。不过不知道具体是怎么回事。
    【解决方案2】:

    检查以下代码以在视频视图中显示 url http 或 rtsp。

    现在在调用您的视频视图之前 .. 获取

    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();
    

    【讨论】:

    • 您好 Anil,上面的代码用于下载视频并将其保存在文件系统中并进行播放。但我的要求是直接从服务器播放(视频流)。
    • hi adarsh... 您可以使用视频视图 setVideoPath 方法直接流式传输 rtsp 视频。 ...然后在这种情况下,它将发出获取请求。但就您的问题而言,您需要在发布请求中发送用户名和密码..所以如果您还没有尝试过,有一种解决方法..单独发出一个 http 发布请求并获取身份验证令牌..通过此身份验证令牌以及用于下载视频并使用视频视图流式传输的 URL
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      【讨论】:

      • 谢谢阿什瓦尼。我想知道从响应中获取实时流内容并在 Mediaplayer 或 VideoView 中播放的步骤/代码。 :(
      • "对于流媒体,我认为您必须下载完整文件,然后在视频播放器中显示" 我想如果这样就不需要下载视频来流媒体,那么直播如何流媒体作品?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2012-08-23
      • 2017-04-23
      • 1970-01-01
      • 2011-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多