zoukankan      html  css  js  c++  java
  • 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

     1 //PJMEDIA  play a wav file
     2 //heat nan 
     3 //改编自官网实例
     4 #include<pjlib.h>
     5 #include<pjlib-util.h>
     6 #include<stdlib.h>
     7 #include<pjmedia.h>
     8 #include<stdio.h>
     9 int main()
    10 {
    11     pj_status_t status;
    12     char filename[50]="windows.wav";// the file's name which you are want to play
    13     pj_caching_pool cp;
    14     pjmedia_endpt *med_endpt;
    15     pj_pool_t *pool;
    16     pjmedia_port *file_port;
    17     pjmedia_snd_port *snd_port;
    18     int i;
    19     //if you want to use the pjlib lib, you must init it first
    20     status=pj_init();
    21     if(status==PJ_SUCCESS)
    22     {
    23         printf("pj_init success!
    ");
    24     }
    25     //在我们分配内存前需要首先建立一个pool factory
    26     pj_caching_pool_init(&cp, &pj_pool_factory_default_policy, 0);
    27     
    28     //创建一个媒体实例的endpoint
    29     status = pjmedia_endpt_create(&cp.factory, NULL, 1, &med_endpt);
    30     if(status!=PJ_SUCCESS)
    31     {
    32             PJ_LOG(3,("pjmedia create","failed"));
    33     }
    34     //为我们的文件播放器创建内存池
    35     pool=pj_pool_create(&cp.factory,"wav",4000,4000,NULL);
    36     //创建一个媒体端口从wav文件中播放
    37     status=pjmedia_wav_player_port_create(pool,&filename,20,0,0,&file_port);
    38     if(status!=PJ_SUCCESS)
    39     {
    40         PJ_LOG(3,("pjmedia port","Unable to use WAV file"));
    41     }
    42     //创建一个单向的音频设备端口来播放制定参数相关的音频流
    43     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);
    44     if(status!=PJ_SUCCESS)
    45     {
    46         PJ_LOG(3,("pjmedia","create player failed"));
    47     }
    48     //连接文件端口和音频设备端口
    49     status=pjmedia_snd_port_connect(snd_port,file_port);
    50     if(status!=PJ_SUCCESS)
    51     {
    52         PJ_LOG(3,("connect","failed"));
    53     }
    54 
    55     //如果成功,音乐已经开始响起
    56     /*
    57     for(i=0;i<100;++i)
    58     {
    59          pj_int16_t framebuf[640];
    60          pjmedia_frame frm;
    61          pj_int32_t level32;
    62          unsigned ms;
    63          int level;
    64 
    65          frm.buf=framebuf;
    66          frm.size=sizeof(framebuf);
    67 
    68          pjmedia_port_get_frame(file_port,&frm);
    69 
    70          level32=pjmedia_calc_avg_signal(framebuf,PJMEDIA_PIA_SPF(&file_port->info));
    71          level=pjmedia_linear2ulaw(level32)^0xFF;
    72          ms=i*1000*PJMEDIA_PIA_SPF(&file_port->info)/PJMEDIA_PIA_SRATE(&file_port->info);
    73          printf("%03d.%03d	%07d	%7d
    ",ms/1000,ms%1000,level,level32);
    74     }
    75 
    76 */
    77     //提示
    78      printf("Press<ENTER>to stop the music!
    ");
    79     
    80 getchar();
    81 
    82     return 0;
    83 
    84 
    85 }
  • 相关阅读:
    001.Kubernetes简介
    DOCKER学习_018:Docker-Compose文件简介
    DOCKER学习_017:Docker-Compose介绍
    DOCKER学习_016:Docker镜像仓库和HARBOR的简单安装和管理
    DOCKER学习_015:Docker网络补充
    接口漏洞
    Shodan搜索引擎在信息搜集中的应用
    Google在情报搜集中的基础技巧
    数据抓包分析基础
    文件上传之图片木马的学习
  • 原文地址:https://www.cnblogs.com/heat-man/p/3647416.html
Copyright © 2011-2022 走看看