b站IJKPlayer试用问题

本文分享了IJKPlayer在Android平台上的移植过程及常见问题解决方法,包括库文件的获取与集成、版本冲突处理等,并提供了一段简单的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    So包不是自己编译的,编译过程中出现了各种问题(没有linux/pre_event头文件和最开始编译FFmpeg一样的问题,后来看了下就是在编译FFMpeg的时候报了这个错误,因为之前编译FFmpeg的时候就在google上查到是因为版本太新(准确说是编译脚本.sh更不上版本的问题)就手动将里面的ffmpeg换位旧一点的版本,这个错误没了,但是还有其他错误),就放弃了自己编译,选择使用别人编译好了的,链接为:链接:https://pan.baidu.com/s/1w4H0aPrmIfBnzuRNIW-UcA 密码:5hv2。解决了这个问题就开始想怎么把这个放到AS中去,找了很多很多,但是有用的文章几乎没有,最后用的是这个https://blog.youkuaiyun.com/hisonedumobile/article/details/53119134#reply#reply的,很感谢这位博主,写的很详细,除了这个我没有看到有这么详细的了,一定注意tool文件夹要放进去,不然会有个报错apply from: new File(rootProject.projectDir, "tools/gradle-on-demand.gradle"); 然后就是在使用的时候的问题了,主要就是IJK里面使用的'com.android.support:appcompat-v7:23.1.0'我这个时间用的是26版本的,这个要根据自己的更改,否则会导致XML布局文件异常,去网上查各种方法都不行,有说该style的主题的,有让改版本的都不行,后来自己去看了看有红色波浪线的那,

发现说的是混合的版本会导致混乱mixed.....lead to crash,然后就去example里面的gradle文件里面改一下就好了,下面两个里面没有什么要改的了。

再此之外还有可能遇到两个@@那里报错,删掉一个也没用,他会自己加上来,解决办法是:在工程根目录下的

gradle.properties里面加上一句android.enableAapt2=false,至于原因,我也不是太清楚。

最后附上我自己移植用的一个算是方便一点的、必要的几个文件压缩包,链接:https://pan.baidu.com/s/1crJITy2UuMDwaXqsIu3N8w 密码:ctyl。使用方法为分别将这三个包Import Module进去,然后在File->projectStructure->app->dependencies->Module dependency里面添加这三个,我这里可以看到最下面有了。

再把那个txt文件复制到build.gradle文件中去,我这里就会出现两个@@那里报错,然后按照上述方法添加一句话,就没有什么要做的了,可以正常使用IJKplayer了。

    但是对于我们来说移植是要用的啊,不是移植了就完事了的,接下来就是简单使用这个来拉流、播放视频等等,由于水平限制,这里就很简单很简单的使用了下,这里有一些直播地址,可以试下

rtmp://live.hkstv.hk.lxdns.com/live/hks

http://live-cdn.kksmg.com/channels/tvie/ylpd/flv:sd/live

    XML我就不拿出来了,就是一个surfaceview,是一般的surfaceview,不是IJK里面的,我这里叫SV,然后就是activity了:

public class MainActivity extends AppCompatActivity{
    private SurfaceView SV;
    final String Path = "rtmp://live.hkstv.hk.lxdns.com/live/hks";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        }
        setContentView(R.layout.activity_main);
        SV = findViewById(R.id.SV);
        IJKVD MyPlay = new IJKVD(SV,Path);
       // MyPlay.Start_Play();
    }

}rtmp://live.hkstv.hk.lxdns.com/live/hks";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        }
        setContentView(R.layout.activity_main);
        SV = findViewById(R.id.SV);
        IJKVD MyPlay = new IJKVD(SV,Path);
       // MyPlay.Start_Play();
    }

}

为了好用,IJKVD是我自己封装了一个类:

public class IJKVD implements SurfaceHolder.Callback{
    IjkMediaPlayer IJKMP;
    MediaInfo  MI;
    public IJKVD(SurfaceView SV,String Path){

        IjkMediaPlayer.loadLibrariesOnce(null);
        IjkMediaPlayer.native_profileBegin("libijkplayer.so");
        SV.getHolder().addCallback(this);
        IJKMP = new IjkMediaPlayer();
        MI = new MediaInfo();
        try {
            IJKMP.setDataSource(Path);
        } catch (IOException e) {
            e.printStackTrace();
        }
        IJKMP.prepareAsync();
        IJKMP.start();
        while(MI.mVideoDecoder==null)
        MI = IJKMP.getMediaInfo();
        SV.setLayoutParams(new ConstraintLayout.LayoutParams(MI.mMeta.mVideoStream.mWidth,MI.mMeta.mVideoStream.mHeight));

    }
    //开始播放
    public void Start_Play(){
        IJKMP.start();
        MI = IJKMP.getMediaInfo();

    }

    //暂停播放
    public void Pause_Play(){

    }

    //停止播放,并释放资源
    public void Stop_Play(){

    }


    @Override
    public void surfaceCreated(SurfaceHolder surfaceHolder) {
        IJKMP.setDisplay(surfaceHolder);
    }

    @Override
    public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder surfaceHolder) {

    }
}

    然后就可以显示那个电视的直播啦!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值