自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 Windows编译环境搭建(MSYS2\MinGW\cmake)

2、源码编译,因为ffmpeg官方编译好的库很多功能都没有用,比如,没有fdk-aac,如果要用fdk-aac就只能自己源码编译,此外有的软件,例如opencv只提供了.lib和.dll,没有.dll.a,要想在MinGW中使用,就必须源码编译(opencv编译坑很多,我是直接从网上下载编译好的,这一点和Linux不同,Linux上一台机器上编译出来的库很难在另外一台Linux上使用,除非环境及版本高度相似)。此步骤安装的软件包较多,因此可能需要一定时间,取决于网络和电脑配置,约需3-5分钟。

2025-03-06 16:35:24 1372

原创 NVIDIA视频编解码

开源了两个项目:英伟达显卡视频编解码、jetson视频编解码。都是基于官方SDK进行的封装,由于官方自带的demo晦涩难懂并且每块都是独立的,我对SDK进行二次封装并形成了一套较为完整的视频编解码流程,调用简单,有完整的测试程序,想学习SDK或者想直接使用的可以看过来。

2025-01-17 17:03:13 1475 4

原创 AV1视频编解码简介、码流结构(OBU)

AV1是由开放媒体联盟(AOM,Alliance for Open Media)在2018年发布的,AV1的前身是VP9。AOM的成员已经涵盖了Amazon、Cisco、Google、Intel、Microsoft、Mozilla、Netflix、AMD、ARM和NVIDIA,它成立的目的是为互联网和其他市场创建一个开源的视频编解码器(AV1,AOMedia Video codec),旨在取代VP9并成为与HEVC(H.265)竞争的主要视频编码标准。

2025-01-15 14:41:18 1621

原创 MPEG2(TS/PS)开源库:libmpeg2core

libmpeg2core实现了mpeg中TS、PS封装、解封,支持H264/H265/MPEG1 audio/MP3/AAC/AAC_LATM/G711,纯C语言实现。libmpeg2core非线程安全,多线程读写需要加锁。一、TS(mpeg2core_ts.h)二、PS(mpeg2core_ps.h)

2025-01-06 18:14:48 416

原创 GB28181系列四:GB28181实战

GB28181的基础理论已经介绍完毕,上篇文章也介绍了GB28181流媒体服务器ZLMediaKit,本篇文章将搭建一整套的GB28181框架,包含GB28181推流端、GB2818平台、GB28181拉流客户端。

2024-12-16 17:30:50 911

原创 GB28181系列三:GB28181流媒体服务器ZLMediaKit

ZLMediaKit默认开启10000端口用于接收UDP/TCP的GB28181推流,由于国标推流不好测试,ZLMediaKit同时也支持rtp_mpegts推流,代码会自适应判断是否为ps还是ts。ZLMediaKit支持GB28181的 ps-rtp推流,支持的编码格式分别为h264/h265/aac/g711/opus。需要指出的是,国标推流的app固定为rtp,你只能通过代码来修改它,stream_id为rtp流的ssrc,这个是随机的,在FFmpeg中貌似没法控制。三、ZLMediaKit使用。

2024-12-13 16:52:50 1785

原创 MPEG2: TS、PS

MPEG-2 标准中,有两种不同的码流可以输出到信号,一种是节目码流(PS ProgramStream),一种是传输流(TS Transport Stream)。GB28181推荐使用PS格式传输音视频。

2024-12-13 14:00:18 1241

原创 GB28181系列一:GB28181协议介绍

GB28181 即 GB/T28181《公共安全视频监控联网系统信息传输、交换、控制技术要求》。它是公安部提出的公共安全行业标准,用于监控视频监控设备之间的通信和互联,特别是对于监控摄像头、视频服务器、视频管理平台等设备之间的数据流和控制命令。它为视频监控系统提供了一种标准化的协议,可以确保不同厂家和型号的设备在同一系统中能够相互兼容和通信。GB28181使用SIP作为通信协议,并在 SIP 协议的基础之上做了些私有化处理,主要扩展了MESSAGE和INFO等方法;使用RTP协议传输音视频。

2024-12-10 18:08:50 2473

原创 GB28181系列目录

这是我的GB28181系列文章目录:

2024-12-09 16:44:14 256

原创 SIP系列七:ICE框架(P2P通话)

至此,SIP的基础内容都介绍完了,SIP建立连接之后两个SIP用户就可以进行媒体通过了,但是媒体通话是点对点(P2P)的,不经过SIP代理服务器,但是实际上用户的设备(PC,手机等)都没有自己的公网地址,所以两端是不可能直接通信的,除非两个用户都在同一个局域网内部。因此SIP建立通话的过程中要或者对端的公网地址和端口才能进行P2P媒体通话,这里涉及到两个重要的概念:NAT、ICE,下面就对这两个概念进行介绍。

