ijkplayer从编译到使用来播放rtsp过程小结
来源:互联网 发布:纯网络综艺节目 编辑:程序博客网 时间:2024/05/01 19:57
前言:项目有个需求是用手机监控摄像头,播放格式是rtsp,之前使用的播放器发现新版本不支持rtsp格式,旧版本可以播放,可是发现效果并不是很好,想来想去最终决定使用ijkplayer。于是花了两天时间搭了环境编译了ijkplayer。
编译环境是:
virtualbox下的ubuntu
jdk-8u112-linux-x64 .tar.gz
android-ndk-r13-linux-x86_64.zip
android-sdk_r24.4.1-linux.tgz
配置好这些后安装: install homebrew, git, yasm
搭建好环境后就可以编译了,开始我编译出了0.8.4版本,发现播放不了rtsp,播放就是黑屏,后来发现有人说新版本有这个问题,退回到旧版本就没有问题了,于是我使用了K0.7.6
编译过程:
1.切换到你想要保持的目录下(最终编译文件会比较大,注意空间要足够,我就吃亏了次)
2. git clone -b K0.7.6 –depth 1 https://github.com/Bilibili/ijkplayer.git ijkplayer-android
3.进入到ijkplayer-android目录,执行./init-android.sh 这个过程需要下ffmpeg文件,大概两三百MB。
4. 进入config目录,指定编译的格式与配置之类。
cd config
rm module.sh
ln -s module-default.sh module.sh
module-default.sh是默认配置,编译出来的so文件会比较大,可以使用修改了的module-little.sh:
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=rtp"//修改export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=tcp"//添加export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=rtsp"//添加export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=mjpeg"//添加export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=mjpeg"//添加
5 cd android/contrib 进入,执行:
./compile-ffmpeg.sh clean //清除旧的编译记录与文件
./compile-ffmpeg.sh all //执行ffmpeg,这个过程比较久,耐心点
6 编译so文件
cd .. //进入android目录
./compile-ijk.sh all //编译所有so文件
7 编译完成
测试过程
编译介绍,导入deme进行测试,发现可以播放rtsp了,可是打开很慢,可以通过以下配置进行秒开:
ijkMediaPlayer.setOption(1, "analyzemaxduration", 100L); ijkMediaPlayer.setOption(1, "probesize", 10240L); ijkMediaPlayer.setOption(1, "flush_packets", 1L); ijkMediaPlayer.setOption(4, "packet-buffering", 0L); ijkMediaPlayer.setOption(4, "framedrop", 1L);
配置后发现秒开看到界面了,可是发现会有绿屏,看官网issue,想想可能需要支持h264,于是在do-compile-ffmpeg.sh中加入以下进行重新编译:
FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=h264"FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-protocol=udp"FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=h264"FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-parser=h264"FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-hwaccel=h264_vaapi"FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-hwaccel=h264_vaapi"FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-hwaccel=h264_dxva2"FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=mjpeg"FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=rtsp"FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=rtp"FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-encoder=h264"
结果发现还是有绿屏,后面通过以下代码配置可以不会出现绿屏,只是不能进行秒开:
转载注明:http://blog.csdn.net/u014614038/article/details/78350324ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "framedrop", 60); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "max-fps", 0); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "fps", 30); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_CODEC, "skip_loop_filter", 48); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "overlay-format", IjkMediaPlayer.SDL_FCC_RV16); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "packet-buffering", 0); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "fflags", "nobuffer"); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "max-buffer-size", 1024); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "min-frames", 3); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "start-on-prepared", 1); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "probsize", "4096"); ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "analyzeduration", "2000000");
转载注明:http://blog.csdn.net/u014614038/article/details/78350324
后面发现播放过程中还有其他小问题,这个自己再慢慢调吧。
- ijkplayer从编译到使用来播放rtsp过程小结
- 使用ijkPLayer播放rtsp协议地址
- IOS IJKPlayer播放RTSP
- IOS开源播放器ijkplayer从编译到播放(上)
- 从编译脚本分析ijkplayer详细编译过程
- 编译ijkplayer,并添加rtsp、rtmp支持,解决无法播放、unknown、延迟问题
- Ijkplayer编译 过程
- iOS集成ijkplayer支持rtsp流播放并使用播放样例
- ijkplayer 编译so库过程
- 使用ijkplayer进行视频播放
- 开源播放器ijkplayer-android编译
- 使用FFmpeg播放rtsp
- 编译后ijkplayer使用文档
- Android边缓冲边播放视频(ijkplayer的编译和使用)
- IJKplayer播放
- ijkPlayer播放器快速集成使用
- 使用ijkplayer播放一个网络视频
- ijkplayer的使用解析-视频播放,直播
- 第九周项目2二叉树遍历的递归算法
- 第八周项目二(4) 获取公共子串
- Spring-boot
- HDFS的体系架构
- Best Time to Buy and Sell Stock
- ijkplayer从编译到使用来播放rtsp过程小结
- python运算实践
- npm包管理器
- 程序员的自我修养--编译链接资料收集
- NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
- 通过代码创建新的窗体
- 关于Vue中v-show中添加表达式用于判断是否显示的问题
- JavaScript 开发人员需要知道的简写技巧
- c++中冒号(:)和双冒号(::)的用法