Ijkplayer: miui 安卓9.0系统上调节倍速失效

Created on 12 Dec 2018  ·  33Comments  ·  Source: bilibili/ijkplayer

如题

Most helpful comment

ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "soundtouch", 1)
这个设置要放在 prepareAsync()之前设置 紧接着 prepareAsync()这个之前设置就行了
我之前是在new IjkMediaPlayer() 之后设置 一直不起作用 后来改了之后 就ok了

All 33 comments

朋友 这个问题解决没啊。脑壳疼

朋友 这个问题解决没啊。脑壳疼

解决了,报了arguments out of range异常,不知道你的是不是也是这个引起的,跟代码应该是在系统AudioTrack里面报的应该是miui里面改啥了
ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "soundtouch", 1)
我们添加了这个设置后就Ok了

朋友 这个问题解决没啊。脑壳疼

解决了,报了arguments out of range异常,不知道你的是不是也是这个引起的,跟代码应该是在系统AudioTrack里面报的应该是miui里面改啥了
ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "soundtouch", 1)
我们添加了这个设置后就Ok了

我也设置了这个 但是还是没有效果。

朋友 这个问题解决没啊。脑壳疼

解决了,报了arguments out of range异常,不知道你的是不是也是这个引起的,跟代码应该是在系统AudioTrack里面报的应该是miui里面改啥了
ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "soundtouch", 1)
我们添加了这个设置后就Ok了

我也设置了这个 但是还是没有效果。

你报的是什么错误?都设置了哪些参数

朋友这个问题解决没啊。脑壳疼

解决了,报了参数超出范围异常,不知道你的是不是也是这个引起的,跟代码应该是在系统AudioTrack里面报的应该是miui里面改啥了
ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,“soundtouch” ,1)
我们添加了这个设置后就Ok了

image
看这似乎和你是一样的错误但是我设置后没有起作用

ijkplayer.setOption

朋友这个问题解决没啊。脑壳疼

解决了,报了参数超出范围异常,不知道你的是不是也是这个引起的,跟代码应该是在系统AudioTrack里面报的应该是miui里面改啥了
ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,“soundtouch” ,1)
我们添加了这个设置后就Ok了

image
看这似乎和你是一样的错误但是我设置后没有起作用

ijkplayer.setOption这个方法你调用了几次,都设置了什么参数

ijkplayer.setOption

朋友这个问题解决没啊。脑壳疼

解决了,报了参数超出范围异常,不知道你的是不是也是这个引起的,跟代码应该是在系统AudioTrack里面报的应该是miui里面改啥了
ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,“soundtouch”, 1)
我们添加了这个设置后就确定了

图片
看这似乎和你是一样的错误但是我设置后没有起作用

ijkplayer.setOption这个方法你调用了几次,都设置了什么参数
大佬我设置了这些,不明白错误的发生原因,和我设置的有什么关系呢。
image

ijkplayer.setOption

朋友这个问题解决没啊。脑壳疼

解决了,报了参数超出范围异常,不知道你的是不是也是这个引起的,跟代码应该是在系统AudioTrack里面报的应该是miui里面改啥了
ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,“soundtouch”, 1)
我们添加了这个设置后就确定了

图片
看这似乎和你是一样的错误但是我设置后没有起作用

ijkplayer.setOption这个方法你调用了几次,都设置了什么参数
大佬我设置了这些,不明白错误的发生原因,和我设置的有什么关系呢。
image

你把这些先都给注释掉,只加这一个试试吧,因为看不到源码,只能一点一点试

ijkplayer.setOption

朋友这个问题解决没啊。脑壳疼

解决了,报了参数超出范围异常,不知道你的是不是也是这个引起的,跟代码应该是在系统AudioTrack里面报的应该是miui里面改啥了
ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,“soundtouch”, 1)
我们添加了这个设置后就确定了

图片
看这似乎和你是一样的错误但是我设置后没有起作用

