社区
C语言
帖子详情
关于speex音频编码的问题.
honglqin
2012-08-22 06:31:17
最近在研究speex音频编解码.如果是一个线程在进行编码的话那是可以用的.但是为了提高编码速度,我想用两个或两个以上的线程同时编码两个或两个以上帧的数据.可是这样编码出来的数据解码后播放出来完全不对啊.
有没有哪位大侠知道如何用speex在多线程下同时编码的吗?
...全文
462
15
打赏
收藏
关于speex音频编码的问题.
最近在研究speex音频编解码.如果是一个线程在进行编码的话那是可以用的.但是为了提高编码速度,我想用两个或两个以上的线程同时编码两个或两个以上帧的数据.可是这样编码出来的数据解码后播放出来完全不对啊. 有没有哪位大侠知道如何用speex在多线程下同时编码的吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
程一个大前端
2014-05-07
打赏
举报
回复
你的编码 是怎么弄的哦?能跟我说说么,我弄了好久了,是iOS端的!
honglqin
2012-10-09
打赏
举报
回复
我原来的数据是双声道的,提取出一个声道的数据进行编码就可以了。
honglqin
2012-08-23
打赏
举报
回复
[Quote=引用 7 楼 的回复:]
数据是大于两帧的,知道帧数据的区别吗?是不同的通道,还是什么的?
[/Quote]
好吧,就这么和你说吧.
我通过某种特别的方法获取耳机的PCM数据.但这种方法有个特点,如果你不快点把数据读出数据就会丢失.
现在我要用speex编码然后再用网络发送出去.可是speex编码速度不够快,使得PCM数据丢失.现在我只是想提高speex编码速度就用多线程进行同时编码.可是多线程编码出错了.就是这样.
图灵狗
2012-08-23
打赏
举报
回复
数据是大于两帧的,知道帧数据的区别吗?是不同的通道,还是什么的?
honglqin
2012-08-23
打赏
举报
回复
[Quote=引用 5 楼 的回复:]
一个音频设备的话,物理上你无法多个线程同时去操作它。而且没有必要这么做,你可以一个线程去编码,然后编码出来的音频流,其它线程是可以共享的。
[/Quote]
我没有用多线程操作设备.我只是用一个线程操作设备,从设备里读出来的数据是大于两帧的.所以我想在读取完数据后再用多个线程同时编码.我也只是想提高编码速度而已.
图灵狗
2012-08-23
打赏
举报
回复
一个音频设备的话,物理上你无法多个线程同时去操作它。而且没有必要这么做,你可以一个线程去编码,然后编码出来的音频流,其它线程是可以共享的。
honglqin
2012-08-23
打赏
举报
回复
不可行也没有意义,能否说明一下为什么?这个我还真是不懂.要不然会很纠结的.
图灵狗
2012-08-23
打赏
举报
回复
1个音频设备多线程同时编码是不可行也没有意义的,不同的音频同时解码然后混合输出是可以的。
honglqin
2012-08-23
打赏
举报
回复
[Quote=引用 1 楼 的回复:]
你的音频设备应该只有1个,2个以上的线程不能同时去操作音频设备,所以你得用一些信号量来管理它。
[/Quote]
我每次从从音频设备里读出来的数据是大于两帧的.所以我想用多线程进行同时编码.
honglqin
2012-08-23
打赏
举报
回复
[Quote=引用 12 楼 的回复:]
实时是相对的,你的系统资源不足所以才需要多加Buffer,一点点延迟而已。
[/Quote]
那我试下你的方法,有结果后告诉你.
图灵狗
2012-08-23
打赏
举报
回复
实时是相对的,你的系统资源不足所以才需要多加Buffer,一点点延迟而已。
honglqin
2012-08-23
打赏
举报
回复
[Quote=引用 10 楼 的回复:]
原来如此!所以其实你应该把这个过程分成两个部分,用Double Buffer来解决问题,如果仍然不够快,可以试着增加Buffer,原理是一样的。两个Buffer假设都为32KB,PCM先往第一块Buffer写,第二块Buffer空闲,当写满后送给speex编码,PCM接着往第二块Buffer写,满了之后把第二块Buffer送给speex编码,如此循环。
引用 8 楼 的回复:
引用……
[/Quote]
如果是这样的话,那往Buffer写数据的速度肯定是比编码的速度快.Buffer肯定会被写满的.要是加多一些Buffer,那接收方的声音就会延迟的.我这个项目是要求实时性的.
图灵狗
2012-08-23
打赏
举报
回复
原来如此!所以其实你应该把这个过程分成两个部分,用Double Buffer来解决问题,如果仍然不够快,可以试着增加Buffer,原理是一样的。两个Buffer假设都为32KB,PCM先往第一块Buffer写,第二块Buffer空闲,当写满后送给speex编码,PCM接着往第二块Buffer写,满了之后把第二块Buffer送给speex编码,如此循环。
[Quote=引用 8 楼 的回复:]
引用 7 楼 的回复:
数据是大于两帧的,知道帧数据的区别吗?是不同的通道,还是什么的?
好吧,就这么和你说吧.
我通过某种特别的方法获取耳机的PCM数据.但这种方法有个特点,如果你不快点把数据读出数据就会丢失.
现在我要用speex编码然后再用网络发送出去.可是speex编码速度不够快,使得PCM数据丢失.现在我只是想提高speex编码速度就用多线程进行同时编码.可是多线程编……
[/Quote]
就想叫yoko
2012-08-23
打赏
举报
回复
采集到的PCM数据应该放入队列,另起线程做编码发送处理。
图灵狗
2012-08-22
打赏
举报
回复
你的音频设备应该只有1个,2个以上的线程不能同时去操作音频设备,所以你得用一些信号量来管理它。
iOS平台
Speex
音频
处理实践:录音与播放
本文围绕iOS平台
Speex
音频
处理展开,介绍了
Speex
音频
压缩库及其编解码原理,阐述了在iOS中集成
Speex
库的方法,包括安装、配置与验证。还讲解了iOS
音频
会话配置、使用
Speex
进行
音频
录制
编码
和解码播放,以及用户界面设计、错误处理和
问题
排查优化等内容。
(原创)
speex
与wav格式
音频
文件的互相转换
本文详细介绍了如何将wav文件转换为
Speex
格式以实现语音会议功能,包括
编码
、解码过程及遇到的
问题
解决。重点讨论了如何处理
Speex
格式的限制,以及与其他
音频
格式(如mp3、wav)之间的转换,同时提供了关键代码片段。通过对比
Speex
与gauss算法的
编码
效率,揭示了
Speex
的强大压缩能力,以及其在实际应用中的优势和局限。
FMS直播流发布时 Microphone
Speex
编码
设置注意事项
本文探讨了为何在FP版本中引入
Speex
编码
,并详细解释了如何通过控制
Speex
的质量参数来实现更稳定的
音频
带宽控制。同时,文章还指出
Speex
编码
在实际应用中存在音质不理想的
问题
,以及如何通过调整噪声抑制参数来解决这一
问题
。最后,文章对比了
Speex
与其他
音频
编码
类型的优劣,并展望了FP未来版本中
音频
编码
的改进方向。
C语言
70,039
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章