2021-06-24 TV直播 Mediaplayer播放m3u8的demo

直接上代码

import androidx.appcompat.app.AppCompatActivity;

import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

import java.io.IOException;

public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback,
MediaPlayer.OnCompletionListener, MediaPlayer.OnVideoSizeChangedListener,
MediaPlayer.OnInfoListener, MediaPlayer.OnErrorListener,
MediaPlayer.OnPreparedListener, MediaPlayer.OnSeekCompleteListener {

SurfaceView surfaceView;
MediaPlayer mediaPlayer;

// String path=“http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8”; //中央一台
// String path=“http://ivi.bupt.edu.cn/hls/cctv5phd.m3u8”; //中央五台
String path=“http://ivi.bupt.edu.cn/hls/cctv6hd.m3u8”;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    surfaceView=findViewById(R.id.sfView);
    surfaceView.setZOrderOnTop(false);
    surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    surfaceView.getHolder().addCallback(this);

// startPlay();

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            startPlay();
        }
    },5000);
}

private void startPlay(){
    if (mediaPlayer==null){
        mediaPlayer=new MediaPlayer();
        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mediaPlayer.setOnCompletionListener(MainActivity.this);
        mediaPlayer.setOnVideoSizeChangedListener(MainActivity.this);
        mediaPlayer.setOnInfoListener(MainActivity.this);
        mediaPlayer.setOnErrorListener(MainActivity.this);
        mediaPlayer.setOnPreparedListener(MainActivity.this);
        mediaPlayer.setOnSeekCompleteListener(MainActivity.this);
    }

    try {
        mediaPlayer.setDataSource(path);
        mediaPlayer.setDisplay(surfaceView.getHolder());
        mediaPlayer.prepare();
        Log.e("tiwolf", "初始化: 设备准备好了" );

// mediaPlayer.start();
} catch (IOException e) {
e.printStackTrace();
}

}

@Override
public void surfaceCreated(SurfaceHolder holder) {
    Log.e("tiwolf", "surfaceCreated: 设备准备好了" );

// startPlay();
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {

}

@Override
public void onCompletion(MediaPlayer mp) {

}

@Override
public boolean onError(MediaPlayer mp, int what, int extra) {

    return false;
}

@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {

    return false;
}

@Override
public void onPrepared(MediaPlayer mp) {
    int width=mp.getVideoWidth();
    int height=mp.getVideoHeight();
    if (width!=0 && height!=0){

        int playWidth=surfaceView.getWidth();
        int playHeight=surfaceView.getHeight();
        Log.e("tiwolf", "onPrepared: 设备准备好了"+playWidth+";"+playHeight );
        surfaceView.getHolder().setFixedSize(playWidth,playHeight);
        mp.start();
    }else{
        mediaPlayer.start();
        Log.e("tiwolf", "onPrepared: 设备准备好了,有宽高"+width+";"+height );
    }



}

@Override
public void onSeekComplete(MediaPlayer mp) {

}

@Override
public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tiwolf_li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值