PJLib开发杂谈

2023-05-16

去年公司搞了一个智慧乡村的项目,其中涉及到视频监控的问题。电信提供的解决方案,我们的平台只需要跟电信对接HLS流就可以了。这就有一个问题,原来公司安装的监控无法接入到自己的平台,好尴尬啊。。。。。。。于是在网上搜索一番大概意思可以通过GB28181协议,将摄像机接入一个媒体服务器,然后媒体服务器进行转码生成HLS流,那么问题就解决了。

    那就搞GB28181呗,再找一圈PJLIB专门干这事的,于是。。。。。

//设置日志级别
    pj_log_set_level(loglevel);
    //初始化PJLIB库
    pj_status_t status = pj_init();
    pj_assert(status == PJ_SUCCESS);
    if (status != PJ_SUCCESS) return m_isInit;
    //初始化PJLIB_UTIL库
    status = pjlib_util_init();
    pj_assert(status == PJ_SUCCESS);
    if (status != PJ_SUCCESS) return m_isInit;
    //初始化缓冲池,注意这里max_capacity被设置为0应该是自动增长,在PJLIB官方DEMO中是指定了一个值的CACHING_POOL_SIZE
    pj_caching_pool_init(&pjcontent.cp, &pj_pool_factory_default_policy,0);
    //创建一个缓冲池,并且指定了4000的大小,每次增长大小为4000
    pjcontent.pool = pj_pool_create(&pjcontent.cp.factory, "QLApp", 4000, 4000, NULL);
    //创建一个终端,名称为本地服务器机器名
    status = pjsip_endpt_create(&pjcontent.cp.factory, pj_gethostname()->ptr,&pjcontent.sip_endpt);
    pj_assert(status == PJ_SUCCESS);
    if (status != PJ_SUCCESS) return m_isInit;

    //为终端创建事务模块
    status = pjsip_tsx_layer_init_module(pjcontent.sip_endpt);
    pj_assert(status == PJ_SUCCESS);
    if (status != PJ_SUCCESS) return m_isInit;
    
    //为终端创建用户代理模块
    status = pjsip_ua_init_module(pjcontent.sip_endpt, nullptr);
    pj_assert(status == PJ_SUCCESS);
    if (status != PJ_SUCCESS) return m_isInit;

    //为终端创建临时响应模块
    status = pjsip_100rel_init_module(pjcontent.sip_endpt);
    pj_assert(status == PJ_SUCCESS);
    if (status != PJ_SUCCESS) return m_isInit;

    //从上下文中解析出服务器地址,并且初始化UDP传输模块
    pj_str_t pjStr = strToPjstr(getAddr());
    pj_sockaddr_in pjAddr;
    pjAddr.sin_family = pj_AF_INET();
    pj_inet_aton(&pjStr, &pjAddr.sin_addr);

    auto port = getPort();
    pjAddr.sin_port = pj_htons(static_cast<pj_uint16_t>(getPort()));
    status = pjsip_udp_transport_start(pjcontent.sip_endpt, &pjAddr, nullptr, 1, nullptr);
    pj_assert(status == PJ_SUCCESS);
    if (status != PJ_SUCCESS) return m_isInit;

然后我是想这封装一个服务器模式,一个客户端模式,于是。。。。

//初始化身份校验服务模块,回调函数lookup应该是具体执行身份校验过程。
    pj_status_t status = pjsip_auth_srv_init(pjcontent.pool, &pjcontent.auth_svr, &realm, &CPJContent::lookup, 0);
    pj_assert(status == PJ_SUCCESS);
    if (status != PJ_SUCCESS) return false;

    //初始化主模块
    if (!m_mainModule.init()) return false;
    //这里的主模块中主要是完成一些需要处理的事件回调函数的挂在,然后把模块注册到终端,这个模块会处理所有的通讯数据

    //初始化SIP协议控制模块
    if (!m_controlModule.init()) return false;
    //这里协议控制模块还是注册一个模块到终端,但是这个模块会负责具体的通讯协议处理

   //创建主线程
 status = pj_thread_create(pjcontent.pool, "mainThread", CPJContent::mainThreadProc, NULL, 0, 0, &workthread);
    pj_assert(status == PJ_SUCCESS);
    if (status != PJ_SUCCESS) return false;

到这里服务器模式基本就绪了,接下去就要处理通讯过程,等我写好了后面的代码再来吧啦吧啦

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PJLib开发杂谈 的相关文章

