侧边栏壁纸
博主头像
Z同学博主等级

工作磨平激情前,坚持技术的热忱。 欢迎光临Z同学的技术小站。 分享最新的互联网知识。

  • 累计撰写 274 篇文章
  • 累计创建 55 个标签
  • 累计收到 74 条评论

ijkplayer SDK k0.8.8 编译 rtsp播放协议

Z同学
2022-02-24 / 0 评论 / 2 点赞 / 158 阅读 / 1,538 字
温馨提示:
本文最后更新于 2022-02-24,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

前言

原先编译完毕后的ijkplayer已经满足播放需求了(ijkPlayer k0.8.8版本默认不支持https协议,编译支持https的libijkffmpeg.so 库 (zinyan.com)),但是之后视频源又提供了个rtsp作为备选链接。

让其他链接失效的时候,切换到rtsp上进行播放。然后我发现自己编译的库没有rtsp协议,播放的时候提示Protocol not foundE/tv.danmaku.ijk.media.player.IjkMediaPlayer: Error (-10000,0)

所以打算先给开启一下rtsp协议。

从网上查询到的,配置很多还要改代码。也太复杂了。所以打算先简单开启一下协议,看看能不能支持播放的需求。

1. 修改module.sh 文件支持rtp和rtsp

访问:ijkplayer/config/module.sh 文件,添加下面两个配置

export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=rtsp"  //这个需要我们自己输入

export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=rtp"  //这个只需要我们将disable 改为enable 

然后执行编译

~/ijkplayer/android/contrib$ ./compile-ffmpeg.sh clean  //清理原有的
~/ijkplayer/android/contrib$ ./compile-ffmpeg.sh all    //编译最新的

编译输出的日志中可以看到

image-20220224103746456

image-20220224103703296

也就是我们的两个配置生效了。

然后再编译./compile-ijk.sh all 得到编译后的so文件。

2. 验证rtsp播放

我们将编译后的so文件拷贝到项目中直接使用。从网络上找到一个rtsp可播放的链接

rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov

验证效果是能够进行播放

image-20220224104547351

也就是说,我们配置的ffmpeg支持协议是正确的。

但是播放速度受影响:播放速度貌似有点卡顿。而且有时候会出现:Please fix your application to end transactions in progress properly and to 错误,然后界面停止播放。

有方案说要执行丢帧处理,才会播放速度提高。ijkplayer丢帧的处理方案 - 简书 (jianshu.com)。但是改动较大,同时由于对于底层代码的不熟悉,暂时没有敢动手。

我的最终解决方法是添加下面两个配置:

ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "packet-buffering", 0);  //关键是这个
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "fflags", "nobuffer");   //关键是这个

可以达到流畅的rtsp播放了。

image-20220224111129471

总结

本篇最后编译的so文件并没有其他小伙伴编译的库那么大。也不知道为什么它们有些人会编译的特别大。

本次编译尝试结果:

1.开放rtprtsp

2.初始化ijkMediaPlayer 的时候,添加buffer配置项。

3.实现rtsp播放。

如果想要我编译好的so库,可以关注公众号留言:ijkplayer 获取哦。

可以通过ijkplayer (zinyan.com) 看到更多关于ijkplayer 的内容。

2

评论区