1106|1

185

帖子

3

TA的资源

一粒金砂(高级)

楼主
 

【米尔 NXP i.MX93 开发板评测】 PJSIP开发笔记 [复制链接]

本帖最后由 小麦克 于 2024-7-31 14:20 编辑

之前写了一篇开箱报告,了解到开发板自带了ARM原生GCC编译器。这篇帖子我们通过ARM原生GCC编译器来测试一下第三方PJSIP库开发。

PJSIP

PJSIP是一个包含了SIP、SDP、RTP、RTCP、STUN、ICE等协议实现的开源库。它把基于信令协议SIP的多媒体框架和NAT穿透功能整合成高层次、抽象的多媒体通信API,这套API能够很容易的一直到各种构架中,不管是桌面计算机,还是嵌入式设备等。
后面我们可以通过这个库实现一个网络对讲机。

准备工作

使用ssh登陆开发板,串口也可以,但是串口打印字符比较耗时间。我一般用来做一些基本命令的操作。

  1. ssh root@172.20.10.5

显示文件信息ls命令默认没有颜色,编辑~/.profile文件

  1. cd ~
  2. vi .profile
  3. # 在文件末尾添加
  4. alias ls='ls --color'
  5. source ./.profile

下载编译

下载最新的PJSIP 2.14.1,添加-fPIC,支持C++

  1. # 下载最新的PJSIP库
  2. wget https://github.com/pjsip/pjproject/archive/refs/tags/2.14.1.tar.gz
  3. # 解压
  4. tar -xzf 2.14.1.tar.gz
  5. cd pjproject-2.14.1
  6. # 配置
  7. ./configure
  8. # 创建 user.mak
  9. touch user.mak
  10. # 编辑添加 CFLAGS += -fPIC
  11. vi user.mak
  12. export CFLAGS += -fPIC
  13. make dep
  14. # 使用双核心编译,加快编译速度
  15. make -j2

可以看到-j2编译时CPU利用率为100%,能完全榨干CPU的性能

不到10分钟,编译成功,pjsip-apps目录下有自带的测试例程。

功能测试

  1. cd pjsip-apps/bin
  2. # 执行PJSIP自带的测试程序
  3. ./pjsystest-aarch64-unknown-linux-gnu

报错:找不到音频设备的问题,这是因为PJSIP依赖ALSA库,设备中没带ALSA的开发包。

解决方法

编辑 ./pjproject/pjlib/include/pj/config_site.h 添加宏定义PJMEDIA_AUDIO_DEV_HAS_ALSA

  1. #include <pj/config_site_sample.h>
  2. #define PJMEDIA_AUDIO_DEV_HAS_ALSA 1

再次编译

  1. make clean
  2. ./configure
  3. make dep -j2
  4. make -j2

编译报错 fatal error: alsa/asoundlib.h: No such file or directory

参考这里

需要下载安装asoundlib库。

  1. # fatal error: alsa/asoundlib.h: No such file or directory
  2. wget http://www.alsa-project.org/files/pub/lib/alsa-lib-1.2.12.tar.bz2
  3. tar -xjf alsa-lib-1.2.12.tar.bz2
  4. cd alsa-lib-1.2.12/
  5. # 配置
  6. ./configure
  7. make -j2
  8. make install

继续通过./pjsip-apps/bin/pjsystest-aarch64-unknown-linux-gnu查询音频设备

  1. M E N U :
  2. ---------
  3. 0: Tests
  4. 00: Run test wizard
  5. 01: Device Test
  6. 02: Play Tone
  7. 03: Play WAV File1
  8. 04: Play WAV File2
  9. 05: Record Audio
  10. 06: Latency Test
  11. 07: AEC/AES Test
  12. 09: Exit
  13. 1: Options
  14. 10: View Devices
  15. 11: View Settings
  16. Enter the menu number: 10
  17. 14:41:03.128 systest.c Running Audio Device List
  18. Audio Device List
  19. Found 2 devices
  20. 0: ALSA [pulse] (1/1)
  21. 1: ALSA [sysdefault:CARD=SGTL5000Card] (1/1)

可以看到这里查询到了两个设备

作为对比,使用ALSA的 arecordaplay 工具查询音频设备列表,看看有什么差别。