2024-12-06 15:01:42 1474

原创 SIP系列六:SIP实战(基于eXosip实现UAC、UAS)

eXosip:C语言实现,eXosip基于是osip扩展的,eXosip对osip进行了二次封装。eXosip是一个较轻量级的SIP协议栈,专注于SIP协议的基础功能,适合需要SIP通信(如呼叫、注册、消息等)但不需要复杂多媒体功能的应用。eXosip的设计简洁,主要提供SIP消息的处理和事务管理,适合快速开发基于SIP的应用

2024-12-04 15:09:50 1952

原创 SIP系列五:HTTP(SIP)鉴权

SIP鉴权使用的就是HTTP的鉴权方式,很多类HTTP协议使用的都是HTTP的鉴权方式,例如RTSP。HTTP协议包括两种鉴权方式:基本认证(basic)和摘要认证(digest)。

2024-12-02 15:25:20 1200

原创 SIP系列四:SIP扩展消息及rport机制(NAT穿越)

SIP消息分核心方法和扩展方法,基本方法包括:INVITE、ACK、BYE、CANCEL、REGISTER、OPTIONS。扩展方法包括:SUBSCRIBE、NOTIFY、PUBLISH、REFER、INFO、UPDATE、PRACK、MESSAGE。MESSAGE在之前的系列已经介绍过了,接下来对几个比较常用的扩展方法进行介绍

2024-11-29 15:36:23 818

原创 SIP系列三:SIP消息格式

上一篇文章介绍了SIP的各种信令和两个用户之间通话的SIP信令交互流程,本篇将详细介绍SIP的消息格式。常见的SIP方法有:INVITE、ACK、PRACK、BYE、CANCEL、REGISTER、OPTIONS。在这些类型的SIP消息头部中包含的常见字段如下表所示

2024-11-28 15:59:53 2452 2

原创 SIP系列二:SIP信令

这里将会介绍SIP的报文消息格式,请求/响应方法、SIP的信令交互过程。SIP请求和响应消息格式如下图所示:SIP报文格式和HTTP完全一样,只不过里面的值不一样,使用的错误码也是一样,比如200表示请求成功,40x表示客户端错误,50x表示服务端错误,这样SIP就很好理解了。HTTP有GET、POST等方法,同样SIP也有自己的方法。INVITE:表示主叫用户发起会话,邀请其他用户加入一个会话,也可以用在呼叫建立后用于更新会话(此时INVITE又称为Re-invite)

2024-11-27 17:54:55 2310

原创 SIP系列一:SIP协议介绍

GB28181使用SIP协议进行信令交互,因此首先需要学习SIP协议。SIP(Session Initiation Protocol, 会话初始化协议)是一个用于在IP网络中建立、修改和终止多媒体会话的应用层协议,广泛应用于VoIP(Voice over IP,语音通信)、视频通话、即时消息和其他实时通信服务。SIP由IETF(Internet Engineering Task Force,互联网工程任务组)制定,属于应用层协议。SIP和HTTP类似,都是请求-响应模式。

2024-11-27 10:26:11 2747

原创 SIP系列目录

GB28181系列目录

2024-11-26 16:15:33 583

原创 我的音视频/流媒体开源项目(github)

我的音视频、流媒体开源项目(github)

2024-09-10 10:30:17 1064 12

原创 FLV封装H265

针对FLV格式,目前许多开源项目和常见的视频处理工具和流媒体服务器,仍主要支持H.264视频编码格式,尚未完全兼容H.265。ffmpeg和vlc都不支持H265编码格式的FLV,不知道后续版本会不会支持。RTMP也是用FLV格式传输音视频,这也导致很多RTMP流媒体服务器也不支持H265。本文将介绍FLV如何封装H265。

2024-09-04 18:04:08 1017

原创 RTSP系列四:RTSP Server/Client实战项目

使用epoll,支持RTP OVER UDP、RTP OVER TCP,支持H264/H265、AAC/PCMA、支持鉴权。

2024-08-05 12:36:43 1594 7

原创 RTSP系列三:RTP协议介绍

这里要注意的是,这些字段并不是固定出现的字段(按需携带,可有可无),所以码流结构图描述只是字段的名字,并没有给出字段的位数(位数也是可变的)。首先"defined by profile"字段为0x1000,length为3,后面跟着3x4字节长度扩展,对于第一个header extension:L=0,数据长度为0,对于第二个header extension:L=1,data长度为1,接着是填充数据,对于第三个header extension:L=4,后面跟着4字节长度数据。

