社区
C语言
帖子详情
关于speex音频编码的问题.
honglqin
2012-08-22 06:31:17
最近在研究speex音频编解码.如果是一个线程在进行编码的话那是可以用的.但是为了提高编码速度,我想用两个或两个以上的线程同时编码两个或两个以上帧的数据.可是这样编码出来的数据解码后播放出来完全不对啊.
有没有哪位大侠知道如何用speex在多线程下同时编码的吗?
...全文
480
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
音频
处理实践:录音与播放
Speex
是一个专为语音设计的开源
音频
压缩格式,由Xiph.Org基金会提供支持。它在互联网语音通讯领域中广泛应用,特别是在VoIP(Voice over Internet Protocol)中。
Speex
以其高度优化的算法在低带宽情况下也能提供清晰的语音质量,并且是免费且无专利限制的,使其成为开发者们喜爱的
音频
处理工具之一。
(原创)
speex
与wav格式
音频
文件的互相转换
我们的司信项目又有了新的需求,就是要做会议室。然而需求却很纠结,要继续按照原来发语音消息那样的形式来实现这个会议的功能,还要实现语音播放的计时,暂停,语音的拼接,还要绘制频谱图等等。 如果是wav,mp3不论你怎么拼接,绘制频谱图,我也没有
问题
,网上都有现成的例子。然而这一次居然让用
speex
的
音频
做这一切。 于是看了司信之前的发语音消息部分
speex
的代码,天啊,人家录的时候这是实时录音实时...
关于
音频
编码
标准AAC,Opus,MP3的概念、原理、优缺点
音频
编码
标准是用于压缩数字
音频
数据的技术规范,以减少存储和传输所需的带宽。
C语言
70,040
社区成员
243,237
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章