美文网首页
2020-07-23

2020-07-23

作者: 声声乌龙_yq | 来源:发表于2020-07-23 14:47 被阅读0次

iOS 支持音视频倍速播放

基于使用ffmpeg+AudioUnit+OpenGL的一个视频播放器实现倍速播放功能:
用ffmpeg解码出得到PCM格式的音频数据,由AudioUnit播放音频,在播放之前通过sonic库转化为所需倍速的PCM格式音频

sonic是一个C++库,用法简单无需添加依赖库, 直接传入的是PCM格式,输出的也是PCM格式,这样的用起来很方便,不需要格式转换

sonic的关键代码
1.创建一个stream流,并设置相关参数

 stream=sonicCreateStream((int)(sampleRate), (int)(channels));
 sonicSetSpeed(stream, 1.0);//通过设置speed来实现倍速播放(声音不会变调)
 sonicSetPitch(stream, 1.0);
 sonicSetVolume(stream, 1.0);
 sonicSetRate(stream, 1.0);//通过设置rate来实现倍速(声音会变调)

2、相关的转换代码

- (NSData *)setFloatData:(NSData *)data{
    
    NSMutableData *sonicdDatas = [[NSMutableData alloc] init];
    int lenBytes = (int)data.length;
    float * dataBytes = (float *)[data bytes];
    float * outBytes = (float *)malloc(lenBytes);
    int samples = lenBytes/(sizeof(float)* sonicGetNumChannels(stream));
    //传入数据,注意数据类型如果是short类型用   sonicWriteShortToStream(stream, dataBytes, samples),否则转换后声音会出现呲呲的噪音
    int ret = sonicWriteFloatToStream(stream, dataBytes, samples);
    if (ret) {
        int available = sonicSamplesAvailable(stream) * sizeof(float) * sonicGetNumChannels(stream);
        if (lenBytes > available) {
            lenBytes = available;
        }
        outBytes = (float *)realloc(outBytes, lenBytes);
        int samplesRead;
        do {
            samplesRead = sonicReadFloatFromStream(stream, outBytes, lenBytes/(sizeof(float)*sonicGetNumChannels(stream)));
            if (samplesRead > 0) {
                int bytesRead = samplesRead * sizeof(float) * sonicGetNumChannels(stream);
                [sonicdDatas appendBytes:outBytes length:bytesRead];
            }
        } while (samplesRead > 0);
    }
    free(outBytes);
    return sonicdDatas; //返回转换后的数据
}

3.通过改变speed的值来实现倍速播放

 -(void)setPlaySpeed:(double)playSpeed{
     _playSpeed = playSpeed;
     sonicSetSpeed(stream, playSpeed);
 }

当音频可倍速播放之后,可以音频的时间为轴来控制视频帧的渲染速度,进而达到音视频同播播放的效果。

相关文章

  • 2020-07-23 生产环境部署

    2020-07-23 生产环境部署 首先就是cookie问题

  • python--批处理--多进程

    2020-07-23 更新,增加线程自定义 初始

  • 心理学如何影响用户决策:吃瓜子效应

    心理学如何影响用户决策:吃瓜子效应 原木关注作者 2020-07-23 1 评论7702 浏览17 收藏10 分钟...

  • 2020-07-23

    2020-07-23 日精进打卡 姓名:彭新 宁波蓝天白云供应链管理有限公司 【日精进打卡第868天】 【知学习】...

  • 20200723宽基指数估值表

    估值日期:2020-07-23 ​ 颜色说明: 1、红色:说明当前指数估值比较高,不建议童鞋们去购买红色背景的相关...

  • 那些“月入十万”的自媒体人,你们还好吗?

    还在坚持写字的科技不谓侠2020-07-23 1 就像上知乎的朋友,总给人一种人均985本硕、人均年薪百万的错觉。...

  • 2020-07-23

    2020-07-23 我的目标是儿子今年的高考成绩超出预期,考取心仪的南京大学物理专业!我愿意成为那个榜样,带动更...

  • 喝酒聊天

    今晚喝酒了,白的,虽然也不是我喝… 2020-07-23 晚饭后葛弟弟问我想吃点儿啥,看那样子是要去商店整点吃的 ...

  • 经历过后收获的经验

    2020-07-23星期四 前语:不经历风雨怎么见彩虹,这首歌的歌词今天我才深深地理解它的真正含义。人生的每...

  • 今日复盘(Day179)-承诺

    2020-07-23 一、今日收获 按计划推进了备课内容,并陪伴了小朋友,此外完成了画笔记的作业,第一课的复习及作...

网友评论

      本文标题:2020-07-23

      本文链接:https://www.haomeiwen.com/subject/hwxhlktx.html