音频接口查询,注意-l-L 查询的结果有差别。

  1. # 查看输入音频接口
  2. root@myd-lmx9x:~# arecord -l
  3. **** List of CAPTURE Hardware Devices ****
  4. card 0: SGTL5000Card [SGTL5000-Card], device 0: 443b0000.sai-sgtl5000 sgtl5000-0 [443b0000.sai-sgtl5000 sgtl5000-0]
  5. Subdevices: 1/1
  6. Subdevice #0: subdevice #0
  7. root@myd-lmx9x:~# arecord -L
  8. null
  9. Discard all samples (playback) or generate zero samples (capture)
  10. pulse
  11. PulseAudio Sound Server
  12. sysdefault:CARD=SGTL5000Card
  13. SGTL5000-Card, 443b0000.sai-sgtl5000 sgtl5000-0
  14. Default Audio Device
  15. # 查看输入音频接口
  16. root@myd-lmx9x:~# aplay -l
  17. **** List of PLAYBACK Hardware Devices ****
  18. card 0: SGTL5000Card [SGTL5000-Card], device 0: 443b0000.sai-sgtl5000 sgtl5000-0 [443b0000.sai-sgtl5000 sgtl5000-0]
  19. Subdevices: 1/1
  20. Subdevice #0: subdevice #0
  21. root@myd-lmx9x:~# aplay -L
  22. null
  23. Discard all samples (playback) or generate zero samples (capture)
  24. pulse
  25. PulseAudio Sound Server
  26. sysdefault:CARD=SGTL5000Card
  27. SGTL5000-Card, 443b0000.sai-sgtl5000 sgtl5000-0
  28. Default Audio Device
  29. root@myd-lmx9x:~#

接下来对比正点原子IMX93开发板查询结果,这块开发板接上了H340 USB耳机。

两款开发板用的音频芯片不一样,正点原子使用的是国产ES8388,米尔和官方EVK开发板使用一样的音频芯片SGTL5000

  1. root@atk-imx93:~/work# aplay -l
  2. **** List of PLAYBACK Hardware Devices ****
  3. card 0: es8388audio [es8388-audio], device 0: HiFi ES8388 HiFi-0 [HiFi ES8388 HiFi-0]
  4. Subdevices: 1/1
  5. Subdevice #0: subdevice #0
  6. card 1: H340 [Logi USB Headset H340], device 0: USB Audio [USB Audio]
  7. Subdevices: 1/1
  8. Subdevice #0: subdevice #0
  9. # 录音:指定H340作为输入MIC
  10. arecord -D plughw:1,0 -f cd -t wav -d 10 test.wav
  11. # 播放:指定H340作为输出SPEAKER
  12. aplay -D plughw:1,0 test.wav

其他

测试中,找到了相关命令测试方法,一并记录在这里

  1. / # arecord -l
  2. **** List of CAPTURE Hardware Devices ****
  3. card 0: xxsndcard [xx-snd-card], device 1: TDM_Capture (*) []
  4. Subdevices: 1/1
  5. Subdevice #0: subdevice #0
  6. card 0: xxsndcard [xx-snd-card], device 2: DMIC_Capture (*) []
  7. Subdevices: 1/1
  8. Subdevice #0: subdevice #0
  9. card 0: xxsndcard [xx-snd-card], device 3: AWB_Record (*) []
  10. Subdevices: 1/1
  11. Subdevice #0: subdevice #0
  12. # 录音
  13. arecord -Dhw:0,1 -d 10 -f cd -r 44100 -c 2 -t wav test.wav
  14. 参数解析
  15. -D 指定了录音设备,0,1 是card 0 device 1的意思,也就是TDM_Capture
  16. -d 指定录音的时长,单位秒
  17. -f 指定录音格式 cd cdr dat
  18. -r 指定了采样率,单位Hz
  19. -c 指定channel个数
  20. -t 指定生成的文件格式

调整音量

默认的输入音量有点小,先调整一下

  1. alsamixer

我的电脑F快捷键有问题,通过tab键切换到Capture。由于对Linux音频不太了解,这么多输入项,都调大点吧~

对讲测试

进行简单的SIP点对点测试,验证测试音频实时对讲是否正常

  1. cd pjsip-apps/bin/samples/aarch64-unknown-linux-gnu
  2. # 172.20.10.3为PC IP,安装了Linphone
  3. ./simpleua sip:bruce@172.20.10.3
  4. ./simpleua sip:bruce@172.20.10.14