2024-08-05 12:14:20 3739

原创 RTSP系列一:RTSP协议介绍

RTSP(Real Time Streaming Protocol),实时流传输协议,是TCP/IP 协议体系中的一个应用层协议,由哥伦比亚大学、网景和RealNetworks 公司提交的IETF RFC 标准。该协议定义了一对多应用程序如何有效地通过IP 网络传送多媒体数据。其语法和操作参考了HTTP/1.1,默认端口554。RTSP主要应用在视频监控领域,网络摄像头都支持RTSP协议。RTSP只是对媒体传输进行控制,真正传输音视频是RTP协议,将在后面介绍。

2024-08-05 00:00:00 6025 1

原创 RTSP系列二:RTSP协议鉴权

1、客户端收到401之后,从WWW-Authenticate中解析出realm和nonce的值。2、客户端以用户名,密码,nonce,RTSP方法,请求的URI等信息为基础计算授权response的值,计算公式如下:1)当password为MD5编码2)当password为ANSI字符串4、服务器对客户端反馈的response进行校验,如果验证通过则对报文进行响应,否则返回401,客户端授权失败。5、客户端验证通过继续发起其他请求,所有请求都需要添加授权字段,服务器对每个请求都进行鉴权。

2024-08-05 00:00:00 1591

原创 快速搭建rtsp server(Ubuntu)

在现代视频监控和实时视频流媒体应用中,实时流协议(RTSP)服务器扮演着至关重要的角色。无论是家庭安防系统、企业级监控还是流媒体服务,RTSP服务器都能提供高效、稳定的解决方案。然而,对于许多初学者或开发者来说,搭建一个功能完善的RTSP服务器似乎是一个复杂且耗时的任务。这里将使用simple-rtsp-server快速搭建rtsp server,simple-rtsp-server从文件中读取音视频发送给客户端,文件格式支持MP4、MKV;音视频支持H264、H265、AAC、PCMA;

2024-06-06 10:27:14 3578 7

原创 ONVIF系列三:ONVIF客户端实现

在系列二中完成了在Ubuntu上安装gSOAP并生成ONVIF代码框架,接下来我们利用生成的框架实现ONVIF客户端。

2024-05-13 22:30:00 3704 2

原创 ONVIF系列二:Ubuntu安装gSOAP、生成ONVIF代码框架

1、安装依赖下载2.8.134版本3、编译安装创建/work/onvif,把源码放到/work/onvif下面解压创建gsoap安装目录进入源码目录配置编译make不要使用make -j,可能出错。安装。

2024-05-13 22:15:00 2490 1

原创 ONVIF系列一:ONVIF介绍

视频监控领域存在的问题:1、厂商定制化:不同厂商的视频设备往往采用不同的通信协议和数据格式,导致设备之间难以互相兼容和集成。例如视频监控都是通过RTSP进行的音视频传输,可是每家厂商摄像头的rtsp地址格式都不一样,这样集成不同厂商之前需要首先知道这家厂商的RTSP地址格式。2、功能扩展不统一:尽管RTSP提供了基本的实时流媒体传输功能,但在实际应用中,视频设备可能会扩展一些额外的功能,如事件管理、设备配置等,这些功能的实现方式可能会因厂商而异,导致不同设备之间的功能扩展不统一。

2024-05-13 22:00:00 5438 5

原创 Ubuntu安装nginx-http-flv,并获取统计信息

NGINX 的版本应该大于或者等于 1.2.6,与其他版本的兼容性未知。nginx-http-flv使用最新版本就可以,这里使用的nginx版本是1.14.2。rtmp播放地址:rtmp://127.0.0.1:1935/live/test。applications里面记录了流的连接情况。

2024-03-26 22:45:00 632

原创 FFMPEG AVFrame AVPacket内存管理相关API说明

AVFrame和AVPacket是ffmpeg中保存音视频数据的结构体,AVFrame保存未压缩的原始音视频数据,AVPacket保存编码后的音视频数据,AVFrame和AVPacket都是使用引用技术进行的内存管理。

2024-03-26 21:00:00 839

原创 H264/H265的两种格式Annex B、AVCC(H264)/HVCC(H265)

H.264 (AVC) 和 H.265 (HEVC) 是两种常见的视频编码标准,它们都有不同的封装格式,即Annex B 和 AVCC(H264)/HVCC(H265) 封装格式。

2024-03-25 21:45:00 5422 1

原创 ALSA学习笔记

