pjmedia高级API实现录音

这篇博客展示了如何利用pjmedia库的高级API进行录音操作。首先进行pjlib初始化,然后创建媒体实体endpoint和内存池。接着,创建用于写入wav文件的媒体端口,并打开音频设备端口。通过连接这两个端口开始录音,录音结束后,释放相关资源并关闭设备。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <pjlib.h>
#include <pjlib-util.h>
#include <pjmedia.h>
#include <stdlib.h>
#include <stdio.h>


/*
*录音
*/
int main(int argc, char *argv[])
{
pj_status_t status;
pj_caching_pool cp;
pjmedia_endpt *med_endpt;
pj_pool_t * pool;
pjmedia_port * file_port;
pjmedia_snd_port * snd_port;

if(argc<2)
{
printf("test2 wav文件名\n");
exit(1);
}


//初始化pjlib,必须!
status=pj_init();
PJ_LOG(3,("test2.c","pjlib初始化,成功"));


//创建pool factory,必须!后续内存分配、动态创建,需要
pj_caching_pool_init(&cp,&pj_pool_factory_default_policy,0);


//创建媒体实体endpoing
status= pjmedia_endpt_create(&cp.factory,NULL,1,&med_endpt);
if(status != PJ_SUCCESS)
PJ_LOG(3,("test2.c","创建媒体实例,错误"));
else
PJ_LOG(3,("test2.c","创建媒体实例,成功"));




//为文件播放创建内存池,池名称:wav
pool=pj_pool_create(&cp.factory,"wav",4000,4000,NULL);

//创建写wav文件媒体端口
status=pjmedia_wav_writer_port_create(pool,argv[1],8000,1,160,16,0,0,&file_port);
if(status != PJ_SUCCESS)
PJ_LOG(3,("test2.c","打开写wav文件,错误"));
else
PJ_LOG(3,("test2.c","打开写wav文件,成功"));


//创建音频设备端口
status=pjmedia_snd_port_create_rec(pool,-1,
PJMEDIA_PIA_SRATE(&file_port->info),
PJMEDIA_PIA_CCNT(&file_port->info),
PJMEDIA_PIA_SPF(&file_port->info),
PJMEDIA_PIA_BITS(&file_port->info),0,&snd_port);
if(status != PJ_SUCCESS)
PJ_LOG(3,("test2.c","打开音频设备,错误"));
else
PJ_LOG(3,("test2.c","打开音频设备,成功"));


//连接媒体端口与设备端口,开始播放
status=pjmedia_snd_port_connect(snd_port,file_port);
if(status != PJ_SUCCESS)
PJ_LOG(3,("test2.c","连接媒体端口与设备端口,错误"));
else
PJ_LOG(3,("test2.c","连接媒体端口与设备端口,成功"));


pj_thread_sleep(10);


printf("按<ENTER>退出录音\n");
getchar();


//
status = pjmedia_snd_port_destroy( snd_port );
    PJ_ASSERT_RETURN(status == PJ_SUCCESS, 1);
status = pjmedia_port_destroy( file_port );
    PJ_ASSERT_RETURN(status == PJ_SUCCESS, 1);


    pj_pool_release( pool );
    pjmedia_endpt_destroy( med_endpt );
    pj_caching_pool_destroy( &cp );
    pj_shutdown();



return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值