自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(83)
  • 资源 (6)
  • 收藏
  • 关注

原创 RTSP协议

RTSP协议作为音视频实时监控一个非常重要的协议,具有非常广泛的应用。RTSP由RFC 2326规范化,它允许客户端通过请求不同的媒体资源来控制流媒体服务器。RTSP是一种应用层协议,通常基于TCP连接,用于建立和控制媒体会话。这使得RTSP成为了许多实时流媒体应用的核心组成部分,包括视频会议、IP摄像头、流媒体服务器等。本文将深入探讨RTSP协议的原理、交互流程、高级用法以及如何进行抓包分析。

2023-10-15 20:50:46 913

原创 SRTP交叉编译与移植

API设计采用handle的实现方式,init只需要进程初始化一次。srtp_app_alloc需要每次会话创建都进行一次初始化,需要传入srtp秘钥。其实wareshark是通过sip协商RTP/SAVP来显示srtp的标识,所以SDP协商一定要正确。加密和解密只需要传入rtp封装后的数据和长度即可进行加解密操作,操作后数据是直接替换原数据的。会话创建和销毁,需要每次建立会话都要重新创建,每次的秘钥都需要采用协商的加密和解密秘钥。初始化和反初始化,只需要在开启进程初始化一次。

2023-10-06 19:57:46 479

原创 ZRTP交叉编译与移植

这里采用的是libzrtp来自于freeswitch:libs/libzrtp。zrtp编译比较简单,采用configure进行编译在根目录心中zrtp编译脚本,只需要指定交叉编译工具链和安装地址即可。脚本如下所示:成果物如下所示include和lib库:zrtp移植主要对zrtp库进行封装,对外提供初始化和加密解密能力。接口设计如下:3.2 初始化初始化只需要初始化一次,初始化需要注册发送回调函数,这里协商发送的数据包构造好后最终是有这个接口on_send_packet返回到应用发送。3.3

2023-10-06 19:57:00 832 1

原创 ZRTP协议与原理

ZRTP,全名Z Real-time Transport Protocol,是一种网络协议,旨在为实时通信提供安全性。与其它安全协议(如TLS和IPsec)不同,ZRTP专门为实时通信设计,包括音频和视频通话。它是由Phil Zimmermann开发的,他也是PGP(Pretty Good Privacy)的创始人,这使得ZRTP在安全领域备受尊重。ZRTP的出现填补了RTP(Real-time Transport Protocol)的不足之处。

2023-10-06 19:56:22 357

原创 SRTP协议与加密原理

SRTP(Secure Real-time Transport Protocol)是一种用于保护实时通信数据的网络协议。它主要用于音频和视频通信,以确保数据的机密性和完整性。SRTP是在RTP(Real-time Transport Protocol)的基础上开发的,RTP是一种用于实时传输媒体数据的协议,但不提供安全性保障。SRTP的出现填补了这一缺陷,使得媒体通信可以在不担心数据泄露或篡改的情况下进行。SRTP使用了一系列密码学技术来实现数据的保护。

2023-10-06 19:55:56 1118 2

原创 本地目录映射到公网访问

本地目录映射到公网访问,你只需要简单的两步

2023-04-17 18:16:57 938 3

原创 WebRTC拥塞控制原理之一基本介绍

WebRTC的拥塞控制模块使用的是基于TCP的拥塞控制算法。它是根据网络带宽和延迟等信息来自适应地调整传输速率的。具体来说,该模块采用的是基于RFC 3550中的延迟抖动调整算法的改进版本。该算法实施的基本原理是在传输的过程中定期探测网络的质量和延迟,并根据这些信息来自适应地调整传输速率。总之,WebRTC的拥塞控制模块采用了先进的自适应算法,可以在不影响通信质量的情况下尽可能地提高传输速率。这使得WebRTC成为一种非常强大和实用的实时通信技术。

2023-03-21 20:22:49 406

转载 VLC-3.0(3.x) 版本 Ubuntu环境编译教程

VLC-3.0(3.x) 版本 Ubuntu环境编译教程

2023-02-07 20:21:38 305

原创 ffmpeg解封、解码实战

◼ 熟悉FFmpeg整体解封装流程◼ 掌握AAC封装协议◼ 掌握H264封装协议

