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

use*_*818 9 java android

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

  1. 从哪里可以找到播放板球流的链接?
  2. 这些类型的链接是什么?
  3. 是否有玩家可以播放此类视频?

目前,我已经实现了网页,但我正在寻找其他替代方案.

以下是我的代码:

    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;
    }
Run Code Online (Sandbox Code Playgroud)

Beh*_*nam 15

我将尝试回答您的问题,但是为了构建成功的流媒体应用程序,您需要学习许多基础知识.

1. From where I can found the links to play cricket streaming ?
Run Code Online (Sandbox Code Playgroud)

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

2. Which type of links are these ?
Run Code Online (Sandbox Code Playgroud)

如果你的意思是直播链接,有很多类型,但大多数是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 ?
Run Code Online (Sandbox Code Playgroud)

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

I)Android API:您可以在a MediaController,a MediaPlayer和a 的帮助下完成SurafceView.后两者也可以在称为的单位实体中获得VideoView.下面的答案中有一个代码,您可以使用它.但请注意两个要点:

Ia)使用MediaPlayer更难实现,但与之相比,为您提供更详细的控制VideoView.

Ib)如果您使用类似于以下答案的代码,请不要为网络流调用prepare().总是prepareAsync().并且总是在prepareAsync之前调用setAudioStreamType().否则,在进度条上搜索时,您将面临音频和视频之间的瞬态同步问题.

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

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

选择什么协议?

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

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

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

去参观本教程.在我看来,这是最完整的零英雄指南.


由于SO在视频流方面缺乏全面的帖子,也许我会根据需要扩展我的答案.


Luc*_*vac 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);
      }
}
Run Code Online (Sandbox Code Playgroud)