PJSIP arm 开发笔记

2024-02-17 04:58
文章标签 开发 笔记 arm pjsip

本文主要是介绍PJSIP arm 开发笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://blog.csdn.net/suer0101/article/details/7488783

 

浮点的可用性

PJ_HAS_FLOATING_POINT这个宏可以控制浮点的可用性,它在头文件<pj/config.h>里面默认设置为1,你也可以在<pj/config_site.h>里面把它复写为0。


PJLIB, PJLIB-UTIL和PJSIP不需要任何浮点的支持。即使浮点没有使用,它们也能正确地工作。但是,PJ_HAS_FLOATING_POINT这个宏却必须要设置来激活相应的一些低效率运行的代码(fallback code)。


在PJMEDIA里面情况不一样,像音频发生器、RTCP的统计、Speex的编解码、AEC这些PJMEDIA的组件使用定点来计算低效率运行的运算,它们是在PJ_HAS_FLOATING_POINT设置为0 时被激活的。但是,其它的一些组件就不能选择使用定点计算,所以不管浮点运算是否设置,基于浮点运算的代码会正常被使用,这样的组件有更改采样率、PLC、iLBC编解码。


移植pjprodect-1.12

在移植到开发板的时候,配置时选择不使用浮点,结果报出缺少库的错误,去掉那一特性后移植成功。可是,使用浮点计算的话对CPU的要求较高,到底硬件是否满足要求需要做实验进一步确认,先把它移植过去再说。

1)在/pjsip/include/pj/目录下创建config.h,编辑并加入:

#define PJ_IS_BIG_ENDIAN 0

[cpp] view plain copy print ?
  1. #define PJ_IS_LITTLE_ENDIAN 1 
#define PJ_IS_LITTLE_ENDIAN 1


 

否则会出错,没有定义处理器的大小端。一般CPU都是小端吧!大端比较少。个人认识,怎样辨别大小端呢?

[cpp] view plain copy print ?
  1. #include <stdlib.h> 
  2. #include <stdio.h> 
  3.  
  4. int  main(void
  5.     union 
  6.     { 
  7.         long l; 
  8.         char c[sizeof(long)]; 
  9.     }u; 
  10.   
  11.     u.l = 1; 
  12.     if (u.c[sizeof(long) - 1] == 1) 
  13.         printf("Your processor is big endian!\n"); 
  14.     else 
  15.         printf("Your processor is little endian!\n"); 
  16.          
  17.     return 0; 
#include <stdlib.h>
#include <stdio.h>int  main(void)
{union{long l;char c[sizeof(long)];}u;u.l = 1;if (u.c[sizeof(long) - 1] == 1)printf("Your processor is big endian!\n");elseprintf("Your processor is little endian!\n");return 0;
}


2) ./configure --prefix=/wo/arm/pjsip --host=arm-linux --disable-ssl --disable-opencore-amrnb

3) make dep

4) make

5) make install


静态编译PKGCONFIG

移植时我把静态库保存到/wo/arm/pjsip目录下,静态编译时首先需要设置终端的环境变量,然后再利用/lib/pkgconfig/libpjproject.pc文件进行交叉编译会比较简单,如果不这样做的话,你可以去看看你生成的库有多少,一个个去手动链接很麻烦的,竟然移植时生成了这个pc文件,那就好好利用它。

1)设置环境变量

export PKG_CONFIG_PATH=/wo/arm/pjsip/lib/pkgconfig:$PKG_CONFIG_PATH

这样设置好的环境变量仅在终端有效,查看是否设置成功:

echo $PKG_CONFIG_PATH

如果打印的是之前设置的路径就OK

2)makefile

以交叉编译测试程序中的录音程序为例

[cpp] view plain copy print ?
  1. all: recfile 
  2.  
  3. CC = arm-linux-gcc 
  4. recfile: recfile.c 
  5.     $(CC) -o $@ $< `pkg-config --cflags --libs libpjproject` 
  6.  
  7. clean: 
  8.     rm -f recfile 
all: recfileCC = arm-linux-gcc
recfile: recfile.c$(CC) -o $@ $< `pkg-config --cflags --libs libpjproject`clean:rm -f recfile


这样程序就交叉编译好了。

程序在开发板上运行时出错:

./recfile: error while loading shared libraries: libuuid.so.1: cannot open shared object file: No such file or directory

不能加载共享库,唉~又是库的问题!可是我在生成的静态库里面没有发现uuid这个库啊!不管了,修改PC文件,不链接这个库试试看。

可以正常运行,也不知道哪个程序会应用到这个库,不管,出问题再解决。uuid是用于身份的唯一标识,有什么用啊?在这处项目里面。

在编译playfile.c的时候提示没有util.h这个文件,在源码包的/pjsip-apps/src/samples里有这个文件,把它复制到编译后的include目录里面就可以了!

默认是最多保持4人的电话会议

 

这篇关于PJSIP arm 开发笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/716740

相关文章

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

如何基于Python开发一个微信自动化工具

《如何基于Python开发一个微信自动化工具》在当今数字化办公场景中,自动化工具已成为提升工作效率的利器,本文将深入剖析一个基于Python的微信自动化工具开发全过程,有需要的小伙伴可以了解下... 目录概述功能全景1. 核心功能模块2. 特色功能效果展示1. 主界面概览2. 定时任务配置3. 操作日志演示

JavaScript实战:智能密码生成器开发指南

本文通过JavaScript实战开发智能密码生成器,详解如何运用crypto.getRandomValues实现加密级随机密码生成,包含多字符组合、安全强度可视化、易混淆字符排除等企业级功能。学习密码强度检测算法与信息熵计算原理,获取可直接嵌入项目的完整代码,提升Web应用的安全开发能力 目录

一文教你如何解决Python开发总是import出错的问题

《一文教你如何解决Python开发总是import出错的问题》经常朋友碰到Python开发的过程中import包报错的问题,所以本文将和大家介绍一下可编辑安装(EditableInstall)模式,可... 目录摘要1. 可编辑安装(Editable Install)模式到底在解决什么问题?2. 原理3.

Python+PyQt5开发一个Windows电脑启动项管理神器

《Python+PyQt5开发一个Windows电脑启动项管理神器》:本文主要介绍如何使用PyQt5开发一款颜值与功能并存的Windows启动项管理工具,不仅能查看/删除现有启动项,还能智能添加新... 目录开篇:为什么我们需要启动项管理工具功能全景图核心技术解析1. Windows注册表操作2. 启动文件

使用Python开发Markdown兼容公式格式转换工具

《使用Python开发Markdown兼容公式格式转换工具》在技术写作中我们经常遇到公式格式问题,例如MathML无法显示,LaTeX格式错乱等,所以本文我们将使用Python开发Markdown兼容... 目录一、工具背景二、环境配置(Windows 10/11)1. 创建conda环境2. 获取XSLT

Android开发环境配置避坑指南

《Android开发环境配置避坑指南》本文主要介绍了Android开发环境配置过程中遇到的问题及解决方案,包括VPN注意事项、工具版本统一、Gerrit邮箱配置、Git拉取和提交代码、MergevsR... 目录网络环境:VPN 注意事项工具版本统一:android Studio & JDKGerrit的邮

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t