- 博客(19)
- 资源 (17)
- 收藏
- 关注
原创 基于X264的动态帧率与动态码率调整的实现
1、动态帧率的实现1.1 实现思路依据动态调整因子(由网络状态,CPU状态、程序状态等组成),计算出当前帧的可用码率,再在时间轴上动态调用x264的API实现对YUV数据帧的编码,然后对编码帧打上非固定的动态时间戳,从而实现了码率不变,帧率动态调整技术,达到: 码率(清晰度)不变,流畅度变化的效果----即清晰度优先设置;1.2 如何指定编码成关键帧AVFrame* _v_frm;_v_frm->key_frame = key_frame;if (key_fra
2021-02-17 21:46:49 2133
原创 全局服务器调度简介
1. 全局服务器调度1.1 部署架构原理图下图是一个典型的通信系统的服务器部署图:说明:> 每个用户所在的地区有一个或多个IDC机房覆盖,> 每个IDC机房部署有一台或多台信令边缘服务器、一台或多台媒体边缘服务器;> 边缘IDC机房与中心IDC机房间可能有专线连接,也可能因为无专线而只能使用公网连接;1.2 全局服务器调度调度的流程如下 :Step1: 根据用户来源IP查出他所属的国家-城市-IDC运营商;Step2: 根据用户所属的国.
2021-02-16 22:35:32 942 1
原创 服务端媒体引擎框架
MCU(Meida Central Unit)是服务端的中央媒体处理单元,它有两大主要功能,一是管理由它处理的所有会话(Session)的业务逻辑;二是集中一个会话(Session)中所有用户(Channel)的音视频数据,对它们分别进行音视频的处理后,再分发给各个用户。1. MCU的整体架构下图为MCU的整体架构图:> 基于TCP协议的ProtoBuf信令,用于实现业务逻辑,及Session管理。Session管理包括Session的创建,用户加入或退..
2021-02-16 22:25:14 348 1
原创 客户端媒体引擎框架
双向音视频通信系统的客户端是一个复杂的子系统,它比起单向直播系统的推流客户端,播放客户端都要复杂,因为它需要在采集本地音视频推送到服务端的同时,还要从服务端接收音视频数据进行播放。而对于真正的实际生产用的客户端来说,它还需要有完整的业务逻辑实现,良好的健壮性,并适配各种平台,这更增加它的复杂度。本文介绍了一个完整的客户端的媒体引擎的基本框架,并对其核心工作原理做了介绍。1. 客户端媒体引擎架构下图是客户端媒体引擎的架构图:平台接入层:是对整个SDK的...
2021-02-16 22:19:20 525 1
原创 RTP协议封装音视频媒体数据详解
RTP协议对媒体数据(包括音频和视频)的封装是由指定的的协议文档规定。1. RTP封装H.264视频编码数据1.1 H.264 基本流的结构H.264 的基本流(elementary stream,ES)的结构分为两层,包括视频编码层(VCL)和 网络适配层(NAL)。视频编码层负责高效的视频内容表示,而网络适配层负责以网络所要 求的恰当的方式对数据进行打包和传送。引入 NAL 并使之与 VCL 分离带来的好处包括两方面:其一、使信号处理和网络传输分离,VCL 和 N..
2021-02-16 20:40:00 619
原创 NAT-UDP穿透详解与实践
一、NAT-UDP穿透详解1、NAT分类1.1 基础型NAT仅将内网主机的私有IP地址转换成公网的IP地址,并不对TCP/UDP端口信息进行转换,分为静态NAT和动态NAT。> 静态NAT:一个公网IP对应一个内部IP,一对一转换> 动态NAT:N个公网IP对应M个内部IP,不固定的一对一转换关系1.2 NAPTNAPT不但会改变经过这个NAT设备的IP数据报的IP地址,还会改变IP数据报的TCP/UDP端口。现在基本使用这种,又分为对称和..
2021-02-16 14:53:33 1032
原创 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 785
原创 高并发架构设计漫谈
商业系统的架构设计知易行难,少有一蹴而就的。它往往是业务、技术、人员、时间的四重平衡与取舍。架构如下棋,如是见棋走子,不做提前两三步的预测和判断,通常难胜。当业务已经在系统上跑起来后,想要再改架构,积重难返。业务不等人,竞争对手进攻,决策层耐心有限,项目成员精力疲惫信心不在,何去何从?本文讨论的是面向商业的高并发系统,介绍了一种面向高并发的流媒体传输系统的架构设计,它和具体的业务关系不大。和自下而上设计(如从使用开源软件验证功能到最终开发出满足业务需要的系统)不同,这里.
2021-02-13 08:16:46 256
原创 高并发开源组件的应用
在高并发系统中,除了自开发的各种业务处理系统外,还可以使用的一些支持高并发的开源组件和中间件,它们大都是业界的标杆性项目,能大大提高整个系统的并发性能,加速业务的快速落地。本文介绍在高并发流媒体传输系统中用到的几个典型开源组件,它们分别是Kafka, redis, Linux LVS;1. Kafka1.1. 简介Apache kafka 是一个分布式的基于push-subscribe的消息系统,它具备快速、可扩展、可持久化的特点。它现在是Apache旗下的一个开..
2021-02-13 08:09:24 215
原创 数据库操作的高并发优化
对于高并发系统来说,如果涉及到数据库中数据的增删改查操作,为了提高并发量,我们要做的第一件事情是对数据进行分层。下图是一个基本的数据库数据分层实现方案> 对于高频高并发操作数据, 可以使用Redis集群,并应用其Hash模式来存储和操作数据;> 对于高频的查找数据(较少的修改数据)操作,可以使用红黑树来操作数据;> 对于普通操作的数据,如果只涉及到本机的操作数据,可以用Linux自带的轻量级的Sqlite数据库来操作;如果涉及到多机的数据共享,则可.
2021-02-13 08:05:22 636
原创 进程间高效数据通信架构
为了提高服务器的并发性能,除了使用程序优化技术,多线程并发技术外,还可以用多进程并发技术。而涉及到多进程并发技术,往往需要进行进程间高效数据通信技术;Linux系统为程序开发提供了多种进程间通信技术,包括有信号,进程间socket, 信号量,匿名管道,命名管道,共享内存。本文介绍一种基于命名管道和共享内存的进程间通信方法;整体原理图如下:主要组成部分如下:DataQueue Producer: 是数据的生产者,它除了生产数据外,还生成信令;DataQueu..
2021-02-13 08:01:30 380 2
原创 配置文件热加载技术
基于信号量的配置文件热加载实现对于高并发的服务端来说,当服务正在运行进,却需要进行配置文件修改,以响应各种业务需求,这时就需要对服务端进行配置文件的热加载功能。下面是一种基于信号量的配置文件热加载实现。1 使用单例模式构建配置文件类class CConf {public: CConf() { }; ~CConf() { }; int load_cfg(const string& conf_file); int reload_cfg(.
2021-02-13 07:56:21 897
原创 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 201
原创 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 244
原创 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 294
原创 专题-前言
短视频、长视频的点播,监控与流媒体直播算是单向的音视频通信;一对一、一对多聊天,视频会议算是双向的音视频通信;本专题讨论后一种,即双向音视频通信中的方方面面。这里声明,本专题讨论的方案和思路只是我所见的众多解法中的一种,不一定是最优解!人外有人,山外有山,降龙十八掌也得服扫地僧!行业不同,场景不一,比尔盖茨也看走眼云计算!在这些方方面面的问题中,有两个问题是最突出的:高并发,即如何实现在一个系统中容纳成千上万的用户同时通信?低延时,即如何保证用户双方能流畅无延..
2021-02-01 22:25:40 159
h264-to-rtmp.copy-frame
2024-02-20
FFmpeg SDK的数据结构与API函数详解
2014-05-04
ffmpegSDK_avc2ts
2014-05-04
ffmpeg SDK与示例程序
2014-04-21
UDP数据接收服务器
2013-09-18
HEVC(h.265)官方文档
2013-05-09
录制UDP组播数据到文件
2013-05-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人