• 大土豆
    2022-07-25 来自北京
    播放原始的PCM,优势是不言而喻的,音频轨道解码之后的PCM数据,可以给FFmpeg的音频滤镜做进一步各种效果的处理,还可以接入soundtouch做变速和变调的处理,然后处理过的PCM再给audioqueue播放,各个流程都可以定制。

    作者回复: 对的。

    共 2 条评论
    3
  • keepgoing
    2022-12-03 来自北京
    展老师,对于AudioStreamBasicDescription的参数设置,文章中有三个不明白的地方,想请教一下老师:假设我现在需要播放的音频格式为44100采样, 2声道,交错存放,float类型数据,每个包有1024个采样的PCM数据 1. mFramesPerPacket为什么一般是1呢,怎么理解这里的Frame?如果设置成1是不是可以理解为这里的一个frame也就是输入的一个包的整体数据,也就是我上述情况里 1024个采样 * 2通道 * sizeof(float)的大小 2. 如果在1成立的基础上,看见接下来两个参数mBytesPerFrame和mBytesPerPacket在样例代码中是对应同一个变量bytesPerSample;bytesPerSample的计算规则是不是可以用44100 * 2 * 1024 * sizeof(float)来计算 (如果非交错存储就不乘以2) 3. 请问有什么情况mFramesPerPacket这个值设置为非1呢 感谢老师有空时帮忙解答,刚接触音视频不久,常常为参数问题所困顿,所以问题稍微有点细,如果有一些理解错误的地方拜托老师多多指正,谢谢展老师
    展开

    作者回复: 1 如果格式是PCM的话,Frames可以等同为Packet,但是如果是其他压缩格式就不一定了; 2 理解了1之后,接下来就是乘固定数值了; 3 在是压缩格式的时候,但是如果是PCM的这种原始格式就是1;

    
    1
  • data
    2022-08-01 来自北京
    是否案例都有demo可以跑一跑😌

    作者回复: 最近在马不停蹄的更新课程,课程更新到差不多阶段,源码的github地址会公布出来哈。

    共 2 条评论
    1
  • data
    2022-08-03 来自北京
    老师,我想咨询一下 我使用 AudioQueue 来录音,然后封装成rtp包进行发送,里面 有个时间戳 timestamp,我没找到 里面有方法可以获取到这个时间戳的? int32_t t = ((float)timestamp.value / timestamp.timescale) * 1000; if(start_t == 0) start_t = t; header.ts = t - start_t;

    作者回复: 这个得看你本身rtp包里面的时间戳要求是什么?可以按照从采集开始计时的时间、也可以自己计算PCM数据的时间。

    
    