ijkplayer.setOption这个方法你调用了几次,都设置了什么参数
大佬我设置了这些,不明白错误的发生原因,和我设置的有什么关系呢。
image

你把这些先都给注释掉,只加这一个试试吧,因为看不到源码,只能一点一点试

ijkplayer.setOption

朋友这个问题解决没啊。脑壳疼

解决了,报了参数超出范围异常,不知道你的是不是也是这个引起的,跟代码应该是在系统AudioTrack里面报的应该是miui里面改啥了
ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,“soundtouch”, 1)
我们添加了这个设置后就确定了

图片
看这似乎和你是一样的错误但是我设置后没有起作用

ijkplayer.setOption这个方法你调用了几次,都设置了什么参数
大佬我设置了这些,不明白错误的发生原因,和我设置的有什么关系呢。
image

你把这些先都给注释掉,只加这一个试试吧,因为看不到源码,只能一点一点试

尝试过了,不行的。现在知道高于1.0速度无法生效,低于1.0可以。

ijkplayer.setOption

朋友这个问题解决没啊。脑壳疼

解决了,报了参数超出范围异常,不知道你的是不是也是这个引起的,跟代码应该是在系统AudioTrack里面报的应该是miui里面改啥了
ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,“soundtouch”, 1)
我们添加了这个设置后就确定了

图片
看这似乎和你是一样的错误但是我设置后没有起作用

ijkplayer.setOption这个方法你调用了几次,都设置了什么参数
大佬我设置了这些,不明白错误的发生原因,和我设置的有什么关系呢。
image

你把这些先都给注释掉,只加这一个试试吧,因为看不到源码,只能一点一点试

ijkplayer.setOption

朋友这个问题解决没啊。脑壳疼

解决了,报了参数超出范围异常,不知道你的是不是也是这个引起的,跟代码应该是在系统AudioTrack里面报的应该是miui里面改啥了
ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,“soundtouch”, 1)
我们添加了这个设置后就确定了

图片
看这似乎和你是一样的错误但是我设置后没有起作用

ijkplayer.setOption这个方法你调用了几次,都设置了什么参数
大佬我设置了这些,不明白错误的发生原因,和我设置的有什么关系呢。
image

你把这些先都给注释掉,只加这一个试试吧,因为看不到源码,只能一点一点试

尝试过了,不行的。现在知道高于1.0速度无法生效,低于1.0可以。

奇怪了,我按照你的设置也设置一遍,只要有soundtouch这个配置就可以高于1倍速,没有就不行,米8上测试的

ijkplayer.setOption

朋友这个问题解决没啊。脑壳疼

解决了,报了参数超出范围异常,不知道你的是不是也是这个引起的,跟代码应该是在系统AudioTrack里面报的应该是miui里面改啥了
ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,“soundtouch”, 1)
我们添加了这个设置后就确定了

图片
看这似乎和你是一样的错误但是我设置后没有起作用

ijkplayer.setOption这个方法你调用了几次,都设置了什么参数
大佬我设置了这些,不明白错误的发生原因,和我设置的有什么关系呢。
image

你把这些先都给注释掉,只加这一个试试吧,因为看不到源码,只能一点一点试

ijkplayer.setOption

朋友这个问题解决没啊。脑壳疼

解决了,报了参数超出范围异常,不知道你的是不是也是这个引起的,跟代码应该是在系统AudioTrack里面报的应该是miui里面改啥了
ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,“soundtouch”, 1)
我们添加了这个设置后就确定了

图片
看这似乎和你是一样的错误但是我设置后没有起作用

ijkplayer.setOption这个方法你调用了几次,都设置了什么参数
大佬我设置了这些,不明白错误的发生原因,和我设置的有什么关系呢。
image

你把这些先都给注释掉,只加这一个试试吧,因为看不到源码,只能一点一点试

尝试过了,不行的。现在知道高于1.0速度无法生效,低于1.0可以。

奇怪了,我按照你的设置也设置一遍,只要有soundtouch这个配置就可以高于1倍速,没有就不行,米8上测试的

