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

developerzjy 2018-05-16 02:40:46
ijkplayer库有直接播放字幕的api吗,没有的话如何在Java层扩展
...全文
2674 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,楼主自行解决。因为这些问题并不是三言两语能说的清楚。

80,351

社区成员

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

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