2023-01-31 20:45:02 474

原创 FFmpeg源码走读之内存管理模型

数据包管理过程中当数据转移到新的数据包时存在两种操作一种是数据包之间相互独立,当新创建一份数据包时,需要将原来的数据重新申请一个数据空间并且将数据拷贝到新的数据包中,具体过程如下图所示。这种数据包的管理优势是在于数据之间相互独立,不会存在数据干扰的问题,但是缺点也很明显就是消耗的内存大大增加,同时数据之间的拷贝也是耗时的。另一种内存管理的方式是,只新增数据包对象,用于管理数据对象,对于数据本身采用同一个内存空间进行管理,当所有的内存引用为0时释放这片内存空间,具体如下图所示。...

2022-08-14 13:11:10 2004

原创 SDL播放器实战

SDL(SimpleDirectMediaLayer)是一个跨平台开发库(Windows、macOS、Linux、iOS和Android等),旨在通过OpenGL和Direct3D提供对音频、键盘、鼠标、游戏杆和图形硬件的低级访问,开发者只需要编写一套代码既可以支持跨平台的运行。目前SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。本文主要用到的是SDL中音视频控制和基础事件部分。...

2022-07-24 18:15:25 1608 1

原创 Nginx搭建RTMP流媒体服务器(Ubuntu18.04)

环境搭建主要是利用nginx服务器的插件模块nginx-rtmp-module进行rtmp的推拉流操作。

2022-07-16 17:14:20 1866 1

原创 websocket服务器实战

学习websocket首先需要关注websocket的由来以及一些使用场景。首先是因为http在通信的时候存在缺陷,只能由客户端发起请求,服务器响应,造成服务器没办法主动推送消息,客户端需要轮询带来效率上的问题。websocket诞生于2008年,2011年成为国际标准目前所有浏览器都支持websocket,用于建立服务器与客户端的对等通信,通信的发起方可以是客户端也可以是服务器,使得服务器可以主动推送相关信息。标准协议的学习绕不开的就是RFC文档【RFC6455】的学习,首先对于websocket的协议格

2022-06-09 22:05:19 1768

原创 FFmpeg命令行实践二

1 FFmpeg命令参数1.1 主要参数-i 设定输入流-f 设定输出格式(format)-ss 开始时间-t 时间长度#修改音视频容器格式为flv,拷贝编码格式,复制0-20s数据ffmpeg -i test.mp4 -ss 0 -t 20 -codec copy -f flv out.flv#-f参数可以省略,自动识别输出格式ffmpeg -i test.mp4 -ss 0 -t 20 -codec copy out.flv1.2 视频参数-vframes 设置要输出

2022-05-26 22:12:20 2271

原创 DPDK之一-原理与优势

1 DPDK原理1.1 传统网络数据原理Linux网络协议栈在处理数据包时,需要经过两个步骤:首先将数据从物理网卡拷贝到内核协议栈;第二步从内核空间将数据拷贝到用户空间。网络数据包经过两次拷贝才到达用户空间,由于拷贝是会造成系统中断导致性能瓶颈。1.2 DPDK数据处理原理DPDK是 Intel 针对芯片技术与高速网络接口技术飞速发展的应用场景而提出的数据平面加速理论框架(Intel Data Plane Development kit)。DPDK旨在对网络数据的高速处理,其中一个重要的技术就是零

2022-04-27 19:48:03 1870

原创 webRTC之RTP封装与解封装

1 前言rtp_rtcp模块作为Webrtc组件中非常重要的组成部分,首先是对应rtp和rtcp的封装与解封装,第二部分是对QOS各种策略的支持都离不开rtcp的控制协议。这里首先进行协议封装的探讨。2 RTP协议解析各个音视频的大佬对下面这张RTP协议图应该并不陌生,这就是RTP头部协议,解析rtp主要就是为了解析头部信息,并且获取到准确的音视频数据部分。整个rtp头部至少包含12个字节,此时CSRC只有一个的情况,同时不包含扩展头部。rtp解析核心函数是RtpPacket::ParseBuff

2022-04-18 20:42:09 861

原创 轻量级图片缩放库simage