老铁 你能弄个简单的dome嘛,我这也是试了个各种设置,也没有起到相应的效果,你的项目是自己写的播放器嘛,ijk也是自己编译的嘛。我现在用了gsyplayer还有playerbase 这两个开源的播放器来进行测试的 ,测试机是mix2s 和mix 3 都是云测试机。

ijkplayer.setOption

朋友这个问题解决没啊。脑壳疼

解决了,报了参数超出范围异常,不知道你的是不是也是这个引起的,跟代码应该是在系统AudioTrack里面报的应该是miui里面改啥了
ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,“soundtouch”, 1)
我们添加了这个设置后就确定了

图片
看这似乎和你是一样的错误但是我设置后没有起作用

ijkplayer.setOption这个方法你调用了几次,都设置了什么参数
大佬我设置了这些,不明白错误的发生原因,和我设置的有什么关系呢。
image

你把这些先都给注释掉,只加这一个试试吧,因为看不到源码,只能一点一点试

ijkplayer.setOption

朋友这个问题解决没啊。脑壳疼

解决了,报了参数超出范围异常,不知道你的是不是也是这个引起的,跟代码应该是在系统AudioTrack里面报的应该是miui里面改啥了
ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER,“soundtouch”, 1)
我们添加了这个设置后就确定了

图片
看这似乎和你是一样的错误但是我设置后没有起作用

ijkplayer.setOption这个方法你调用了几次,都设置了什么参数
大佬我设置了这些,不明白错误的发生原因,和我设置的有什么关系呢。
image

你把这些先都给注释掉,只加这一个试试吧,因为看不到源码,只能一点一点试

尝试过了,不行的。现在知道高于1.0速度无法生效,低于1.0可以。

奇怪了,我按照你的设置也设置一遍,只要有soundtouch这个配置就可以高于1倍速,没有就不行,米8上测试的

老铁 你能弄个简单的dome嘛,我这也是试了个各种设置,也没有起到相应的效果,你的项目是自己写的播放器嘛,ijk也是自己编译的嘛。我现在用了gsyplayer还有playerbase 这两个开源的播放器来进行测试的 ,测试机是mix2s 和mix 3 都是云测试机。

用的这个
api 'com.github.tcking:ijkplayer-java:0.8.8'
api 'com.github.tcking:ijkplayer-armv7a:0.8.8'

小米8升级到9.0, 调速大于1.0好像是没有效果

同样遇到这个问题,求解,是miui独有的问题还是9.0的问题?

小米8升级到9.0, 调速大于1.0好像是没有效果

同样遇到这个问题,求解,是miui独有的问题还是9.0的问题?

小米8升级到9.0, 调速大于1.0好像是没有效果

兄弟解决了吗

朋友 这个问题解决没啊。脑壳疼

解决了,报了arguments out of range异常,不知道你的是不是也是这个引起的,跟代码应该是在系统AudioTrack里面报的应该是miui里面改啥了
ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "soundtouch", 1)
我们添加了这个设置后就Ok了

添加了貌似还是不好使。。。

朋友 这个问题解决没啊。脑壳疼

解决了,报了arguments out of range异常,不知道你的是不是也是这个引起的,跟代码应该是在系统AudioTrack里面报的应该是miui里面改啥了
ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "soundtouch", 1)
我们添加了这个设置后就Ok了

添加了貌似还是不好使。。。

确实是,我也添加过ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "soundtouch", 1),但是仍旧没有效果,现在我把播放器的解码器换成exo了,解决了这个问题

朋友 这个问题解决没啊。脑壳疼

解决了,报了arguments out of range异常,不知道你的是不是也是这个引起的,跟代码应该是在系统AudioTrack里面报的应该是miui里面改啥了
ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "soundtouch", 1)
我们添加了这个设置后就Ok了

添加了貌似还是不好使。。。

确实是,我也添加过ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "soundtouch", 1),但是仍旧没有效果,现在我把播放器的解码器换成exo了,解决了这个问题

