Android 音视频变速原理

视频倍速播放
  • 在这里插入图片描述

  • 假设视频帧率是24fps, 则播放器必须在1000/24 = 41.66ms 内 解封装 + 解码 + 渲染完一帧,一般只计算出把YUV数据从渲染队列中取出到渲染结束的时间(RenderTime),超过了这个时间就会出现播放卡顿,画面延迟

  • 渲染是花不到41.66ms的,假设渲染时间是10ms,那么我们就要休眠 41.66-10 = 31.66ms ,再继续从渲染队列拿帧数据。

  • 倍速播放就是24fps换成48fps,即1000ms内播放出48帧,即RenderTime = 41.66/2 = 20.83ms, 所以按照原理只需要改变RenderTime即可实现倍速播放

音频倍速播放
  • Android的音频播放大多采用两种方案,AudioTrack和OpenSL ES

  • 注意参数:

    • 采样率:sampleRate
    • 声道数:channel
    • 采样格式:audioFormat
  • 假设现在有一段48000Hz,16位的单声道音频,用AudioTrack播放的时候,按照前面视频的思路,就是一秒钟的时间内,需要喂给播放器的数据是
    48000 * 16 * 1 / 8 = 9600 字节/秒

  • 如果是两倍速那么就是将9600 * 2 = 48000 * 16 * / 40 即提高采样率即可实现音频倍速播放

  • 参考文章
音频倍速实现

MediaPlayer.setPlaybackParams(PlaybackParams params) throws IllegalStateException, IllegalArgumentException
  • 具体实现:
val mediaplayer = MediaPlayer()
if (mediaplayer != null) {
    //倍速设置,必须在23以上
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        mediaplayer.playbackParams = mediaplayer.playbackParams.setSpeed(1.5f)
        mediaplayer.pause()
        mediaplayer.start()
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wjxbless

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值