对原博客代码进行了修改并添加了注释(测试通过,可直接运行),代码分为三个部分,1、显示了一些ALSA使用的PCM数据类型和参数;

2024-03-22 21:10:52 605 1

原创 Jetson视频编码

本文对Jetpack 5.0.2的03_video_cuda_enc编码流程进行详细介绍,代码地址:/usr/src/jetson_multimedia_api/samples/03_video_cuda_enc/。编码和解码除了具体定义不一样,过程基本相似。

2024-03-21 23:00:00 1851 21

原创 Jetson视频解码

Jetson 是由 NVIDIA 开发的嵌入式计算平台系列,旨在提供高性能的人工智能(AI)计算能力,适用于嵌入式系统、机器人、自动驾驶汽车和其他边缘计算应用。Jetson 平台通常集成了 NVIDIA 的 GPU 和其他硬件加速器,能够在低功耗的环境下执行复杂的深度学习和计算任务。Jetson Multimedia API(Jetson 多媒体 API)是 NVIDIA 提供的一组软件工具和接口,用于在 Jetson 平台上进行视频和图像处理。

2024-03-21 22:00:00 3250 2

原创 v4l2视频解码

v4l2解码需要两个队列:输入队列、输出队列,每个队列都是不断地VIDIOC_DQBUF和VIDIOC_QBUF的过程,即入队和出队。,文章对v4l2的视频采集进行了详细的介绍。

2024-03-21 21:15:00 1262 1

原创 v4l2采集视频

Video4Linux2(v4l2)是用于Linux系统的视频设备驱动框架,它允许用户空间应用程序直接与视频设备(如摄像头、视频采集卡等)进行交互。linux系统下一切皆文件,对视频设备的操作就像对文件的操作一样,使用类似读取、写入文件的方式来进行,v4l2也都是通过open()、ioctl()、read()、close()来实现对视频设备的操作。

2024-03-21 21:00:00 6000 2

原创 ffmpeg NVIDIA编解码三:英伟达硬编码

ffmpeg硬编码流程和软编码流程完全一样:打开编码器、分配编码器上下文,av_read_frame读取视频帧、avcodec_send_frame送入编码器、avcodec_receive_packet获取编码后的视频帧、关闭编码器。只不过在打开编码器的时候要使用ffmpeg英伟达的编码器(H264:h264_nvenc H265:hevc_nvenc)。

2024-03-19 23:30:00 1962 1

原创 ffmpeg NVIDIA编解码二:英伟达硬解码

ffmpeg所有解码流程都是一样的:打开解码器、分配解码器上下文,av_read_frame读取视频帧、avcodec_send_packet送入解码器、avcodec_receive_frame获取解码后的视频帧、关闭解码器。不过硬解码在这个流程基础上增加了几步:获取硬件加速的解码格式、创建设备上下文、把解码后的数据从GPU拷贝达到CPU上。下面是ffmpeg NVIDIA硬解码流程图,带。

2024-03-19 23:15:00 3767 1

原创 ffmpeg NVIDIA编解码一:ffmpeg编译安装

如果是安装再/usr/local下面,可以不用进行上面的配置,如果没安装在/usr/local下面就需要进行上面的配置,路径用ffmpeg安装的实际路径。ffmpeg支持NVIDIA编解码编译安装(需要安装cuda)nv-codec-headers下载安装。这里以4.0.5版本为例。

2024-03-19 23:00:00 1642 2

原创 三种C++生产者消费者启动方式

生产者和消费者是一种常见的并发编程模型,用于解决多线程环境下的数据共享和同步问题。在这个模型中,生产者负责生成数据并将其放入共享缓冲区,而消费者则负责从缓冲区中取出数据进行处理。第二种方式:类内部启动启动生产者消费者线程。第一种方式:普通函数实现生产者消费者线程。第三种方式:类外部启动生产者消费者线程。

2024-03-19 21:00:00 204 1

原创 MP4添加自定义box

在 MP4 文件中,除了标准的 box 类型外,还可以使用自定义的 box 类型来存储特定的元数据或者附加信息。这些自定义 box 通常被用来扩展 MP4 文件的功能,以满足特定的应用需求。自定义 box 的格式与标准 box 类似,都由一个四字节的类型标识符和一个长度字段组成。自定义 box 的类型标识符通常是 ASCII 字符串,由大写字母和小写字母组成。开发者可以自由定义自己的 box 类型,但建议遵循一定的命名规范,以确保与标准 box 类型不冲突。

2024-03-19 18:45:31 1769 1

空空如也

空空如也

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

TA关注的人

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