如何在 android 中从远程 url 播放实时视频流?

Posted

技术标签:

【中文标题】如何在 android 中从远程 url 播放实时视频流?【英文标题】:How to play live video streaming from remote url in android? 【发布时间】:2012-03-31 15:37:15 【问题描述】:

我创建了一个在特定时间间隔触发通知服务的功能。通知可以是文本、图像或视频...

现在,对于视频,我先下载它然后播放它,这需要更多时间......所以有什么机制可以让我直接从远程 url 播放视频???

请帮帮我... 我迫切需要尽快得到答案...

在此先感谢........

看看我的代码 sn-ps ::

public void onCreate(Bundle savedInstanceState) 
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.notificationvideo);

    mVideoView = (VideoView) findViewById(R.id.video);
    //pd=ProgressDialog.show(this, "Loading...", "Please Wait...",true,false);
    playVideo();
    //pd.dismiss();

    img_back = (ImageView) findViewById(R.id.img_back); 
    img_back.setOnClickListener(new View.OnClickListener() 
               
        public void onClick(View v) 
        
                Intent int_back=new Intent(NotificationsVideoActivity.this,MyChannelsActivity.class);
                startActivity(int_back);
                finish();
                       
    );  


private void playVideo() 

    try 
         path = getIntent().getStringExtra("url");

        Log.v(TAG, "path: " + path);
        if (path == null || path.length() == 0) 
            Toast.makeText(NotificationsVideoActivity.this, "File URL/path is empty",Toast.LENGTH_LONG).show();

         
        else 
        
            // If the path has not changed, just start the media player
            if (path.equals(current) && mVideoView != null) 
            
                mVideoView.start();
                mVideoView.requestFocus();
                return;
            
            current = path;
            mVideoView.setVideoPath(getDataSource(path));
            mVideoView.start();
            mVideoView.requestFocus();

        
     
    catch (Exception e) 
    
        Log.e(TAG, "error: " + e.getMessage(), e);
        if (mVideoView != null) 
        
            mVideoView.stopPlayback();
        
    


private String getDataSource(String path) throws IOException

    if (!URLUtil.isNetworkUrl(path)) 
    
        return path;
     
    else 
    
        URL url = new URL(path);
        URLConnection cn = url.openConnection();
        cn.connect();
        InputStream stream = cn.getInputStream();
        if (stream == null)
            throw new RuntimeException("stream is null");
        File temp = File.createTempFile("mediaplayertmp", "mp4");
        temp.deleteOnExit();
        String tempPath = temp.getAbsolutePath();
        FileOutputStream out = new FileOutputStream(temp);
        byte buf[] = new byte[128];
        //byte buf[] = new byte[8192];

        do 
        
            int numread = stream.read(buf);
            if (numread <= 0)
                break;
            out.write(buf, 0, numread);
         while (true);

        try 
        
            stream.close();
        
        catch (IOException ex) 
        
            Log.e(TAG, "error: " + ex.getMessage(), ex);
        
        return tempPath;

    

【问题讨论】:

【参考方案1】:

试试这个 -

String path="http://www.ted.com/talks/download/video/8584/talk/761";
String path1="http://commonsware.com/misc/test2.3gp";

Uri uri=Uri.parse(path1);

VideoView video=(VideoView)findViewById(R.id.VideoView01);
video.setVideoURI(uri);
video.start();

【讨论】:

我已经尝试过了...我可以像这样增加缓冲区大小吗????对我有帮助吗?????byte buf[] = new byte[8192];【参考方案2】:

尝试在http://code.google.com/p/html5webview/downloads/list 给出的webview 和示例,完整的源代码在http://html5webview.googlecode.com/svn/trunk/ 作为参考并尝试你想要的

【讨论】:

【参考方案3】:
VideoView video = (VideoView) findViewById(R.id.video);
ProgressDialog mProgressDialog = new ProgressDialog(this);
            mProgressDialog.setMessage("Loading Video Please wait...");
            mProgressDialog.setIndeterminate(true);
            mProgressDialog.setCancelable(false);
            mProgressDialog.show();

            video.setMediaController(new MediaController(MainActivity.this));
            uri = Uri.parse("live streaming url");
            video.setVideoURI(uri);

video.setOnPreparedListener(new OnPreparedListener() 

            @Override
            public void onPrepared(MediaPlayer mp) 
                // TODO Auto-generated method stub


                video.start();
                mProgressDialog.dismiss();
            
        );

【讨论】:

以上是关于如何在 android 中从远程 url 播放实时视频流?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 url 在 android 中播放 gif?

如何使用远程 URL 在 Android 模拟器中播放 mp4 视频?

如何在具有单独位置 url 和资源 url 的 swift 中从服务器实时流式传输音频?

如何在 android 中从 react 本机应用程序播放 mov 视频?

android - 如何在我的音乐播放器中从文件管理器播放 mp3 文件?

如何通过 URL 的视频视图知道视频在 android VideoView 中启动的实时时间?