如何在Android应用程序中播放实时流媒体?

时间:2014-03-12 07:09:58

标签: java android

我想申请板球直播。 我想知道以下事情:

  1. 从哪里可以找到播放板球流的链接?
  2. 这些类型的链接是什么?
  3. 有没有玩家可以播放此类视频?
  4. 目前,我已经实施了网页,但我正在寻找其他替代方案。

    以下是我的代码:

        link1 = (RelativeLayout) findViewById(R.id.link1);
        link2 = (RelativeLayout) findViewById(R.id.link2);
        link3 = (RelativeLayout) findViewById(R.id.link3);
        link4 = (RelativeLayout) findViewById(R.id.link4);
        link5 = (RelativeLayout) findViewById(R.id.link5);
        link6 = (RelativeLayout) findViewById(R.id.link6);
        link7 = (RelativeLayout) findViewById(R.id.link7);
        link1.setOnClickListener(this);
        link2.setOnClickListener(this);
        link3.setOnClickListener(this);
        link4.setOnClickListener(this);
        link5.setOnClickListener(this);
        link6.setOnClickListener(this);
        link7.setOnClickListener(this);
    }
    
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.link1:
             linkFunction("http://changevssame.blogspot.com/2014/03/willow-cricket-hd-live-streaming.html");
    
            break;
        case R.id.link2:
            linkFunction("http://changevssame.blogspot.com/2014/03/foxsports-live-streaming.html");
            break;
        case R.id.link3:
            linkFunction("http://changevssame.blogspot.com/2014/03/sky-sports-live-streaming.html");
            break;
        case R.id.link4:
            linkFunction("http://changevssame.blogspot.com/2014/03/ten-sports-live-streaming.html");
            break;
        case R.id.link5:
            linkFunction("http://changevssame.blogspot.com/2014/03/star-cricket.html");
            break;
        case R.id.link6:
            linkFunction("http://changevssame.blogspot.com/2014/03/icc-t20-world-cup-2014-live-streaming.html");
            break;
        case R.id.link7:
            linkFunction("http://changevssame.blogspot.com/2014/03/ptv-sports.html");
            break;
    
        default:
            break;
        }
    

3 个答案:

答案 0 :(得分:14)

我会尽力回答你的问题,但是为了建立一个成功的流媒体应用程序,你需要学习很多基础知识。

1. From where I can found the links to play cricket streaming ?

不知道,但无论如何这不是SO标准问题。

2. Which type of links are these ?

如果您的意思是实时流媒体链接,则有许多类型,但主要是HLS或RTSP。 HLS链接是简单的HTTP链接,通常以“.m3u8”后缀结尾。 (例如“http://somewebsite.com/streams/hls_stream_video.m3u8”)

另一方面,RTSP链接的格式如下:“rtsp://somewebsite.com/streams/an_rtsp_stream.mp4”

3. Is there any player to play this type of videos ?

绝对。你可以通过任何方式这样做。 我不确定“玩家”是指你的意思是Android API播放器还是第三方播放器应用程序。所以我会为你和未来的乘客报道两种情况。

I)Android API:您可以在MediaControllerMediaPlayerSurafceView的帮助下完成此操作。后两者也可以在称为VideoView的单位实体中使用。 下面的答案中有一个代码,您可以使用它。但请注意两个要点:

I-a)使用MediaPlayer更难实现,但与VideoView相比,可以提供更详细的控制。

I-b)如果您使用类似于以下答案的代码从不为网络流调用prepare()。始终 prepareAsync()。并且始终在prepareAsync之前调用 setAudioStreamType()。否则,当您在进度条上搜索时,您将在音频和视频之间遇到短暂的同步问题。

II)播放器应用:我已经使用MXPlayer进行了流媒体播放,效果很好。

在开始之前需要考虑一些因素:

选择什么协议?

假设您的目标是Android,我建议您将选择范围缩小到HLS和RTSP。 在做出决定之前,你需要好好研究它们。但要给你一个提示。在较低带宽下运行时,首选HLS。

还有许多其他主题,例如是否选择 UDP / TCP IP多播/广播等等...

想要以编程方式深入研究编码和学习视频流吗?

去访问this tutorial。在我看来,这是最完整的零英雄指南。


由于SO在视频流上缺乏完整的帖子,我可能会根据需要扩展我的答案。

答案 1 :(得分:1)

请点击此链接:

Android Video Streaming

以下代码适用于我:

public static void getVideoFromHttp(String urlPath) {

try {
// Start the MediaController
MediaController mediacontroller = new MediaController(mContext);
mediacontroller.setAnchorView(mVideoview);
// Get the URL from String VideoURL
Uri mVideo = Uri.parse(urlPath);
mVideoview.setMediaController(mediacontroller);
mVideoview.setVideoURI(mVideo);

} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();

}

mVideoview.requestFocus();
mVideoview.setOnPreparedListener(new OnPreparedListener() {
// Close the progress bar and play the video
public void onPrepared(MediaPlayer mp) {
mVideoview.start();

}
});

mVideoview.setOnCompletionListener(new OnCompletionListener() {

public void onCompletion(MediaPlayer mp) {

}
});

}

答案 2 :(得分:0)

试试这个:

private void playLive(String path){

   try {
        mMediaPlayer = new MediaPlayer();
        mMediaPlayer.setDataSource(path);
        mMediaPlayer.setDisplay(holder);
        mMediaPlayer.prepare();
        mMediaPlayer.setOnBufferingUpdateListener(this);
        mMediaPlayer.setOnCompletionListener(this);
        mMediaPlayer.setOnPreparedListener(this);
        mMediaPlayer.setOnVideoSizeChangedListener(this);
        mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
      } catch (Exception e) {
        Log.e(TAG, "error: " + e.getMessage(), e);
      }
}