来自网址的Android视频流

时间:2013-07-01 14:42:55

标签: android video-streaming

我使用以下代码从网址播放视频。它工作正常,除了它首先下载视频,然后播放该视频

  Uri uri = Uri.parse(URL);
  video.setVideoURI(uri);
  video.start();

但我想要直播视频,而不是下载然后播放

4 个答案:

答案 0 :(得分:3)

流式传输有一些要求。

该文件可能无法“正确”编码

http://developer.android.com/guide/appendix/media-formats.html

  

对于通过HTTP或RTSP流式传输的视频内容,还有其他要求:

     
      
  • 对于3GPP和MPEG-4容器,moov原子必须位于任何mdat个原子之前,但必须接替ftyp原子。
  •   
  • 对于3GPP,MPEG-4和WebM容器,对应于相同时间偏移的音频和视频样本可以相隔不超过500KB。为了最大限度地减少音频/视频漂移,请考虑以较小的块大小交错音频和视频。
  •   

您可能使用不支持它的旧版Android

HTTP渐进式流式传输仅在2.2中添加,HTTPS仅支持3.0+,实时流式传输仅支持更高版本。

答案 1 :(得分:3)

我在YouTube视频流方面工作,没有下载视频。 这仅适用于您播放YouTube视频的情况。

您必须使用YouTube API并使用它,您可以轻松管理您的任务。

您必须启用YouTube服务,并使用Developer Key即可访问YouTube API。

How to use YouTube API ?您可以Find Here示例代码。

在该示例示例中,我使用了

PlayerViewDemoActivity.java& YouTubeFailureRecoveryActivity.java和XMl根据需要查看。

播放视频

public class PlayerViewDemoActivity extends YouTubeFailureRecoveryActivity
{
    String  youtube_id = "_UWXqFBF86U";

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.playerview_demo);

        YouTubePlayerView youTubeView = (YouTubePlayerView) findViewById(R.id.youtube_view); // Replace your developer key
        youTubeView.initialize(DeveloperKey.DEVELOPER_KEY, this);

    }

    @Override
    public void onInitializationSuccess(YouTubePlayer.Provider provider,
            YouTubePlayer player, boolean wasRestored)
    {
        if (!wasRestored)
        {
            player.cueVideo(youtube_id);
        }
    }

    @Override
    protected YouTubePlayer.Provider getYouTubePlayerProvider()
    {
        return (YouTubePlayerView) findViewById(R.id.youtube_view);
    }

}

希望这会对您有所帮助,如果您有任何疑问,请告诉我。

答案 2 :(得分:0)

使用像这样:

Uri uri = Uri.parse(URL); //Declare your url here.

VideoView mVideoView  = (VideoView)findViewById(R.id.videoview)
mVideoView.setMediaController(new MediaController(this));       
mVideoView.setVideoURI(uri);
mVideoView.requestFocus();
mVideoView.start();

另一种方法:

  String LINK = "type_here_the_link";
  VideoView mVideoView  = (VideoView) findViewById(R.id.videoview);
  MediaController mc = new MediaController(this);
  mc.setAnchorView(videoView);
  mc.setMediaPlayer(videoView);
  Uri video = Uri.parse(LINK);
  mVideoView.setMediaController(mc);
  mVideoView.setVideoURI(video);
  mVideoView.start();

如果您收到此错误Couldn't open file on client side, trying server side Error in Android。还有Refer this。 希望这会给你一些解决方案。

答案 3 :(得分:0)

For showing buffering you have to put progressbar of ProgressDialog ,... here i post progressDialog for buffering ... 

pDialog = new ProgressDialog(this);

    // Set progressbar message
    pDialog.setMessage("Buffering...");
    pDialog.setIndeterminate(false);
    pDialog.setCancelable(false);
    // Show progressbar
    pDialog.show();

    try {
        // Start the MediaController
        MediaController mediacontroller = new MediaController(this);
        mediacontroller.setAnchorView(mVideoView);      

        Uri videoUri = Uri.parse(videoUrl);
        mVideoView.setMediaController(mediacontroller);
        mVideoView.setVideoURI(videoUri);

    } catch (Exception e) {

        e.printStackTrace();
    }

    mVideoView.requestFocus();
    mVideoView.setOnPreparedListener(new OnPreparedListener() {
        // Close the progress bar and play the video
        public void onPrepared(MediaPlayer mp) {
            pDialog.dismiss();
            mVideoView.start();
        }
    });
    mVideoView.setOnCompletionListener(new OnCompletionListener() {

        public void onCompletion(MediaPlayer mp) {
            if (pDialog.isShowing()) {
                pDialog.dismiss();
            }
            finish();               
        }
    });