我解决了,谢谢

朋友 这个问题解决没啊。脑壳疼

解决了,报了arguments out of range异常,不知道你的是不是也是这个引起的,跟代码应该是在系统AudioTrack里面报的应该是miui里面改啥了
ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "soundtouch", 1)
我们添加了这个设置后就Ok了

添加了貌似还是不好使。。。

确实是,我也添加过ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "soundtouch", 1),但是仍旧没有效果,现在我把播放器的解码器换成exo了,解决了这个问题

我解决了,谢谢

兄得怎么解决的啊

ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "soundtouch", 1)
这个设置要放在 prepareAsync()之前设置 紧接着 prepareAsync()这个之前设置就行了
我之前是在new IjkMediaPlayer() 之后设置 一直不起作用 后来改了之后 就ok了

除了ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "soundtouch", 1);
还有别的方法嘛?主要是用exo都是没有问题的 证明audiotrack是没有问题的。

这个问题可以抓下日志:
mAfFrameCount:1920 mAfSampleRate:48000 sampleRate:44100 speed:2.000000 mFrameCount:3544 < minFrameCount:7068

原因是:
ijkplayer调用getMinBufferSize(stereo,44100,16bit) 结果返回为7088,minFrameCount: 7088/4 = 1772
ijkplayer创建AudioTrack时bufferSizeInBytes设置为2xgetMinBufferSize,即 mFrameCount:3544
按照google官方代码注释 setPlaybackParams,只需要mFrameCount >= speed*getMinBufferSize/4 就可以了。也就是说mFrameCount=3544就可以了。
但是基于android9的mi8,在调用setPlaybackParams时要求2 x speed x getMinBufferSize/4

完整的错误日志是这样的:
D/AudioTrack: isSampleRateSpeedAllowed_l denied mAfLatency:80 mAfFrameCount:1920 mAfSampleRate:48000 sampleRate:44100 speed:1.500000 mFrameCount:3544 < minFrameCount:5302
W/AudioTrack: setPlaybackRate(1.500000, 1.000000) failed (buffer size)
W/System.err: java.lang.IllegalArgumentException: arguments out of range
at android.media.AudioTrack.native_set_playback_params(Native Method)
at android.media.AudioTrack.setPlaybackParams(AudioTrack.java:1902)
java.lang.IllegalArgumentException: arguments out of range
W/System.err: at android.media.AudioTrack.native_set_playback_params(Native Method)
at android.media.AudioTrack.setPlaybackParams(AudioTrack.java:1902)

解决方案有两种:
1。创建AudioTrack是,bufferSizeInBytes参数设置为4*minBufferSize,可能会导致音频延迟增加一倍
2。走软的加速,即soundtouch,可能会增加性能消耗

感觉这是小米的一个bug。

正如jiaobinbin同学说的那样,需要在prepareAsync之前设置就能生效,如果对象new出来以后你又调用了reset函数,那么久会把这个soundtouch属性干掉了,所以在prepareAsync之前再设置就好了,已经解决了米8上的这个问题

正如jiaobinbin同学说的那样,需要在prepareAsync之前设置就能生效,如果对象new出来以后你又调用了reset函数,那么久会把这个soundtouch属性干掉了,所以在prepareAsync之前再设置就好了,已经解决了米8上的这个问题

大佬留个QQ吧 想问你个问题 我根据上面的那些解决方案 现在在米8上倍速播放还是不行

解决方案有两种:
1。创建AudioTrack是,bufferSizeInBytes参数设置为4*minBufferSize,可能会导致音频延迟增加一倍
2。走软的加速,即soundtouch,可能会增加性能消耗

感觉这是小米的一个bug。

我想问一下 你说的这个解决方案是在java层处理的吗 有相关的代码吗 你是怎么把AudioTrack和ijkplayer关联的?

