整合第三方媒体栈到PJSIP2.x的PJSUA-LIB
来源:互联网 发布:linux 服务器版本 编辑:程序博客网 时间:2024/06/09 22:01
转自:http://blog.csdn.net/tyler_xiang/article/details/61209815
对PJSUA-LIB中媒体定制处理在应用中有实际意义,例如:在安卓5.x系统下,硬件编解码、视频预览等功能已被安卓封装的极其方便易用(被封得也很死),且硬件解码设置时同时设定渲染设备的surfaceview,解码后会自动渲染。视频效果很好,且不易受界面线程影响。视频预览、硬件编解码在安卓方实现,编码后的h264媒体流,在定制后的PJSUA-LIB中RTP封包后,调用媒体传输端口的send_rtp功能,发送rtp包到SDP协商对远端UA;在PJSUA-LIB定制后的视频媒体处理中,对媒体传输端口收到RTP的回调做处理:从抖动缓冲区收到RTP包后,不做解码处理,将多个RTP包中相同时间戳的h264数据收齐后,将h264数据传到安卓端做硬件解码、渲染处理。
PJSUA-LIB是pjproject2.6中提供的高级别API,下图展示了PJSUA-LIB下左侧媒体处理部分和右侧SIP处理部分,及最上端应用程序pjsua对PJSUA-LIB的调用。应用程序调用PJSUA-LIB库中的API方便地实现:注册、呼叫、事件处理、媒体处理等功能。在方便的同时,也会受到PJSUA-LIB实现的体系制约。
下面的内容中前部分是从pjsip( https://trac.pjsip.org/repos/wiki/3rd_Party_Media)提供的英文文档翻译过来的,可以按下面的说明查看与媒体部分的相关函数,并从PJSUA-LIB的相关C文件中拷贝同名函数内部代码到alt_pjsua_aud.c和alt_pjsua_vid.c中。或者在工程文件中去除这两个文件中的一个文件,同时将pjsip/src/pjsua-lib源代码中pjsua_aud.c与pjsua_vid.c中的包裹全部代码的下列宏定义注释,这样可以保留PJSUA-LIB中的原音频/视频的功能。
#if defined(PJSUA_MEDIA_HAS_PJMEDIA) && PJSUA_MEDIA_HAS_PJMEDIA!= 0
#endif /* PJSUA_MEDIA_HAS_PJMEDIA */
从PJSIP2.0开始,加入了将第三方媒体整合到PJSUA-LIB的支持。按下列步骤,应用程序可以使用第三方媒体栈调用音频、视频,同时使用PJSUA_LIB中提供的完整SIP、NAT和安全(包括SRTP)功能。
下列PJMEDIA中的功能已经在PJSUA-LIB中被屏蔽 (除非由第三方媒体库提供等效实现):
- 声卡设备管理
- 回音抑制
- 编解码器
- 抖动缓冲区
- RTP和RTCP
- WAV文件播放和录音
- 会议桥
- RFC 2833定义的DTMF
- 等等,除了下面提到的功能
下列功能可以使用:
- 完整SIP功能,包括SIP注册等等。
- SDP和SDP协商
- NAT穿越功能(包括ICE)
- Security功能包括TLS和SRTP
- 媒体端口
下面三个步骤用PJSUA-LIB整合第三方媒体库:
- 在文件pjlib/include/pj/config_site.h中添加:
#definePJSUA_MEDIA_HAS_PJMEDIA 0
从PJSUA-LIB库排除PJMEDIA具体实现,可以理解为:你会失去在PJSUA-LIB的所有媒体功能(这将在你的第三方媒体栈处理)。
- 同时从pjsip-apps/src/3rdparty_media_sample/config_site.h复制建议设置到pjlib/include/pj/config_site.h . 这些设置主要用于从编译过程中排除不需要的媒体组件。
- 使用以下命令构建库
$ make lib
而不是make或make all。这是因为大多数样板程序由于在PJSUA-LIB中由于缺少媒体错误,将不能被构建建。命令 makelib仅构建单元测试需要的库。
- 转到pjsip-apps/src/3rdparty_media_sample目录。此处样板程序展示了整合第三方媒体库的切入点。在alt_pjsua_xxx.c文件内的“TODO”处中填加媒体实现。
- 运行 make命令构建应用,完成后,运行alt_pjsua,功能与pjsua相同。
- 整合第三方媒体栈到PJSIP2.x的PJSUA-LIB
- 整合第三方媒体栈到PJSIP2.x的PJSUA-LIB
- 如何整合第三方SDK到Plugin-X
- 添加 第三方库的源代码 到 Visual Assist X
- android lib 第三方 库的使用
- c++ 使用的第三方lib库
- Javaweb 好用的第三方Lib
- Android NDK 引用第三方.so库到lib下
- iOS 第三方之流媒体
- iOS 第三方之流媒体
- iOS 第三方之流媒体
- iOS 第三方之流媒体
- PJSIP2.7 Android版本编译及构建pjsua2和pjsua
- android调用第三方库——第三篇——编写库android程序整合第三方库libhello.so到自己的库libhelloword.so
- android调用第三方库——第三篇——编写库android程序整合第三方库libhello.so到自己的库libhelloword.so
- 微博第三方如何整合到项目中
- Android4.2.2源码编译-如何把第三方的动态库重新编译到Android系统的/system/lib目录
- Android4.2.2源码编译-如何把第三方的动态库重新编译到Android系统的/system/lib目录
- 深度学习资料汇总(满满的干货)
- javaIO流详解
- jspdemo
- 泛型
- UML类图几种关系的总结
- 整合第三方媒体栈到PJSIP2.x的PJSUA-LIB
- Subsequence(常用技巧(尺取法))
- unit12 不同系统间的文件传输
- [编程题]京东2016-买糖果
- 常见的正则表达式全面整理总结
- applicationContext.xml文件如何调用外部properties等配置文件
- Android中四大组件,六大布局,五大存储
- pwnable.kr之uaf
- rsync在linux(服务端)与windows(客户端)之间同步