PJSIP-PJMEDIA【使用pjmedia 播放wav格式的音乐】
应宝哥建议以及更好的交流学习,这篇开始使用中文,英语就先放一放吧!
要使用PJSIP中的PJMEDIA首先我们需要搭建好它所需要的环境。
【环境搭建与调试】
1 在 工具 加入pjmedia所需要的包含文件以及库文件
2 在 项目属性 中的加入包含文件以及库文件和具体使用到的库名
3 编译过程中出现无法解析外部符号时,自习观察报错的提示,(如关键字可能为srtp,可以去工程文件下的third_party中去添加相关库或者包含文件)。
【实例功能】
播放一个wav格式的文件。
实例出处:http://www.pjsip.org/docs/latest/pjmedia/docs/html/page_pjmedia_samples_playfile_c.htm
//PJMEDIA play a wav file
//heat nan
//改编自官网实例
#include<pjlib.h>
#include<pjlib-util.h>
#include<stdlib.h>
#include<pjmedia.h>
#include<stdio.h>
int main()
{
pj_status_t status;
char filename[]="windows.wav";// the file's name which you are want to play
pj_caching_pool cp;
pjmedia_endpt *med_endpt;
pj_pool_t *pool;
pjmedia_port *file_port;
pjmedia_snd_port *snd_port;
int i;
//if you want to use the pjlib lib, you must init it first
status=pj_init();
if(status==PJ_SUCCESS)
{
printf("pj_init success!\n");
}
//在我们分配内存前需要首先建立一个pool factory
pj_caching_pool_init(&cp, &pj_pool_factory_default_policy, ); //创建一个媒体实例的endpoint
status = pjmedia_endpt_create(&cp.factory, NULL, , &med_endpt);
if(status!=PJ_SUCCESS)
{
PJ_LOG(,("pjmedia create","failed"));
}
//为我们的文件播放器创建内存池
pool=pj_pool_create(&cp.factory,"wav",,,NULL);
//创建一个媒体端口从wav文件中播放
status=pjmedia_wav_player_port_create(pool,&filename,,,,&file_port);
if(status!=PJ_SUCCESS)
{
PJ_LOG(,("pjmedia port","Unable to use WAV file"));
}
//创建一个单向的音频设备端口来播放制定参数相关的音频流
status=pjmedia_snd_port_create_player(pool,-,PJMEDIA_PIA_SRATE(&file_port->info),PJMEDIA_PIA_CCNT(&file_port->info), PJMEDIA_PIA_SPF(&file_port->info), PJMEDIA_PIA_BITS(&file_port->info),, &snd_port);
if(status!=PJ_SUCCESS)
{
PJ_LOG(,("pjmedia","create player failed"));
}
//连接文件端口和音频设备端口
status=pjmedia_snd_port_connect(snd_port,file_port);
if(status!=PJ_SUCCESS)
{
PJ_LOG(,("connect","failed"));
} //如果成功,音乐已经开始响起
/*
for(i=0;i<100;++i)
{
pj_int16_t framebuf[640];
pjmedia_frame frm;
pj_int32_t level32;
unsigned ms;
int level; frm.buf=framebuf;
frm.size=sizeof(framebuf); pjmedia_port_get_frame(file_port,&frm); level32=pjmedia_calc_avg_signal(framebuf,PJMEDIA_PIA_SPF(&file_port->info));
level=pjmedia_linear2ulaw(level32)^0xFF;
ms=i*1000*PJMEDIA_PIA_SPF(&file_port->info)/PJMEDIA_PIA_SRATE(&file_port->info);
printf("%03d.%03d\t%07d\t%7d\n",ms/1000,ms%1000,level,level32);
} */
//提示
printf("Press<ENTER>to stop the music!\n"); getchar(); return ; }
PJSIP-PJMEDIA【使用pjmedia 播放wav格式的音乐】的更多相关文章
- MmSystem播放Wav格式声音
//MmSystem播放Wav格式声音 //MmSystem 支持 *.wav声音格式 snd ->SoundRecorderuses MmSystem; //引用MmSystem//播放系统声 ...
- 多浏览器播放wav格式的音频文件
html5的audio标签只在火狐下支持wav格式的音频播放,无法兼容IE和google , 使用audioplayer.js 基本上能支持大部分浏览器播放wav音频文件,经测试IE.火狐.googl ...
- C# 使用System.Media.SoundPlayer播放wav格式的声音文件
using System.Media; string szPath = Application.StartupPath + “\\SoundFile\\sound.wav”; SoundPlayer ...
- c#使用SoundPlayer播放wav格式音频
1.引用System.Media名称空间下的类SoundPlayer SoundPlayer player = new SoundPlayer(); 2.方法调用Play(); public vo ...
- linux下alsa架构音频驱动播放wav格式文件
#include<stdio.h> #include<stdlib.h> #include <string.h> #include <alsa/asoundl ...
- 8086汇编语言 调用声卡播放wav文件(sound blaster)
开更 大概最后做了一个能播放无损音乐(无压缩.不需解码)的播放器 原理是基于dosbox的模拟声卡,通过硬件之间的相互通讯做到的 关于详细内容接下来再讲. 一.从dosbox入手 我们知道cpu可以直 ...
- foobar2000播放APE格式音乐的解决办法
要使foobar2000能播放APE格式的音乐需要安装Monkey's Audio Decoder的插件.操作如下: 1.登录官方插件列表,找到Monkey's Audio Decoder插件 官方插 ...
- wave文件(*.wav)格式、PCM数据格式, goldwave 可以播放pcm raw audio
1. 音频简介 经常见到这样的描述: 44100HZ 16bit stereo 或者 22050HZ 8bit mono 等等. 44100HZ 16bit stereo: 每秒钟有 44100 次采 ...
- Android音频: 怎样使用AudioTrack播放一个WAV格式文件?
翻译 By Long Luo 原文链接:Android Audio: Play a WAV file on an AudioTrack 译者注: 1. 因为这是技术文章,所以有些词句使用原文,表达更准 ...
随机推荐
- 什么是DTO?
DTO: Data Transfer Object Wikipedia定义:Data transfer object (DTO)[1][2] is an object that carries dat ...
- Axure 8 Tab制作
1 在[页面]面板中选中[page1] 2 在[元件库]中选中[动态面板],并拖拽到[设计区域]中 3 双[设计区域]中的动态面板,打开[动态面板管理]页面 4 在[动态面板管理]页面中输入动态面板的 ...
- 打表格,字符串处理,POJ(2136)
题目链接:http://poj.org/problem?id=2136 水题WA了半天,结果是数组开小了. #include <stdio.h> #include <string.h ...
- Oracle数据库几种启动方式及查询当前状态
Oracle数据库几种启动方式 1.startup nomount: 非安装启动,这种方式下启动可执行:重建控制文件.重建数据库,读取init.ora文件,启动instance,即启动SGA和后台进程 ...
- 【Java】异常 —— throw, throws, try catch 相关内容
嗯……面试考到了这个,又是一个如无意外 那么接下来就总结吧 一.什么是异常 程序运行过程中发生的异常事件. RuntimeException通常是因为编程员因为疏忽没有检查而引起的错误. 二.Exce ...
- WKWebView 屏蔽长按手势 - iOS
研究半天还跟正常套路不一样,WKWebView 需要将 JS 注入进去,套路啊 ... 查半天资料,为了后者们开发可以提高效率,特此分享一下,不到的地方多多包涵哈. 废话不多说,直接上 code,将如 ...
- elasticsearch-dsl聚合-1
接续上篇,本篇介绍elasticsearch聚合查询,使用python库elasticsearch-dsl进行聚合查询操作. 7.3.聚合查询 高阶概念 Buckets(桶/集合):满足特定条件的文档 ...
- 云计算之KVM虚拟化实战
1 基础环境规划 1.1 主机环境规划 系统版本 主机名 IP地址 内存 磁盘 CentOS6.9 kvm-node1 10.0.0.200 2G 20G CentOS6.9 kvm-node2 10 ...
- 关于移动端video标签层级问题
这是在微信中正常页面,就是用了一个原生video标签没做任何处理.然后顶部是固定页面顶端的,这个时候向上滑动页面时,会出现下图现象 这个时候正常人都会想到z-index问题,我也是这样想的,可惜很抱歉 ...
- 微信小程序插件内页面跳转和参数传递
在此以插件开发中文章列表跳传文章详情为例. 1.首先在插件中的文章列表页面wxml中绑定跳转事件. bindtap='url' data-id="{{item.article_id}}&qu ...