ijkplayer遇到的问题合集

最有用的操作须知:https://github.com/bilibili/ijkplayer

问题

问题一:./compile-ffmpeg.sh提示 error: ‘y0000000’ undeclared (first use in this function)

原因:termbits.h里面定义了#B0 0000000,所以ffmpeg里面的B0就会变成000000.
解决方法一:将ffmpeg里面所有的B0改成小写
解决方法二:将系统文件里面的#B0注释掉之后再编译
目前使用方法一,编译和使用正常,暂时没看到其他问题。具体改了
\ijkplayer-master\android\contrib\ffmpeg-arm64\libavcodec的opus_pvq.c和hevc_mvs.c,将B0替换成b0
参考:
http://alientechlab.com/how-to-build-ffmpeg-for-android/
https://www.cnblogs.com/bbqzsl/p/7851356.html

问题二:修改ijkplayer的源码后重新编译没有更改成功的感觉

原因:为了缩短编译时间,编译的时候没有编译全版本,是指定了特殊版本来编译的。具体指令:

./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
cd ..
./compile-ijk.sh arm64

问题就出在最后一句,arm64。确实成功编译了arm64版本,但我是在安卓上进行测试,安卓通用版本是armv7a,前面编译的时候会有提示可以支持的版本。

FF_ALL_ARCHS = armv5 armv7a arm64 x86 x86_64
FF_ACT_ARCHS = armv5 armv7a arm64 x86 x86_64

解决方法:以后不熟系的情况下还是全编译妥当,不然浪费调试时间。另外编译的时候最好增加一些日志,通过日志判断是否真的修改成功,另外可以看app调用的so包的修改时间得知。
编译后的so包路径:
在这里插入图片描述
例程实际调用so包的路径:
例程实际调用so包的路径
从两张图片可以看出我弄错了so包的版本,安卓调用的是armv7a,我编译的是arm64,so包的更新时间也不是一致的。正确的情况下,ijkplayer-example会复制对应版本的so包到当前目录下。
另外,写日志判断的话,可以加在ff_play.c文件read_thread函数下,下面两种形式的日志都能显示。

/* this thread gets the stream from the disk or the network */
static int read_thread(void *arg)
{
	av_log(NULL, AV_LOG_ERROR, "test.\n");
	ALOGI("test ALOGI");

问题三:使用module-default.sh编译下,./compile-ffmpeg.sh 后提示:fallfatal error: linux/perf_event.h: No such file or directory

在这里插入图片描述
原因:linux/perf_event.h是linux平台的效能优化工具,有些Linux没有,禁用即可,没有影响。在module-lite.sh里面已经禁用了。
解决方法:在ijkplayer-master\config\module-default.sh里加入

export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-linux-perf"

然后再次执行前面的操作

cd config
rm module.sh
ln -s module-default.sh module.sh
cd android/contrib
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
cd ..
./compile-ijk.sh arm64

参考:https://github.com/Bilibili/ijkplayer/issues/4043
   https://www.jianshu.com/p/be622d6ad865

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: android ijkplayer是一款开源的Android音视频播放器库。它是基于FFmpeg库的封装,提供了一套简单易用的API,使开发者可以方便地在Android平台上实现音视频播放的功能。 在Android平台上,原生的MediaPlayer虽然功能较为基础,但如果要实现一些高级的音视频播放功能,需要编写复杂的代码。而ijkplayer通过封装了FFmpeg库,可以直接支持各种视频格式,同时提供了丰富的播放控制接口和音视频处理功能,轻松满足开发者的需求。 使用ijkplayer,开发者可以实现视频播放器的功能,包括播放、暂停、停止、快进、快退等控制操作,同时还可以实现视频缓冲、音频解码、视频解码等功能。此外,ijkplayer还支持网络流媒体的播放,可以通过URL进行视频播放,并支持自定义视频渲染器,实现自定义的播放界面。 ijkplayer在开源社区中也非常活跃,拥有庞大的开发者群体和丰富的文档资源。开发者可以通过阅读官方文档、查看源码和参与社区讨论,解决使用过程中遇到问题。 总之,android ijkplayer是一款功能丰富、易用性高的Android音视频播放器库,开发者可以借助它实现各种音视频播放功能,提升用户体验,满足不同场景的需求。 ### 回答2: Android IJKPlayer是一个基于FFmpeg开源项目的跨平台音视频播放器。它是由Bilibili开发的,旨在提供更稳定、高效的音视频播放体验。 IJKPlayer具有以下几个特点: 1. 多格式支持:IJKPlayer可以播放多种音视频格式,包括但不限于mkv、flv、mp4、avi等常见格式,且兼容性较好。 2. 跨平台支持:IJKPlayer不仅可以在安卓平台上使用,还支持在其他主流平台上运行,如iOS、Windows等,给开发者提供了更多的使用选择。 3. 硬解支持:IJKPlayer支持硬解码,可以利用设备的硬件能力来加速音视频的解码和播放,提升播放效率和性能。 4. 自定义能力:IJKPlayer可以根据用户需求进行自定义设置,比如调整播放器的画面尺寸、显示字幕、切换音轨等等,给用户更好的播放体验。 5. 延迟控制:IJKPlayer提供了低延迟播放功能,特别适用于直播等实时性要求较高的场景。 6. 网络支持:IJKPlayer能够通过网络进行音视频的传输和播放,支持直播流媒体协议,如RTSP、RTMP等,方便开发者进行网络音视频应用开发。 总之,Android IJKPlayer是一个强大而且易于使用的音视频播放器,具备良好的兼容性、高效的解码能力和丰富的自定义能力,可以满足开发者对于音视频播放的各种需求,为用户提供更好的播放体验。 ### 回答3: Android IjkPlayer是一款开源的、跨平台的视频播放器框架。它基于FFmpeg和OpenSL ES技术,能够解码和播放各种音视频格式。IjkPlayer具有以下几个优点: 首先,IjkPlayer具有较好的兼容性。它支持常见的视频格式,如MP4、AVI、FLV等,同时也支持常见的音频格式,如MP3、AAC等。这使得开发者可以在Android平台上播放各种类型的音视频,无需关心格式的兼容性问题。 其次,IjkPlayer具有较好的性能。它采用了硬解码和软解码相结的方式,可以根据设备的硬件能力灵活选择解码方式,以提供更好的播放性能。同时,IjkPlayer还支持视频缓存和断点续播功能,可以在网络环境不稳定的情况下提供更好的用户体验。 另外,IjkPlayer还具有丰富的功能扩展性。它提供了丰富的API接口,开发者可以根据自己的需求进行二次开发。例如,可以通过扩展支持更多的视频格式,或者添加自定义的播放控制功能。 总的来说,Android IjkPlayer是一款功能强大、性能出色的视频播放器框架。它为开发者提供了丰富的功能和灵活的扩展性,能够满足各种类型的音视频播放需求。无论是开发在线直播应用、本地视频播放功能还是自定义的音视频播放需求,都可以通过Android IjkPlayer来实现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值