前言本次移植的目的首先是为了解决图片缩放的问题,其二是库的内存尽量小轻量级的图片缩放库以满足嵌入式的使用场景。经过一番调研对比选择了coin3d项目下的一个图像处理组件。这里简单介绍一下coin3d应用场景,它是一个基于场景图、保留模式、渲染和模型操作的 C++ 类库,最初由 SGI 设计。它在发布后迅速成为科学和工程界 3D 可视化和视觉模拟软件事实上的标准图形库。它也成为 VRML1 文件格式标准的基础。1 环境搭建源码下载:wget https://github.com/coin3d/sima

2022-04-10 21:49:29 884

原创 webrtc视频采集模块

1 整体结构分析首先是从目录结构分析,视频采集模块唯一modules下,主要层级关系如下图。其中最外层是公共实现部分,包括对外API,内部数据配置参数和定义,以及具体实现部分;内部的目录中主要是对于各个平台具体的实现,如window和Linux。整个采集模块最核心的内容包括三大块:首先是对外API定义在video_capture.h描述了视频采集模块对外提供的能力。第二部分是公共实现部分video_capture_impl主要是对于公共功能的实现,数据流的控制等;第三部分是实际采集的模块,根据不同平台

2022-04-04 22:10:10 754 2

原创 Webrtc新增FFmpeg视频编解码模块

1 整体描述2 编码器初始化实现3 编码器编码实现4 解码器初始化实现5 解码器解码实现

2022-04-03 13:06:24 2859

原创 Nginx过滤器模块实现

1 数据结构2 实现过程3原理分析

2022-03-21 21:14:28 3620 4

原创 nginx共享内存

