pjproject开篇

在voip行业多年,知道很多优秀的库,pjproject精致轻量,是一个入门级的学习素材。为了记录自己的学习成果,准备写一系列关于pjproject的相关博客。pjproject的官方地址是pjproject官方网站

概述

PJSIP 开源库由一系列功能库所组成:

  • PJLIB 是系统抽象层  
  • PPJLIB-UTIL 提供有用的工具函数  
  • PJNATH 解决NAT 穿越问题  
  • PJMEDIA 和PJMEDIA-CODEC 负责SDP 协商、媒体编码和媒体传输  
  • PJSIP 是核心SIP 协议栈  
  • PJSIP-SIMPLE 实现Presence个人信息和即时消息  
  • PJSIP-UA 提供SIP 用户代理库  
  • PJSUA 位于最高层,整合了下层模块的全部功能。

其实归结起来三大块,底层公共库pjlib,媒体栈pjmedia,sip协议栈pjsip。由于我的工作主要是音视频,因此分两个子系列,pjlib和pjmedia,pjsip暂不计划写博客笔记。

如果要开发一个软电话,有两种方法。第一种直接调用PJSUA-LIB的API,里面封装了sip和media,这种开发方式快速不灵活,其中示例代码pjproject-2.8\pjsip-apps\src\samples\simple_pjsua.c使用最高层的API,代码量很少。第二种选择在应用程序分别调用pjmedia和pjsip的API,这种方式灵活,也是比较主流的开发方法。示例代码pjproject-2.8\pjsip-apps\src\samples\simpleua.c使用比较底层的API,代码量相对较大,需要自己创建pjsip和pjmedia相关对象。

下面开始在ubuntu x64上编译运行pjproject

预编译

https://trac.pjsip.org/repos/wiki/Getting-Started/Build-Preparation

编译代码之前,需要创建自定义配置文件pjlib/include/pj/config_site.h,对于基于Makefile的编译系统是可以由Makefile自动创建的,但是对于如Windows的VS,需要手工创建。为什么需要创建自定义配置文件,因为受版本控制的配置文件在更新时容易被覆盖。自定义配置文件可以参考pjlib/include/config_site_sample.h

编译

https://trac.pjsip.org/repos/wiki/Getting-Started/Autoconf

./configure --prefix=/home/hyq/workspace/out --enable-shared --disable-static > hyq_configure.txt

make dep

make

make install

示例路径

https://trac.pjsip.org/repos/wiki/Getting-Started/Running-Applications

pjsua在pjsip-apps/bin

samples在在pjsip-apps/bin/samples

pjlib-test

pjmedia-test

pjsip-test

运行示例

# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/hyq/workspace/out/lib

make pjlib-test可以测试pjlib,同理可运行其它模块的测试,详细看Makefile就可以知道有哪些模块。

### 如何在 Unity 中制作启动时的开篇动画 要在 Unity 中创建一个启动时的开篇动画,可以利用 Unity 的内置功能来完成这一目标。以下是关于如何实现的具体方法: #### 使用 `Animation` 组件 Unity 提供了一个名为 `Animation` 的组件,它可以用来播放预定义好的动画片段 (Animation Clip)[^1]。通过将这些动画片段附加到场景中的对象上,就可以轻松地控制它们的行为。 首先,在 Unity 编辑器中新建一个 GameObject 并命名为 "OpeningAnimation" 或其他合适的名称。接着添加一个 Animator Controller 和 Animation Component 到这个物体上。确保已经准备好了所需的动画资源文件 (.anim),并将该文件拖拽至 Animation component 下方对应的字段里[^1]。 对于脚本部分,则可以根据实际需求决定是否需要自定义逻辑处理。如果只是单纯展示一段视频或者图片序列作为开场白的话,那么可能根本无需任何额外编码工作即可达成目的;然而当涉及到更复杂的交互操作比如按钮点击跳过等功能的时候就需要适当引入简单的 C# 脚本来辅助实现了[^3]。 另外值得注意的是, 如果计划最终导出为 Android 应用程序形式发布出去给更多用户下载体验的话还需要注意调整相关设置以适配不同设备屏幕尺寸等问题以及考虑性能优化等方面因素[^2][^4]. ```csharp using UnityEngine; public class OpeningSequenceController : MonoBehaviour { private bool _isPlaying = true; void Start(){ StartCoroutine(PlayIntro()); } IEnumerator PlayIntro() { yield return new WaitForSeconds(5); // 假设动画持续时间为5秒 _isPlaying = false; LoadNextScene(); } void Update(){ if(Input.anyKey && _isPlaying){ StopAllCoroutines(); _isPlaying=false; LoadNextScene(); } } void LoadNextScene(){ Application.LoadLevel("MainGame"); // 加载下一个游戏场景 } } ``` 上述代码展示了如何管理一个基础版本的启动画面控制器类。其中包含了等待特定时间自动切换场景的功能同时也允许玩家按下任意键提前结束观看过程并进入主要玩法区域。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值