pjmedia高级API实现放音

这个博客展示了如何使用pjmedia高级API在C语言中实现WAV音频文件的播放。首先,初始化pjlib库并创建内存池,然后打开声音设备。接着,创建用于读取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;


pj_pool_t * pool;
pjmedia_port * file_port;
pjmedia_snd_port * snd_port;

if(argc<2)
{
printf("test1 wav文件名\n");
exit(1);
}
//初始化pjlib,必须!
status=pj_init();
PJ_LOG(3,("test1.c","pjlib初始化,成功"));


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


//打开声音设备
status = pjmedia_aud_subsys_init(&cp);
if(status != PJ_SUCCESS)
PJ_LOG(3,("test1.c","打开声音设备,错误"));
else
PJ_LOG(3,("test1.c","打开声音设备,成功"));




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

//创建读wav文件媒体端口
status=pjmedia_wav_player_port_create(pool,argv[1],20,0,0,&file_port);
if(status != PJ_SUCCESS)
PJ_LOG(3,("test1.c","打开读wav文件端口,错误"));
else
PJ_LOG(3,("test1.c","打开读wav文件端口,成功"));


//创建音频设备端口
status=pjmedia_snd_port_create_player(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,("test1.c","打开播放音频端口,错误"));
else
PJ_LOG(3,("test1.c","打开播放音频端口,成功"));


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


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

pj_thread_sleep(100);


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);
pjmedia_aud_subsys_shutdown();
    pj_pool_release( pool );


    pj_caching_pool_destroy( &cp );
    pj_shutdown();


return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值