自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

北雨南萍

天行健 君子以自强不息,地势坤 君子以厚德载物!

  • 博客(772)
  • 资源 (17)
  • 收藏
  • 关注

原创 RTP/RTCP协议的FFmpeg demux源码解析

1. RTP/RTCP协议协议详解可见文档:https://download.csdn.net/download/fireroll/153081442. 抓包与代码分析2.1 RTP报文RTP报文头格式(见RFC3550 Page12):PT(Payload Type 负载类型)的值定义如下除了上表中明确指定PT值的负载类型,还有些负载类型由于诞生的较晚,没有具体的PT值,只能使用动态(dynamic)PT值,即96到127,这就是为什么大家普遍指定H..

2021-02-16 11:33:32 778

原创 高并发架构设计漫谈

商业系统的架构设计知易行难,少有一蹴而就的。它往往是业务、技术、人员、时间的四重平衡与取舍。架构如下棋,如是见棋走子,不做提前两三步的预测和判断,通常难胜。当业务已经在系统上跑起来后,想要再改架构,积重难返。业务不等人,竞争对手进攻,决策层耐心有限,项目成员精力疲惫信心不在,何去何从?本文讨论的是面向商业的高并发系统,介绍了一种面向高并发的流媒体传输系统的架构设计,它和具体的业务关系不大。和自下而上设计(如从使用开源软件验证功能到最终开发出满足业务需要的系统)不同,这里.

2021-02-13 08:16:46 255

原创 高并发开源组件的应用

在高并发系统中,除了自开发的各种业务处理系统外,还可以使用的一些支持高并发的开源组件和中间件,它们大都是业界的标杆性项目,能大大提高整个系统的并发性能,加速业务的快速落地。本文介绍在高并发流媒体传输系统中用到的几个典型开源组件,它们分别是Kafka, redis, Linux LVS;1. Kafka1.1. 简介Apache kafka 是一个分布式的基于push-subscribe的消息系统,它具备快速、可扩展、可持久化的特点。它现在是Apache旗下的一个开..

2021-02-13 08:09:24 214

原创 数据库操作的高并发优化

对于高并发系统来说,如果涉及到数据库中数据的增删改查操作,为了提高并发量,我们要做的第一件事情是对数据进行分层。下图是一个基本的数据库数据分层实现方案> 对于高频高并发操作数据, 可以使用Redis集群,并应用其Hash模式来存储和操作数据;> 对于高频的查找数据(较少的修改数据)操作,可以使用红黑树来操作数据;> 对于普通操作的数据,如果只涉及到本机的操作数据,可以用Linux自带的轻量级的Sqlite数据库来操作;如果涉及到多机的数据共享,则可.

2021-02-13 08:05:22 636

原创 进程间高效数据通信架构

为了提高服务器的并发性能,除了使用程序优化技术,多线程并发技术外,还可以用多进程并发技术。而涉及到多进程并发技术,往往需要进行进程间高效数据通信技术;Linux系统为程序开发提供了多种进程间通信技术,包括有信号,进程间socket, 信号量,匿名管道,命名管道,共享内存。本文介绍一种基于命名管道和共享内存的进程间通信方法;整体原理图如下:主要组成部分如下:DataQueue Producer: 是数据的生产者,它除了生产数据外,还生成信令;DataQueu..

2021-02-13 08:01:30 378 2

原创 配置文件热加载技术

