基于IJK打造自己的播放器(一) 简单集成使用ijkPlayer播放hls视频

一 前言

   ijk播放器的背景我就不多说了。随便一搜就有,我想说的是,这篇文章只是教大家适合使用ijkplayer。

这里适合新手。简单说一下我们常用的播放视频。一般来说,播放视频分成视频显示控件、视频播放(解码)这两块。

视频显示控件主要有:

  1.SurfaceView   surfaceview+原生mediaplayer 是比较通俗的播放视频组合。ijkplayer 提供的就是一个mediaplayer 。

  2.TextureView

 至于他们的子类,glsurfaceview之类就不多描述。他们之间的差异,有兴趣的可以百度下。

比较主流的播放器的有:

  1.手机原生的mediaplayer.

  2.谷歌出的EXOplayer。前文有使用描述,有兴趣可以去看

  3.B站的IJKplayer.

  4.各大公司自己写的。

二、集成步骤

   样子如下:

   基于IJK打造自己的播放器(一) 简单集成使用ijkPlayer播放hls视频_第1张图片

 不知道什么原因 我小米自带的播放器无法播放这个直播流,所以两个流不一样。你们可以改成一样的测试下。   

我们这里不涉及自己编译 so。仅仅是集成能够测试播放视频。给大家做个演示

 1、直接关联

implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'
implementation 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8'

 简单使用,就是这么简单,这里B站已经帮编译好了。但是缺点也蛮多的。

 1、不支持https流。

 2、不支持rtsp/rtmp流。

 还有其他的需要各位自己去测。

2.简单使用

   1.布局文件

  activity_main.xml:




    
  

  我们使用surfaceview来作为显示控件。下面是videoview来跟原生播放器作一个对比。

 2.Java文件

package com.test.ijkdemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.VideoView;

import java.io.IOException;

import tv.danmaku.ijk.media.player.IMediaPlayer;
import tv.danmaku.ijk.media.player.IjkMediaPlayer;

/**
 * play video with ijk&native
 */
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback {

    private VideoView vv_view;
    private SurfaceView sv_view;
    private IjkMediaPlayer ijkMediaPlayer;
    private SurfaceHolder holder;
    String testURl="https://video-dev.github.io/streams/x36xhzz/x36xhzz.m3u8";
    String testURl1="http://weblive.hebtv.com/live/hbgg_bq/index.m3u8";
     String testURl2="https://video-dev.github.io/streams/x36xhzz/x36xhzz.m3u8";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initData();
    }

    private void initData() {
        ijkMediaPlayer = new IjkMediaPlayer();
        holder = sv_view.getHolder();
        holder.addCallback(this);
        try {
            ijkMediaPlayer.setDataSource(testURl1);
        } catch (IOException e) {
            e.printStackTrace();
        }
        ijkMediaPlayer.setOnPreparedListener(new OnprePareListener());
        ijkMediaPlayer.prepareAsync();

        //使用videoview+mediaplayer播放
       vv_view.setVideoPath(testURl2);
        vv_view.start();
    }

    private void initView() {
        sv_view = findViewById(R.id.sv_view);
        vv_view = findViewById(R.id.vv_view);
    }
    class OnprePareListener implements IMediaPlayer.OnPreparedListener {

        @Override
        public void onPrepared(IMediaPlayer iMediaPlayer) {
            ijkMediaPlayer.start();
        }
    }
    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        this.holder=holder;
        ijkMediaPlayer.setDisplay(holder);
    }

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

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {

    }
}

 3.权限

 

 

  基本使用就到这里了,希望对新手有用。

  

你可能感兴趣的:(安卓)