Android ijkplayer库如何实现外挂字幕功能

developerzjy 2018-05-16 02:40:46
ijkplayer库有直接播放字幕的api吗,没有的话如何在Java层扩展
...全文
2672 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
developerzjy 2018-10-18
  • 打赏
  • 举报
回复
引用 5 楼 ygauf78y 的回复:
[quote=引用 4 楼 Simple_Simple_Simple 的回复:]
[quote=引用 3 楼 IT_ZJYANG 的回复:]
刚好做过ijk相关的项目,针对楼主所说的外挂字幕,可以用一个TextView覆盖在你的VideoView上面展示
主流的字幕格式例如srt都是有一定的格式的(包含每行字幕的进场和出场时刻),可以根据规律进行读取和解析,并在对应的时间段展示对应的那一行字幕,在视频播放的过程中,你自然可以读取到此时的时间点(例如播到1分20秒),利用这个时间来跟字幕文件里的时间进行比较,就可以准确地展示外置字幕。(解析细节可以网上搜索,挺多的也很容易理解)
然后TextView的位置你就像平常设计布局一样,可以随意摆放到你想摆放的位置,当然一般是视频底部。


是的,目前只能这样来做[/quote]

不过获取不了视频内置的字幕。最好是做到也能获取到内置字幕,其实ijkplayer获取内置字幕的方式和android原生的mediaplayer一样。在显示内置字幕时候,同样也是用一个TextView覆盖在你的VideoView上面展示。那么你完全可以做到兼容内置字幕和外挂字幕,因为它们显示字幕的方式是一样的。现在问题ijkplayer内置字幕切换容易出现崩溃。


[/quote]
你是指addTimedTextSource,然后注册OnTimedTextListener这种方式吗,我试过ijk的OnTimedTextListener里面的方法并没有回调,还得再研究一下
IT_ZJYANG 2018-10-17
  • 打赏
  • 举报
回复
刚好做过ijk相关的项目,针对楼主所说的外挂字幕,可以用一个TextView覆盖在你的VideoView上面展示
主流的字幕格式例如srt都是有一定的格式的(包含每行字幕的进场和出场时刻),可以根据规律进行读取和解析,并在对应的时间段展示对应的那一行字幕,在视频播放的过程中,你自然可以读取到此时的时间点(例如播到1分20秒),利用这个时间来跟字幕文件里的时间进行比较,就可以准确地展示外置字幕。(解析细节可以网上搜索,挺多的也很容易理解)
然后TextView的位置你就像平常设计布局一样,可以随意摆放到你想摆放的位置,当然一般是视频底部。
ygauf78y 2018-10-17
  • 打赏
  • 举报
回复
引用 4 楼 Simple_Simple_Simple 的回复:
[quote=引用 3 楼 IT_ZJYANG 的回复:]
刚好做过ijk相关的项目,针对楼主所说的外挂字幕,可以用一个TextView覆盖在你的VideoView上面展示
主流的字幕格式例如srt都是有一定的格式的(包含每行字幕的进场和出场时刻),可以根据规律进行读取和解析,并在对应的时间段展示对应的那一行字幕,在视频播放的过程中,你自然可以读取到此时的时间点(例如播到1分20秒),利用这个时间来跟字幕文件里的时间进行比较,就可以准确地展示外置字幕。(解析细节可以网上搜索,挺多的也很容易理解)
然后TextView的位置你就像平常设计布局一样,可以随意摆放到你想摆放的位置,当然一般是视频底部。


是的,目前只能这样来做[/quote]

不过获取不了视频内置的字幕。最好是做到也能获取到内置字幕,其实ijkplayer获取内置字幕的方式和android原生的mediaplayer一样。在显示内置字幕时候,同样也是用一个TextView覆盖在你的VideoView上面展示。那么你完全可以做到兼容内置字幕和外挂字幕,因为它们显示字幕的方式是一样的。现在问题ijkplayer内置字幕切换容易出现崩溃。


