bilibili / ijkplayer

Android/iOS video player based on FFmpeg n3.4, with MediaCodec, VideoToolbox support.
GNU General Public License v2.0
32.54k stars 8.13k forks source link

ijkplayer 支持 srt协议 #5016

Open linuxliu opened 4 years ago

linuxliu commented 4 years ago

首先更换ffmpeg的版本为ff4.0--ixxxxxx
例如: ff4.0--ijk0.8.25--20200221--001 1.修改 init-android.sh 中的 IJK_FFMPEG_COMMIT=ff4.0--ijk0.8.25--20200221--001

2.然后编译openssl, libsrt需要libssl 的支持

  1. 根据libsrt的文档编译libsrt 这里有一份可以集成在ijkplayer中的编译脚本 android/contrib/tools/do-compile-srt.sh android/contrib/compile-srt.sh 将下面链接中demo的文件放入上面两个目录 demo.zip

4.修改android/contrib/tools/do-compile-srt.sh 参考对openssl的支持增加对srt的支持 `#with srt if [ -f "${FF_DEP_SRT_LIB}/libsrt.a" ]; then echo "srt detected" FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libsrt"

FF_CFLAGS="$FF_CFLAGS -I${FF_DEP_SRT_INC}"
FF_DEP_LIBS="$FF_DEP_LIBS -L${FF_DEP_SRT_LIB} -lsrt  -lstdc++"

fi 注意要将srt的配置放在openssl之前,因为srt也依赖openssl 正常编译就行了,如果ffmpeg报未找到libsrt的错误,是因为是根据pkg_config去找的,简单更改就是去掉对应ffmpeg中configure 对libsrt的检测 如果编译完成发现不能和str-live-server 通信,是因为ff4.0--ijk0.8.25--20200221--001 libavformat/libsrt.c版本较老,对应很多字段不支持,将ffmpeg4.2.2中对应的文件拷贝过去即可 `

heaoven commented 4 years ago

@linuxliu 如果链接静态库需要编译加入

--pkg-config-flags=--static
Luosh commented 4 years ago

@linuxliu 请问你使用的ndk和srt是什么版本, 我用r10e的编译srt v1.4.1会报错,ijkplayer-android-svn/android/contrib/srt-armv7a/srtcore/utilities.h:278:32: error: 'le32toh' was not declared in this scope

quelleG commented 3 years ago

可以参考 https://juejin.cn/post/6844904046164181000#heading-1 https://github.com/befovy/ijkplayer/pull/14/files#diff-263e458cbb0929a6fc8f3f122705b29c

DesenYang commented 3 years ago

求一份完整编译脚本。。

pray166 commented 3 years ago

@linuxliu 大佬,能出一份用最新NDK(31.0.0)编译的指南么

wenkency commented 2 years ago

可以查看一下我的博客:https://www.jianshu.com/p/7fad9a1a64f4 对着一步一步编译就好。