3 呆瑞

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 18w+

rtsp流转rtmp流

一 socket拉取rtsp流。先讲rtsp拉流的过程,如下是rtsp命令交互的过程,后面一点点分解。OPTIONS rtsp://192.168.31.29:554/0/0/101?transportmode=unicast&profile=Profile_1 RTSP/1.0CSeq: 2RTSP/1.0 200 OKCSeq: 2Public: OPTIONS, DESCRIBE, PLAY, PAUSE, SETUP, TEARDOWN, SET_PARAMETER, G

2020-09-02 16:58:30

最简单的GB28181视频PS流播放器。

一 从PS流中提取h264和aac。移步:https://blog.csdn.net/qq_39805297/article/details/107083322二 基于ffmpeg解码h264获取rgb图像,解码aac成pcm格式。bool H264Decoder::init(){ av_register_all(); _pCodecContext = avcodec_alloc_context3(NULL); _pH264VideoDecoder = avcodec_find_dec

2020-08-31 15:43:00

基于librtmp推送h264文件至媒体服务器。

一 可以搭建nginx作为rtmp服务器,需要的自行搜索nginx搭建rtmp服务器。二 安装librtmp。三 代码如下:(已上传至github https://github.com/cdebug/h264_to_rtmp)sps_decode.h/** * Simplest Librtmp Send 264 * * 雷霄骅,张晖 * leixiaohua1020@126.com * zhanghuicuc@gmail.com * 中国传媒大学/数字电视技术 * Commu

2020-08-27 17:54:07

QTreeWidget整行选中的边框样式

效果如下:首先是用QSS来设置,把能做的都做了,设置branch和item的上下边框,最后一个item的有边框,如下:QTreeWidget::item:selected{border-top:1px solid #8d8d8d;border-bottom:1px solid #8d8d8d;}QTreeWidget::item:last:selected{border-right:1px solid #8d8d8d;}QTreeWidget::branch:selected{

2020-08-07 09:34:09

jrtplib发送数据时指定起始的序列号(Seq)和时间戳(Timestamp)

使用jrtplib发送数据的时候没有开放的接口设置序列号和时间戳,所以抓包看到的包的起始序列和时间是随机数,而我的项目里需要时从0开始的。这是因为源码中已经把这个参数写死为随机数了,修改下源码再重新编译即可。将以下两处的随机数的赋值改为0.https://github.com/j0r1/JRTPLIB/blob/master/src/rtppacketbuilder.cpp#L165https://github.com/j0r1/JRTPLIB/blob/master/src/rtppack

2020-07-17 09:07:26

GB28181学习之路——PS流解复用H264和ACC

上一篇讲了PS中提取视频,今天顺手把音频提取的也做了出来,代码结构也梳理了一下。音频提取的方式和视频是一样的,关于视频的提取方式请移步:GB28181学习之路——PS流解析H264话不多说直接上代码了streamresolver.h:#ifndef STREAMRESOLVER_H#define STREAMRESOLVER_H#include <iostream>#include "common.h"class StreamResolver{public:

2020-07-02 14:19:35

GB28181学习之路——PS流解析H264

磕磕绊绊的做了出来,也算为自己留个资料吧。先讲理论再上代码。挑些重点讲。1. 首先就是获取到 rtp 包,rtp包的结构是:rtp包头+payload,payload就是我们要的ps包,rtp包头的长度是12个字节,所以rtp包去掉前12字节就是ps包了。比如这个 rtp 包,跳过12个字节,从00 00 01 ba 开始就是ps包了。2. 找到ps包之后就要从它的格式入手开始解析,ps荷载h264是把一帧帧的数据打包传过来,一个完整的ps包会包含一帧的数据。而h264的帧分为 i 帧和

2020-07-01 10:31:00

Qt+VLC视频画面上覆盖半透明控件

很多人遇到过这个问题吧,我也不例外,试了很多常规的方法没有达到预期的效果。后来想到把控件原有的绘制屏蔽掉,才得到了现在的解决方法。效果图如下:

2020-06-19 12:28:25

GB28181学习之路——eXosip获取IP和端口

当设备注册进来时,我们需要记录下设备的IP和端口,以便后续与其进行通信,其实好多地方都可以获取到,但是不一定是准确的,尤其是经过映射的地址更是不好难以捕捉。今天写一下怎么样获取设备的IP和端口,对映射与非映射同样有效。先构造获answer,然后再answer的Via header中取,这时answer中含有映射地址的信息:if (MSG_IS_REGISTER(je->request)){ FLOG ("MSG_IS_REGISTER!\n"); eXosip_lock

2020-06-17 17:19:40

GB28181学习之路——eXosip多线程

多线程开发的主要的工作就是就是使用多个eXosip_t int i,j; TRACE_INITIALIZE (6, NULL); m_ctx1 = eXosip_malloc(); m_ctx1 = eXosip_malloc(); if (m_ctx1==NULL || m_ctx2==NULL) { FLOG("eXosip_malloc failed\n"); return -1; } i=eXosi.

2020-05-15 11:19:15

海康大华摄像头播放地址

rtsp://admin:admin12345@192.168.9.63:554/Streaming/Channels/101?transportmode=unicast&profile=Profile_1

2020-05-15 11:09:35

GB28181学习之路——eXosip TCP模式

eXosip 的TCP模式与UDP模式大致相同,基本代码如下:bool CSipContact::initialize(){ int i; TRACE_INITIALIZE (6, NULL); m_ctx = eXosip_malloc(); if (m_ctx==NULL) { FLOG("eXosip_malloc failed\n"); return -1; } i=eXosip_init(m_ctx);

2020-05-13 09:37:14

GB28181学习之路——再探invite信令规范

最近对接压缩机和nvr设备,出现了很多的问题,原因是之前对接IPC所写的信令不规范,所以这次暴露出了很多问题。wireshark抓的包忘记保存了,懒着抓了,就干吧的写吧。一、sip头proxy、to、contact的国标编码要用通道号的编码。二、invite请求要加subject,值为 (发送者:媒体序列,接受者:媒体序列),发送者是通道编码,接受者有就写,序列号点播第一位为0,历史第...

2020-04-27 10:40:02

GB28181学习之路——基于osip的sdp文本解析

话不多说上代码吧 char buff[4096]; sprintf(buff, "v=0\r\n""o=1001 0 0 IN IP4 10.64.49.44\r\n""s=Play\r\n""c=IN IP4 10.64.49.44\r\n""t=0 0\r\n""m=video 5494 RTP/AVP 96 97 98\r\n""a=rtpmap:96 PS/...

2020-04-27 10:14:11

GB28181学习之路——实时视频点播

主要写下信令构造吧,我也是到处查资料然后调试才调通的,所以就拿我的代码来看吧,也不用解释。下面是构造invite的方法:osip_message_t *invite = NULL;i=osip_message_init(&invite);bSipInviteBuild(&invite);#define MAXLINE 4096#define MESSAGE_...

2020-04-15 09:21:20

GB28181学习之路——构造osip_message_t

辗转好久找到了有效的方法,如下: osip_message_t *res; i=osip_message_init(&res); osip_message_set_version(res, osip_strdup("SIP/2.0")); osip_message_set_status_code(res, 401); osip_message_s...

2020-04-10 09:09:25

GB28181学习之路——SIP报文解析转换

由于某些原因没有用eXosip,于是自己tcpsocket建立连接并解析报文,osip安装的自己找找吧。解析代码如下:#include<osipparser2/osip_message.h>#include<osipparser2/osip_parser.h>int main(){ parser_init ();//必须要有这句话 char t...

2020-04-09 09:14:21

Qt自定义控件之动态数字Label+动态百分比背景

资源地址:https://download.csdn.net/download/qq_39805297/12028664话不多说直接上图一、动态数字的LabelNumberLabel::NumberLabel(QWidget * parent) :QLabel(parent), m_currNumber(0){ m_timeLine = new QTimeLin...

2019-12-12 15:20:12

基于openssl的3DES(ECB)加密算法

项目中需要用到就找了下,借鉴网上的一些代码,在加上自己的改良,得到了现在的代码,也解决了我的需求。附openssl安装教程https://blog.csdn.net/qq_39805297/article/details/100532833先说下,3DES加密算法有几种填充方式,比如zeropadding、pkcs5padding、pkcs7padding等等,我使用的pkcs7padd...

2019-10-30 09:43:35

vs使用nuget安装openssl

最近需要在项目中使用openssl,查了下资料发现了nuget这个方便的东西。可以直接为解决方案配置sdk环境。配置openssl所需的最低版本是vs2013。打开一个项目,点击 工具->NuGet包管理器->程序包管理控制台。例如vs2012,控制台中输入如下命令。可在 NuGet官网 查看Install-Package openssl -Version 1.0...

2019-09-04 09:45:21

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 分享精英
    分享精英
    成功上传11个资源即可获取