1 共享内存数据结构typedef struct { u_char *addr; //共享内存地址 size_t size; //内存大小 ngx_str_t name; //共享内存名称 ngx_log_t *log; //log ngx_uint_t exists; /* unsigned exists:1; */} ngx_shm_t;struct ngx_shm_zone_s {

2022-03-20 21:25:55 4202

原创 Nginx高级配置

Nginx高级配置1 Nginx创建多个工作进程2 Nginx连接数设置3 Nginx多http服务器设置4 Nginx资源路径设置5 Nginx重定向6 Nginx负载均衡配置7 反向代理和正向代理8 写在最后1 Nginx创建多个工作进程修改nginx.conf,将worker_processes 数量设置为4,具体工作原理是Nginx工作主进程,会利用fork创建4个子进程作为工作进程。worker_processes 4;查看是否修改成功:具体工作原理如下图所示:当我们利用web

2022-03-13 16:43:07 3846

原创 webrtc整体框架

1 前言WebRTC前世今生,在2010年google收购了GlobalIpSolutions公司,并在2011年将其开源。WebRTC主要是机遇web浏览器的多媒体试试通讯技术,可以实现在没有其他中间媒介的情况下实现点对点通讯。本文主要目的是了解WebRTC的整体框架,为后续深入学习WebRTC框架打下基础。2 整体框架介绍WebRTC目前比较普遍的框架描述如下图所示,WebRTC整体架构从上到下一共分为三层,最上层是WbeAPI层,这一层是暴露给开发人员的用于开发WebRTC应用的JavaScri

2022-03-08 09:47:41 4268

原创 webrt环境搭建

前言webrtc源码下载比较复杂主要是需要科学上网,光是环境搭建估计就要劝退一拨人,这里主要是介绍可以访问外网情况下如何进行webrtc的源码下载和编译。1 源码下载官方源码下载地址:https://webrtc.googlesource.com/src/注意需要进行科学上网操作先。git clone https://webrtc.googlesource.com/src详细开发引导文档:https://webrtc.googlesource.com/src/+/main/docs/nativ

2022-03-06 21:43:12 3797

原创 lua语言进阶

1 元表元表实际上是对表的一种扩展,对table新增了内置方法:__index元方法:索引 table[key]。 当 table 不是表或是表 table 中不存在 key 这个键时,这个事件被触发。主要是在表索引不存在的情况下触发该函数进行相关操作。__newindex元方法:索引赋值 table[key] = value 。 和索引事件类似,它发生在 table 不是表或是表 table 中不存在 key 这个键的时候。 此时,会读出 table 相应的元方法。一旦有了 “newindex”

2022-02-20 22:26:46 1069

原创 redis源码之基础组件实现

1 简单动态字符串实现redis实现了SDS(simple dynamic string)功能,可以在支持C语言的字符串功能的同时,进行进一步的性能和安全性提升来满足数据库的需求。数据结构如下:struct __attribute__ ((__packed__)) sdshdr64 { uint64_t len; /* 使用长度*/ uint64_t alloc; /* 字符串总分配长度 */ unsigned char flags; /*前3位用于类型表示*/ cha

2022-02-20 20:29:01 569

原创 lua入门笔记之一

前言Lua 是一种强大、高效、轻量级、可嵌入的脚本语言。它支持过程式编程、面向对象编程、函数式编程、数据驱动编程和数据描述。我学习lua主要是看中lua完善的协程机制。1 安装lua环境安装过程比较简单,我的Ubuntu18.04默认安装了lua5.15版本 。我这里重新在官网下载了最新的lua版本5.4.4安装。wget http://www.lua.org/ftp/lua-5.4.4.tar.gzcd lua-5.4.4/makemake testmake install安装完成后直

2022-02-08 18:15:06 714

原创 hiredis异步操作模型

1 前言Hiredis是一个Redis的C客户端库函数,基本实现了Redis的协议的最小集,工程上比较常使用Hiredis进行数据库的操作。本文主要介绍redis的同步操作和异步操作差异,以及如何实现一个中间层将异步网络事件处理模型与hireds适配。2 同步与异步原理redis对于同一条连接一般采用用串行的数据操作方式,同一条命令执行并返回再执行下一条命令。同步模型基本特征就是一条命令发送后需要等待服务器响应才能执行第二条命令。交互过程如下图所示:redis异步操作,主要节约的是中间等待执行的时

2022-02-07 21:17:27 1349

原创 redis 入门

1. 整体了解redis官方文档:http://redis.cn/commands/setbit.htmlredis是内存数据,key value数据库,数据结构数据库;string:不会被特殊字符隔断,安全的字符串,可以存二进制;hash:字典list(双端队列):有序(插入有序)set:对顺序不关注,字段唯一、zset:对顺序关注,里面的值是唯一的,单线程操作2. redis怎么用redis请求回应模式 ,来判断操作是否成功。严格有序的请求回应。3. 典型应用及操作string:

2022-01-26 21:11:16 1375

原创 音视频开发-视频基础

1 视频产生2 图像采集rgbyuv3 视频基本概念帧率码率分辨率4 视频专业术语

2022-01-22 11:40:16 2992

原创 音视频协议-SRTP

1 协议简介2 协议格式介绍3 协议解析4 协议三方库使用

2022-01-15 18:05:22 4960

原创 Alexa交叉编译(avs-device-sdk)

Alexa交叉编译(avs-device-sdk)编译portaudio编译curl编译gstreamer-1.1编译gstreamer-1.2编译gstreamer-1.3编译gstreamer-1.4报错libgstbase-1.0.so.0 nofind编译orc-0.4.26编译gst-plugins-base报错../gst-libs/gst/audio/.libs/libgstaudio-1.0.so: undefined编译sqlite3编译openssl终端设置英文添加gstreamer安装

2022-01-13 19:58:54 2479

原创 mysql基础及操作

1mysql操作关系型数据库mysqlredis mongoelasticsearch2 sql标准语句DQL:数据查询语句selectDML:数据操作语句insert、update、deleteDDL:数据定义语句create、alter、dropDCL:数据控制语句TCL:事物控制语句commitrollback3 体系结构connectors:客户端C API mysqlmysql server:连接池:selectIO多路复用+阻塞的IO;需要操作磁盘;连接池:

2022-01-12 20:03:21 294

原创 读写缓冲区实现

evbuffer设计evbuffer设计核心就是这个链式块结构,每一个evbuffer包含多个evbuffer_chain,这些 chain组成一个链表结构,串成一个完成的evbuffer。evbuffer_chain参数解析:首先是next指向下一个节点;第二是buffer_len是evbuffer_chain中buffer的总长度,创建chain时候分配;第四是misalign这个比较巧妙指的是有效数据的起始位置,当buffer前面的数据被取出之后,不会移动后面buffer的位置而是直接修改misal

2022-01-09 22:05:23 1131

原创 事件驱动组件libevent实战

1 环境搭建1.1下载git clone https://github.com/libevent/libevent.git1.2编译(1)openssl安装依赖这里安装openssl库,也可以disable掉:EVENT__DISABLE_OPENSSL看实际需要。apt-get install libssl-dev(2)编译MBEDTLS默认是开的,关闭防止报错cd libeventmkdir bulidcmake .. \-DEVENT__DISABLE_MBEDTLS=ON

2022-01-04 19:33:56 977 1

原创 音视频协议-RTCP协议实现原理

1 前言RTCP作为RTP控制协议,涵盖的内容比较多,用法也比较灵活,对于弱网下音视频质量和会话控制具有重要的作用。RTCP协议格式见:音视频协议-RTCP协议介绍2 RTCP协议定义2.1 RTCP公共头RTCP公共头包括32字节:版本号,填充标志,计数(不同rtcp含义有所差别),协议类型(sr,rr,sdes,bye,app),整个rtcp包的长度。enum PacketType { SR, /**< An RTCP sender report. */ RR, /**&

2021-12-27 21:00:34 2217

原创 音视频协议-RTCP协议介绍

1 协议简介RTCP和RTP协议是配合使用的音视频协议-RTP协议,为RTP提供信道外的传输控制,RTCP不参与数据传输,主要用于监控媒体传输的质量和传递参与者的信息。由于音视频实时传输环境一般采用UDP传输,RTCP对于音视频传输质量起到至关重要的作用,可以说没有RTCP音视频实时通信在弱网下基本没办法生存。协议内容见RFC35502 协议格式介绍2.1 RTCP公共头rtcp公共头部占16字节:不同类型有所差别,但是长度是一致的。版本号(2bit):版本号为2;填充(1bit):填充标志,

2021-12-24 09:19:01 4002

原创 音视频协议-RTP协议

1 协议简介2 协议格式介绍3 协议解析4 协议三方库使用

2021-12-21 22:28:20 2376 2

原创 企业级定时器实现

定时器应用定时器与其他组件关系(1)与网络io的组合利用timeout时间进行epoll_wait(epfd, ev, nev, timeout);update_timer();如何解决网络io耗时操作,造成定时器误差大?采用红黑树加上定时发送信号,解决误差很大的问题:参考Nginx(2)利用其他线程添加定时任务大量定时任务怎么处理定时器的本质:越近要触发的任务优先级越高。数据结构选型:(1)红黑树:Nginx中序遍历有序;增删改都能维护树的有序,黑高相等、时间复杂度lg2n(2

2021-12-20 20:30:20 1201

原创 地表最强队列-ZMQ无锁队列

前言使用场景:(1)处理数据非常多,一秒钟处理十几万元素。(2)性能测试,1写1读。(3)如果支持多写多读,容易崩溃不能使用。(4)内存分配是否需要锁?无锁队列原理ypipe:一写一读,不支持多读多写2. 链表分配实现,采用chunk机制,减少分配节点的时间3. chunk机制:(1)一次分配多个节点;利用局部性原理,(2)一小段时间队列元素是差不多的。(3)批量写(4)读端没有数据:采用mutex+condition(5)写端什么时候唤醒读端:无锁队列实现...

2021-12-19 23:03:54 2373 2

Ubuntu下实现SDL2简易YUV视频播放器

-YUV视频播放器 -Ubuntu18.04 -SDL2

2022-07-24

my_websocket_server.c

websocket服务器主要是利用reactor模型进行websocket封装,实现一个简单的websocket回显服务器,旨在熟悉websocket协议具体运用。同时可以熟悉reactor模型的tcp服务器与实际项目的灵活运用。

2022-06-09

请求池实现-c语言后端

myreqpool.c

2021-12-11

xvid-release-1_3_7.tar.gz

xvid1.3.7源码

2021-09-06

SyncToy.rar

免费小巧的本地备份用的增量同步工具,来源于微软的2009开发的免费工具,界面友好

2021-09-04

xvidcore.zip

主要用于MPEG-4解析和编解码

2021-09-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除