基于信号量的配置文件热加载实现对于高并发的服务端来说,当服务正在运行进,却需要进行配置文件修改,以响应各种业务需求,这时就需要对服务端进行配置文件的热加载功能。下面是一种基于信号量的配置文件热加载实现。1 使用单例模式构建配置文件类class CConf {public: CConf() { }; ~CConf() { }; int load_cfg(const string& conf_file); int reload_cfg(.

2021-02-13 07:56:21 896

原创 1.2.1 sleep,usleep,select,nonasleep对比与应用

前言时钟换算:1秒(s) = 1000 毫秒(ms) = 1,000,000 微秒(μs) = 1,000,000,000 纳秒(ns) = 1,000,000,000,000 皮秒(ps)程序挂起主要有以下几种:sleep, usleep, select, pselect, nanosleep;它们的精度不同,在不同的应用场景下需要不同的函数;一、用法1.1 函数名: sleep头文件: #include <unistd.h> // 在gcc编译器...

2021-02-12 22:48:40 200

原创 1.1.5 Google ProtoBuffer详解

1. Protocol Buffer 简介Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。我们先来看看官方文档.

2021-02-09 06:53:29 401

原创 1.1.4 网络编程:Reactor与Proactor的概念与应用

1、标准定义在分布式系统尤其是服务器这一类事件驱动应用中,虽然这些请求最终会被序列化地处理,但是必须时刻准备着处理多个同时到来的服务请求。在实际应用中,这些请求总是通过一个事件(如CONNECTOR、READ、WRITE等)来表示的。在有 序地处理这些服务请求之前,应用程序必须先分离和调度这些同时到达的事件。为了有效地解决这个问题,我们需要做到以下4方面:> 为了提高系统的可测量性和反应时间,应用程序不能长时间阻塞在某个事件源上而停止对其他事件的处理,这样会严重降低对客户端的响应.

2021-02-07 10:35:16 241

原创 1.1.3 红黑树原理介绍与实现

一、红黑树介绍1.1 什么是红黑树红黑树是一种自平衡二叉查找树,是计算机科学领域中的一种数据结构,典型的用途是实现关联数组,存储有序的数据。它是在1972年由Rudolf Bayer发明的,别称"对称二叉B树",它现代的名字由 Leo J. Guibas 和 Robert Sedgewick 于1978年写的一篇论文中获得的。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的。它可以在O(logn)时间内做查找,插入和删除,这里的n是树的结点个数。  

2021-02-05 09:58:39 158

原创 1.1.2 Linux epoll详解

1. I/O多路复用1.1 流流:一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象。不管是文件,还是套接字(Socket),还是管道(包括匿名和有名管道),我们都可以把他们看作流。通过read,我们可以从流中读入数据;通过write,我们可以往流写入数据。以上面的流的定义为假设,我们需要从流中读数据,但此时,流中还没有数据,(典型的例子为,客户端要从socket读如数据,但是服务器还没有把数据传回来),这时候该怎么办?可以有下面两种..

2021-02-03 11:15:05 150

原创 1.1.1 流媒体传输中的TCP、IP协议要点概览

1. TCP的超时重传是如何表现的?如何在抓包中体现?在TCP重传的理论中,重传计时器是用于决定是否有必要进行数据包重传的一个主要机制。重传计时器维护着一个叫做重传超时(Retransmission timeout,RTO)的值。在使用TCP进行数据包的传送时,重传计时器就会被启动。当收到数据包的ACK,也就是确认数据包时,计时器就会停止。从发送数据包到接收到确认数据包的时间,被称作往返时间(Round-trip time,RTT)。我们将若干个往返时间求和并计算平均值,就可以.

2021-02-02 11:25:47 293

原创 专题-前言

短视频、长视频的点播,监控与流媒体直播算是单向的音视频通信;一对一、一对多聊天,视频会议算是双向的音视频通信;本专题讨论后一种,即双向音视频通信中的方方面面。这里声明,本专题讨论的方案和思路只是我所见的众多解法中的一种,不一定是最优解!人外有人,山外有山,降龙十八掌也得服扫地僧!行业不同,场景不一,比尔盖茨也看走眼云计算!在这些方方面面的问题中,有两个问题是最突出的:高并发,即如何实现在一个系统中容纳成千上万的用户同时通信?低延时,即如何保证用户双方能流畅无延..

2021-02-01 22:25:40 159

原创 linux下 GDB 调试动态链接库

> gdb <你的可执行程序>(gdb) b main # 设置入口断点(gdb) r [可执行程序的命令行参数] # 启动调试(gdb) load <要调试的动态库, 如 test.so> # 将动态库加载入内存(gdb) dir <要调试的动态库的源码路径, 如 ./src>(gdb) sharedlibrary <要调试的动态库> # 将动态库的符号读入gdb,为了你能找到变量和函数名(gdb)...

2020-08-04 10:25:23 6949

原创 gtest应用指南

前言gtest是Google的开源C++单元测试框架,是遵循 New BSD License (可用作商业用途)的开源项目。google内部的大多数C++代码都已经使用这个测试框架进行单测,知名的使用gtest进行测试的项目有chromium , webrtc, quic等。gtest 可以支持绝大多数大家所熟知的平台。Gtest的使用较为方便,它可以自动记录下所有定义好...

2020-04-13 12:59:24 869

原创 Google protocol-buffer详解与示例应用

1. Protocol Buffer 简介Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用...

2020-03-16 10:51:19 861

原创 FFmpeg新旧接口对照使用一览

从FFmpeg 3.0 开始 , 使用了很多新接口,在一些基本用法上,编译会看见很多的warning,类似“ warning: ‘AVStream::codec’ is deprecated (declared at /usr/local/ffmpeg/include/libavformat/avformat.h:880) [-Wdeprecated-declarations]out_...

2019-05-24 15:59:51 3296 1

原创 如何将libavcodec也静态编译并可链接到.so中

1 问题与解决使用ffmpeg SDK的静态库进行链接到动态库时,会出现如下的报错:/usr/bin/ld: /usr/local/lib/libavformat.a(allformats.o): relocation R_X86_64_32 against `ff_a64_muxer' can not be used when making a shared object; recomp...

2019-05-21 19:35:22 3048

原创 FFmpeg-4.0 的filter机制的架构与实现.之三 Filter实现的源码分析

五、Filter实现的源码分析5.1 滤镜的回调函数的调用流程,以单滤镜设置(如 -vf "delogo")为例init()query_format(); // 输入输出的格式查询: 列出滤镜支持的格式列表config_input();config_output();for (;;) {request_frame();filter_frame();}unin...

2018-12-28 11:18:29 1935 2

原创 FFmpeg-4.0 的filter机制的架构与实现.之二 结构体关系与定义

4. Filter的结构体关系图与定义4.1 结构体间的关系图filter涉及的结构体,主要包括:&gt; FilterGraph, AVFilterGraph&gt; InputFilter, InputStream, OutputFilter, OutputStream&gt; AVFilter, AVFilterContext&gt; AVFilterLink&g...

2018-12-28 11:09:36 1736 2

原创 FFmpeg-4.0 的filter机制的架构与实现.之一 Filter原理

一、FFmpeg filter的原理1. 引言及示例FFmpeg中的libavfilter提供了一整套的基于filter的机制。filter本身是一个插件的形式,可以快速的组装需要的效果。比如下面的filter,可以实现视频的水平镜像效果。ffplay.exe sample.rmvb -vf hflip 1.1 FFmpeg为什么重新定义filter API?FFm...

2018-12-28 09:26:56 3683

原创 使用speex对pcm,wav进行降噪处理

1. speex的降噪模块的简介speex的语音处理模块要使用独立于 speex codec库的libspeexdsp 库。这个分离的库是在1.2版本后实现;它这库包括了: 预处理,回声消除,jitter buffer 和重采样模块;在Unix/Linux环境下,使用 -lspeexdsp -lm 来编译和链接。 和libspeex一样,库libspeexdsp的库函数都是...

2018-10-24 17:44:54 7827 17

原创 基于FFmpeg-4.0 SDK的PCM编码成AAC

1. 初始化 AVCodecContext *m_avctx; AVCodec *m_codec; /* Init ffmpeg log */ ffmpeg_log_callback pcb_log = libffmpeg_log_callback; av_log_set_level(AV_LO...

2018-10-12 20:11:41 1383

原创 FFmpeg的音频处理详解

一、基本概念1. 音频简介数码音频系统是通过将声波波形转换成一连串的二进制数据来再现原始声音的,实现这个步骤使用的设备是模/数转换器(A/D)它以每秒上万次的速率对声波进行采样,每一次采样都记录下了原始模拟声波在某一时刻的状态,称之为样本。将一串的样本连接起来,就可以描述一段声波了,把每一秒钟所采样的数目称为采样频率或采率,单位为HZ(赫兹)。采样频率越高所能描述的声波频率...

2018-10-12 20:10:08 28306 6

原创 基于ffmpeg-4.0 SDK的音频重采样

/* * Copyright (c) 2012 Stefano Sabatini * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), t...

2018-10-09 19:37:01 830 2

原创 基于ffmpeg-0.10 SDK的音频重采样

这个示例代码实现了基于FFmpeg-0.10 SDK的音频重采样,也可用于实现定点转浮点计算。 1. 声明/* ffmpeg_sdk.h */#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#ifdef __cplusplusextern "C" {#endif#include "libavutil/imguti...

2018-10-09 19:33:48 348

原创 FFmpeg命令行应用备忘录

三、将PCM转格式,并编码成AAC: ./ffmpeg  -f s16le -ar 16000 -ac 1 -i input-s16le.pcm  -f f32le -ar 16000 -ac 1  -y  input-f32le.pcm  ./ffmpeg  -f f32le -ar 16000 -ac 1 -i input-f32le.pcm -strict -2 -a:b 64000...

2018-09-18 12:15:46 745

原创 面向对象设计原则实践:之五.迪米特原则,接口隔离原则

六、迪米特(第三者交互)原则1. 定义每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。 2. 分析1) 迪米特法则就是指一个软件实体应当尽可能少的与其他实体发生相互作用。这样,当一个模块修改时,就会尽量少的影响其他的模块,扩展会相对容易,这是对软件实体之间通信的限制,它要求限制软件实体之间通信的宽度和深度。2) 狭义的迪米特法则...

2018-08-27 09:39:53 799

原创 面向对象设计原则实践:之四.里氏代换原则

五、里氏代换原则(LSP--Liskov Substitution Principle)1. 定义a). 如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有变化,那么类型S是类型T的子类型。b). 子类型必须能够替换它的基类型。LSP又称里氏替换原则。  对于这个原则,通俗一些的理解就是,父类...

2018-08-27 09:33:40 851

原创 面向对象设计原则实践:之三.单一职责原则,合成复用原则

三、单一职责原则(SRP--Single-Responsibility Principle )1.  定义a).  一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。b). 就一个类而言,应该仅有一个引起它变化的原因。  所谓职责,我们可以理解他为功能,就是设计的这个类功能应该只有一个,而不是两个或更多。也可以理解为引用变化的原因,当你发现有两个变化的因素...

2018-08-27 09:28:57 1809 1

原创 面向对象设计原则实践.之二.依赖倒转原则

二、依赖倒转原则(DIP--Dependency Inversion Principle)1.依赖倒转原则定义a). 高层模块不应该依赖低层模块,它们都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象。b). 要针对接口类/抽象类编程,不要针对实现编程。  高层模块包含了一个应该程序中的重要的策略选择和业务模型,正是这些高层模块才使得其所有的应用程序区别于其他,...

2018-08-27 09:23:40 472

原创 面向对象设计原则实践:之一.开放封闭原则

常用的面向对象设计原则包括7个,这些原则并不是孤立存在的,它们相互依赖,相互补充。 名称 易记符 设计原则及简介 实现关键 关系 重要性 开放封闭原则 开放闭合 程序对扩展是开放的,对修改是封装的。 即在不修...

2018-08-27 09:16:47 856

原创 FFmpeg中的时间戳表示方法

ffmpeg中的时间单位1. AV_TIME_BASEffmpeg中的内部计时单位(时钟基),ffmepg中的所有时间表示的单位,比如AVStream中的duration, 即表示这个流的长度为duration个AV_TIME_BASE。AV_TIME_BASE定义为:#define AV_TIME_BASE 1000000 2. AV_TIME_BASE_Qffmpeg内部时...

2018-06-16 11:55:35 1952

原创 如何开启ffmpeg库中的日志

2.  在C++类中,实现ffmpeg库日志的打开// ffmpeg_sdk.h#pragma once#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt; ...

2018-06-16 11:53:44 4179

原创 MP4文件格式带数据详解

一、概述MP4文件封装格式,对应的标准为ISO/IEC 14496-12,即信息技术 视听对象编码的第12部分:ISO 基本媒体文件格式(Information technology Coding of audio-visual objects Part 12: ISO base media file format)。ISO/IEC组织指定的标准一般用数字表示,ISO/IEC 14496即MPEG...

2018-06-16 10:42:56 13052

原创 使用FFmpeg的SDK库实现将H.264流封装进MP4文件时全局SPS、PPS与流中SPS、PPS冲突的问题

一、问题1. 使用FFmpeg的SDK库实现将H.264流封装进MP4文件的源码大致如下:char* filename = "./test.mp4"AVOutputFormat *fmt;AVStream* video_st;AVFormatContext *av_context; /* 初始化资源 */av_register_all();int iret = avformat_alloc_out...

2018-06-16 10:07:00 2063 1

转载 linux C++ 类的静态成员函数与非静态成员函数的互访

前言:对象与对象之间的成员变量是相互独立的。要想共用数据,则需要使用静态成员和静态方法。只要在类中声明静态成员变量,即使不定义对象,也可以为静态成员变量分配空间,进而可以使用静态成员变量。(因为静态成员变量在对象创建之前就已经被分配了内存空间)静态成员变量虽然在类中,但它并不是随对象的建立而分配空间的,也不是随对象的撤销而释放(一般的成员在对象建立时会分配空间,在对象撤销时会释放)。静态成员变量是...

2018-02-12 18:04:16 3301

原创 linux C++ 设计模式:单例、单例继承详解

一、单例1.1. 意图保证一个类仅有一个实例,并提供一个访问它的全局访问点。 1.2. 动机如何保证一个类只有一个实例,并且这个实例易于被访问呢?如希望系统中只有一个脱机打印机实例,只有一个访问配置文件的实例时。如果使用全局变量,将使得一个对象可以被访问,但它不能防止你实例化多个对象。 一个更好的办法是:让类自身负责保存它的唯一实例。这个类可以保证没有其...

2018-02-12 17:12:32 3092 2

原创 回调函数原理及应用实例

1. 什么是回调 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用, 是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调,     是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用, 是一种类似消息或事件的机制,不过它的调用方向刚好相反,          接

2018-01-14 23:34:56 20115

原创 linux下如何定位CPU占用高的进程的问题点

一、Top+pstack+gdb的组合拳闲言少述,先直接上操作实例,再做原理讲解。1.1 用top命令找到最占CPU的进程>top  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND           22688 root      20   0 1842m 136m  13m S 1

2018-01-12 09:28:34 10557

h264-to-rtmp.copy-frame

使用了FFmpeg SDK的最新版实现; 能完整地逐帧读取h.264的码流文件, 并帧数据复制的模式封装成RTMP流并推送; 有详细的代码注释; 亲测可用,很方便整合到生产工程中;

2024-02-20

PJT-dynamic-video-encoder.by-x264.zip

基于X264实现的动态码率与动态帧率调整

2021-02-16

RTCP-RTP协议详解-中文版.doc

RTP/RTCP协议的解析

2021-02-16

red-black-tree.zip

红黑树的C语言实现

2021-02-05

查找H.264流中的SPS,PPS并解析

从FFmpeg中抽取出来, 读取文件中数据流,快速找到buffer中的SPS 和 PPS,并解析它们的代码;

2018-06-16

FFmpeg SDK的数据结构与API函数详解

我自己整理的最新版(2014-5-5)ffmpeg SDK的数据结构和API函数; 包含了数据结构中变量的大量注解,以及API函数的一些基本使用方式;

2014-05-04

ffmpegSDK_avc2ts

使用ffmpeg SDK实现的h264封装成MPEG2-TS文件; 网上其它的版本都有bug,不能工作,这个是我自己改好的; 代码分析可以看我写的文章《FFmpeg SDK开发模型之三:muxer》

2014-05-04

ffmpeg SDK与示例程序

根据ffmpeg生成的SDK, 并添加上了编译,测试通过的两例子apiexample, output_example 具体的代码分析可以看我的博客文章

2014-04-21

UDP数据接收服务器

这是我在做一个要用UDP方式进行数据传输时,自己写的一个多线程的UDP数据接收服务器, 它能将接收到的UDP数据包存成文件,并提供数据包接收时间监测; 还支持键盘命令响应,以将数据写到新的文件,和退出程序;

2013-09-18

HEVC(h.265)官方文档

HEVC(H.265)的官方文档,做视频编解码必备 2012年2月10日,在美国圣何塞召开了第99届MPEG会议。MPEG组织和ITU-T组织对JCT-VC的工作表示满意,准备于2013年1月,同时在ISO/IEC和ITU-T发布HEVC标准的最终版本。[1] 2013年1月26号,HEVC正式成为国际标准 这是2013年的最新版本

2013-05-09

录制UDP组播数据到文件

本程序支持本机多网卡(即多IP),指定IP接收UDP组播数据存储成文件。 而且本程序是多线程并行的工作方式,能保证数据并行接收与存储,从而不会造成数据丢失。 本程序还对UDP组播数据的初始化,接收和结束进行了封装,方便应用开发。 最后说明一下,本程序借鉴ffmpeg的相关代码,完全达到了应用开发级别, 且可以用来理解ffmpeg对UDP数据的处理。

2013-05-09

linux进程间的通信:匿名管道

liunx进程间,使用匿名管道通信的示例程序, 生成了两个子进程, 实现文件读取,转码成大写,写输出文件的流水并行。 对实用场合很有启发意义

2012-11-15

DirectShow实务精选+源代码

DirectShow开发的三本必备学习资料之一。 快速提高DirectShow技术的利器。

2012-10-27

DirectShow开发指南及源代码

《Directshow开发指南》书和源代码,开发directshow的入门和必备资料

2012-10-26

rtmpdump for vs2008

将rtmpdump移植到了VS2008下

2012-10-26

H.264/SVC 官方说明书最新完整版(包含SVC部分)

H.264/SVC官方的说明书,包含有SVC部分,是网上最好最全的版,研究H.264必备的文档

2012-07-29

H.264 SVC简介

H.264的SVC技术综述,基本原理介绍

2012-07-29

H.264 SVC学习报告

H.264 SVC部分的专项内容学习与疑问解答。对学习H.264的SVC的入门极有用

2012-07-29

空空如也

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

TA关注的人

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