developerzjy 2018-10-17
  • 打赏
  • 举报
回复
引用 3 楼 IT_ZJYANG 的回复:
刚好做过ijk相关的项目,针对楼主所说的外挂字幕,可以用一个TextView覆盖在你的VideoView上面展示
主流的字幕格式例如srt都是有一定的格式的(包含每行字幕的进场和出场时刻),可以根据规律进行读取和解析,并在对应的时间段展示对应的那一行字幕,在视频播放的过程中,你自然可以读取到此时的时间点(例如播到1分20秒),利用这个时间来跟字幕文件里的时间进行比较,就可以准确地展示外置字幕。(解析细节可以网上搜索,挺多的也很容易理解)
然后TextView的位置你就像平常设计布局一样,可以随意摆放到你想摆放的位置,当然一般是视频底部。


是的,目前只能这样来做
developerzjy 2018-10-16
  • 打赏
  • 举报
回复
引用 1 楼 ygauf78y 的回复:
ijkplayer对字幕的支持不是特别好,比如:
1. 中英混合字幕只显示中文。
2. 切换字幕时还会出现崩溃。
3. 切换字幕时并不是马上同步字幕,而是播放几分钟才能同步字幕。
个人建议如果你不会修改ijkplayer.so库的代码,最好不用用。

ijkplayer库有直接播放字幕的api:

ijkMediaPlayer.selectTrack(int track);

不过要加上这个设置项,字幕才有效。
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "subtitle", 1);

最后解决我所说的ijkplayer本身存在的bug,楼主自行解决。因为这些问题并不是三言两语能说的清楚。


感谢回复,看你给出的api调用应该是播放视频自带的内挂字幕,ijkMediaPlayer.selectTrack(int track)我在网上看确实存在一些bug(包括音轨切换),目前我是参考网上一些demo和字幕文件的特点,在Java层对外挂字幕文件做了一些简单的解析。
ygauf78y 2018-10-15
  • 打赏
  • 举报
回复
ijkplayer对字幕的支持不是特别好,比如:
1. 中英混合字幕只显示中文。
2. 切换字幕时还会出现崩溃。
3. 切换字幕时并不是马上同步字幕,而是播放几分钟才能同步字幕。
个人建议如果你不会修改ijkplayer.so库的代码,最好不用用。

ijkplayer库有直接播放字幕的api:

ijkMediaPlayer.selectTrack(int track);

不过要加上这个设置项,字幕才有效。
ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "subtitle", 1);

最后解决我所说的ijkplayer本身存在的bug,楼主自行解决。因为这些问题并不是三言两语能说的清楚。
基于 (兼容系统MediaPlayer与EXOPlayer2),实现了多功能的视频播放器。(请仔细阅读下面的说明,大多数问题可在下方找到解答)。 类型 功能 缓存 边播边缓存,使用了 ; ExoPlayer使用SimpleCache。 协议 h263 \ 4 \ 5,Https,concat,rtsp,hls,rtmp,crypto,mpeg等。 滤镜 简单滤镜(马赛克,黑白,色彩过滤,高斯,模糊,模糊等等20多种),动画,(水印,画面多重播放等)。 帧图 视频第一帧,视频帧截图功能,视频生成gif功能。 播放 列表播放,列表连续播放,重力旋转与手动旋转,视频本身旋转旋转属性,快播和慢播,网络视频加载速度。 画面 调整显示比例:最小,16:9、4:3,填充;播放时旋转画面角度(0,90,180,270);可以旋转。 内核 IJKPlayer,EXOPlayer,MediaPlayer切换,自定义内核 布局 全屏与非全屏两套布局切换,没有任何操作控件的纯播放支持,弹幕功能,继承自定义任何布局。 播放 单例播放,多个同时播放,视频列表滑动自动播放,列表切换详情页面无缝播放。 窗 小窗口,多

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