经过测试发现,点对点的SIP已经能正确建立,但是没有声音。首先排除PC电脑端的声音问题,阅读simpleua.c源码,pjmedia_snd_port_create 使用了默认音频设备,可能是这里默认指定的设备有问题。

  1. /*
  2. * Create bidirectional port.
  3. */
  4. PJ_DEF(pj_status_t) pjmedia_snd_port_create( pj_pool_t *pool,
  5. int rec_id,
  6. int play_id,
  7. unsigned clock_rate,
  8. unsigned channel_count,
  9. unsigned samples_per_frame,
  10. unsigned bits_per_sample,
  11. unsigned options,
  12. pjmedia_snd_port **p_port)
  13. {
  14. //...
  15. }

rec_id 指录音设备id,play_id 指播放设备id。

改为 1, 0 后能正常语音了,但是感觉从开发板出去的音频有点卡顿。在下图红框中的时候声音会不正常,感觉被处理掉了

接上H340 USB耳机,改pjmedia_snd_port_create id为2,2,测试发现音频通话质量比较好。

  1. /* Create sound port */
  2. status = pjmedia_snd_port_create(inv->pool,
  3. 2,
  4. 2,
  5. PJMEDIA_PIA_SRATE(&media_port->info),/* clock rate */
  6. PJMEDIA_PIA_CCNT(&media_port->info),/* channel count */
  7. PJMEDIA_PIA_SPF(&media_port->info), /* samples per frame*/
  8. PJMEDIA_PIA_BITS(&media_port->info),/* bits per sample */
  9. 0,
  10. &g_snd_port);

结论

虽然IMX93包含两个A55的64位CPU,编译性能和普通的PC还是差太多,上面测试的PJSIP库在x86下面编译不到1分钟就搞定了。为了开发效率,我们后面还是使用PC进行开发。

最新回复

编译性能和普通的PC还是差太多,看了楼主的测试记录应该是这样   详情 回复 发表于 2024-8-1 09:02
点赞 关注
 

回复
举报

7023

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

编译性能和普通的PC还是差太多,看了楼主的测试记录应该是这样

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
用于433MHz ISM频带的低功耗超再生接收器

用于433MHz ISM频带的低功耗超再生接收器 慧聪网2006年5月12日9时40分信息来源:EDN China   设计师经常选择 ...

最坏分析

最坏分析其实就是极端值分析:让你知道怎么样才会出问题。 Assure acceptable operation throughout the entire ...

[DIY]二十四小时的感动(古典版I) 自制QS30-1辉光管电子时钟【附百张图】

辉光管是电子管的一种,属于很古老的数码显示器件,在没有LED的年代,显示数字和符号就靠它。这种管子现在应该算古董了,这次DI ...

msp430 LaunchPad 驱动9320TFT液晶(有图有代码)

本例使用MSP430G2553实现,其他型号一样适用,仅改下头文件就OK TFT的主控型号为ili9320 ;9325也可以,仅需在程序中改动型号。 ...

从《圣经密码》想到的数列问题及python解法

这几天,孩子的数学课外学习群里,老师不再发几何、组合、数论、应用题了,连续天天发数列题。 老师把好好的学习氛围搞得跟脑 ...

Java后端开发需要的技术

Servlet Servlet技术是Java后端的重要技术之一,作为Java Web开发的核心组件,Servlet承担了Web MVC结构中的核心作用(功能导 ...

Adafruit Trinkey QT2040 迷你USB开发板

543539 543540 https://www.adafruit.com/product/5056

改造4-20mA两线制无源数显表第十贴(小功告成)

告别“下半身”:从预留的开槽连接处刀划切痕、掰断,改造板终于可以独立面世了: 548400 548401 548403 ...

【上海航芯 ACM32F070开发板+触控功能评估板测评】移植RT-Thread Nano

【上海航芯 ACM32F070开发板+触控功能评估板测评】移植RT-Thread Nano 为了更好的方便大家,同时方便自己,按照我的习惯,放 ...

春风吹拂万物新,天气晴朗去踏青

795310 795311 795312 795313 795314 795315

关闭
站长推荐上一条 1/10 下一条
有奖直播:当AI遇见仿真,会有什么样的电子行业革新之路?
首场直播:Simcenter AI 赋能电子行业研发创新
直播时间:04月15日14:00-14:50

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 7

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表