随机推荐

  • ULN2003步进电机 5V/12V步进电机 28BYJ-48步进电机 13003驱动板开发者文档

    13003步进电机驱动板介绍 我们设计的13003驱动板在核心电路上做了优化 xff0c 如果驱动板电源不小心接反了一下 xff0c 不会击穿单片机 可以驱动5v 28BYJ 48步进电机 12v28BYJ 48步进电机 单片机本身的io可
  • 记录一次ros的rviz和gazebo仿真地图,以及slam建模出现闪烁的问题,以及原因分析,机器人小车配置问题

    记录一次ros的rviz和gazebo仿真地图地图出现闪烁的问题 xff0c 以及原因分析 URDF 43 Gazebo 43 Rviz仿真 看到建立的地图是乱的 xff0c 原因是我的小车配置文件controllers xff0c 也就是
  • 蓝牙通信、串口通信、和can通信以及MCU之间的关系

    说明 xff1a 其端口和can需要设置波特率 xff1a 250 500 xff0c 和can的类型 xff0c can1 can2 串口直接和模拟量通信需要设置串口的信息 xff0c 如下图 xff1a 蓝牙和模拟量通信 xff0c 不
  • 使用 IDEA 几分钟就重构了同事800 行"又臭又长" 的类!真香!

    Python实战社群 Java实战社群 长按识别下方二维码 xff0c 按需求添加 扫码关注添加客服 进Python社群 扫码关注添加客服 进Java社群 来源丨java思维导图 http suo im 6fsMvG 最近在对已有项目进行扩
  • 全面了解超声波传感器

    为了研究和利用超声波 xff0c 人们已经设计和制成了许多超声波发生器 总体上讲 xff0c 超声波发生器可以分为两大类 xff1a 一类是用电气方式产生超声波 xff0c 一类是用机械方式产生超声波 电气方式包括压电型 磁致伸缩型和电动型
  • 卡尔曼滤波---公式推导和一些疑问

    该笔记是在学习up主DR CAN的关于卡尔曼滤波视频后做的笔记整理 up主主页 xff1a https space bilibili com 230105574 文章中有三个链接 xff0c 补充如下 xff1a 贝叶斯滤波 为什么是两个高
  • 联想笔记本G50-80 bios白名单修改

    联想笔记本G50 80 bios白名单修改 缘由 xff1a 更换网卡为AX200 xff0c 遇到bios白名单的限制 xff0c 需要修改bios程序 bios型号 xff1a B0CNA0WW 软件工具 xff1a UEFITOOL
  • acwing笔记

    文章目录 基础知识快速排序归并排序二分查找 基础数据结构数组模拟单链表trie字符串统计并查集堆模板 搜索和图论邻接表数组实现dfsbfskmp最短路最小生成树二分图 数学知识动态规划dp背包问题 贪心 基础知识 快速排序 span cla
  • 20220323华为笔试

    1 span class token macro property span class token directive hash span span class token directive keyword include span s
  • 《葵花宝典》计算机网络篇幅

    文章目录 七层网络模型和五层网络模型 xff0c 以及各自都有哪些常见协议 xff1f TCP UDP对比 xff0c 使用选择TCP为什么可靠 UDP怎样才能可靠扩展考察点 xff1a QUIC 协议TCP UDP报文头部格式TCP三次握
  • 亚马逊爬虫-python

    找实习遇到的作业 xff1a 最终结果 xff1a 实现代码分两部分 xff1a 抓取书籍id 爬取详细数据 1 xff1a import requests import re from pyquery import PyQuery as
  • http请求转串口通信模块实现网页发送文字硬件语音播放(esp8266 串口语音模块 )

    首先你有这样的8266 这两种8266自身带2个按键和烧录芯片方便调试 xff0c 综合性价比较高 还有就是需要这样的串口语音播放模块 有了这些我们开始吧 xff01 1 先看一段视频效果演示 xff0c 再来介绍实现步骤 http请求转串
  • 多智能体系统编队算法仿真--python3实现

    初始条件 xff1a 智能体位置随机生成所有智能体位置全局可知目标多边形位置给定所有个体运行相同算法 xff0c 根据环境来决定自己动作 目标 xff1a 形成均匀多边形分布 xff0c 所谓的 均匀 效果如下图 xff1a 即是多边形上间
  • 大众点评美食评论爬虫

    大家都知道的 xff0c 大众点评用了css反爬 xff0c 脑壳疼 评论文字使用SVG替换 然后还需要登录才能查看全部评论 xff0c 也就是要带cookie了 xff0c 此外时不时跳验证码 xff0c 验证码还有几种 xff0c 这帮
  • Python大佬手把手教你利用wxPython模块编写界面程序

    wxPython是一个开发桌面端图形界面的跨平台函数库 xff0c 开发语言为Python xff0c 它是基于C 43 43 的函数库wxWidgets的封装 很多人学习python xff0c 不知道从何学起 很多人学习python x
  • 什么是栈,栈存储结构详情

    什么是栈 xff0c 栈存储结构详情 同顺序表和链表一样 xff0c 栈也是用来存储逻辑关系为一对一数据的线性存储结构 xff0c 如图所示 从图1我们看到 xff0c 栈存储结构与之前学的线性存储有所差异 xff0c 这源于栈对数存和取的
  • C++cmath数学常用库中的代码介绍

    今天小编来分享一波C 43 43 cmath数学常用库中的常用代码 首先 xff0c 这些所有的代码都来自cmath库 xff0c 所以必须先引用cmath头文件 xff0c 即 xff1a include lt cmath gt 1 绝对
  • vue-cli-service Axios 持续返还401

    后端 xff1a 在登录超时或没有登录的情况 xff0c 所有请求都会拒绝并且返还HTTP状态码401 前端 xff1a 前端将认证的Token放到loadStorage中 xff0c 在认证失效时候清空 在接到HTTP状态码为401时 x
  • 载波相位测量

    1 简述GPS载波相位测量的基本原理 载波相位测量的观测量是GPS接收机所接收的卫星载波信号与接收机本振参考信号的相位差 利用接收机测定载波相位观测值 xff0c 经基线向量解算以获得两个同步观测站之间的基线向量坐标差 2 在高精度GPS测
  • PJLib开发杂谈

    去年公司搞了一个智慧乡村的项目 xff0c 其中涉及到视频监控的问题 电信提供的解决方案 xff0c 我们的平台只需要跟电信对接HLS流就可以了 这就有一个问题 xff0c 原来公司安装的监控无法接入到自己的平台 xff0c 好尴尬啊 于是