解决方案有两种:
1。创建AudioTrack是,bufferSizeInBytes参数设置为4*minBufferSize,可能会导致音频延迟增加一倍
2。走软的加速,即soundtouch,可能会增加性能消耗
感觉这是小米的一个bug。

我想问一下 你说的这个解决方案是在java层处理的吗 有相关的代码吗 你是怎么把AudioTrack和ijkplayer关联的?
ijkplayer通过JNI回调回去的,不需要你添加。
建议使用soundtouch方案,需要执行下 init-android-soundtouch.sh,重新编译ijkplayer,然后再ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "soundtouch", 1)应该就行了

解决方案有两种:
1。创建AudioTrack是,bufferSizeInBytes参数设置为4*minBufferSize,可能会导致音频延迟增加一倍
2。走软的加速,即soundtouch,可能会增加性能消耗
感觉这是小米的一个bug。

我想问一下 你说的这个解决方案是在java层处理的吗 有相关的代码吗 你是怎么把AudioTrack和ijkplayer关联的?
ijkplayer通过JNI回调回去的,不需要你添加。
建议使用soundtouch方案,需要执行下 init-android-soundtouch.sh,重新编译ijkplayer,然后再ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "soundtouch", 1)应该就行了

多谢

解决方案有两种:
1。创建AudioTrack是,bufferSizeInBytes参数设置为4*minBufferSize,可能会导致音频延迟增加一倍
2。走软的加速,即soundtouch,可能会增加性能消耗
感觉这是小米的一个bug。

我想问一下 你说的这个解决方案是在java层处理的吗 有相关的代码吗 你是怎么把AudioTrack和ijkplayer关联的?
ijkplayer通过JNI回调回去的,不需要你添加。
建议使用soundtouch方案,需要执行下 init-android-soundtouch.sh,重新编译ijkplayer,然后再ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "soundtouch", 1)应该就行了

如果我直接调用ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "soundtouch", 1)行吗 还是必须重新编译一下 init-android-soundtouch.sh?

解决方案有两种:
1。创建AudioTrack是,bufferSizeInBytes参数设置为4*minBufferSize,可能会导致音频延迟增加一倍
2。走软的加速,即soundtouch,可能会增加性能消耗
感觉这是小米的一个bug。

我想问一下 你说的这个解决方案是在java层处理的吗 有相关的代码吗 你是怎么把AudioTrack和ijkplayer关联的?
ijkplayer通过JNI回调回去的,不需要你添加。
建议使用soundtouch方案,需要执行下 init-android-soundtouch.sh,重新编译ijkplayer,然后再ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "soundtouch", 1)应该就行了

如果我直接调用ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "soundtouch", 1)行吗 还是必须重新编译一下 init-android-soundtouch.sh?

必须执行init-android-soundtouch.sh,重新编译

解决方案有两种:
1。创建AudioTrack是,bufferSizeInBytes参数设置为4*minBufferSize,可能会导致音频延迟增加一倍
2。走软的加速,即soundtouch,可能会增加性能消耗
感觉这是小米的一个bug。

我想问一下 你说的这个解决方案是在java层处理的吗 有相关的代码吗 你是怎么把AudioTrack和ijkplayer关联的?
ijkplayer通过JNI回调回去的,不需要你添加。
建议使用soundtouch方案,需要执行下 init-android-soundtouch.sh,重新编译ijkplayer,然后再ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "soundtouch", 1)应该就行了

如果我直接调用ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "soundtouch", 1)行吗 还是必须重新编译一下 init-android-soundtouch.sh?

必须执行init-android-soundtouch.sh,重新编译

我在github上找到android-soundtouch.sh这个文件了 但是环境是windows的 这怎么编译呢

Was this page helpful?
0 / 5 - 0 ratings

Related issues

Tan-zy picture Tan-zy  ·  4Comments

lingcimi picture lingcimi  ·  3Comments

xuluming picture xuluming  ·  4Comments

binaryxiaobao picture binaryxiaobao  ·  4Comments

xiaogu-space picture xiaogu-space  ·  3Comments