- 博客(20)
- 收藏
- 关注
原创 详解MongoDB
1.MongoDB简介MongoDB是分布式文件存储的数据库,为WEB应用提供可扩展高性能数据存储解决方案,是介于关系数据库和非关系数据库之间,是非关系数据库中功能最丰富,很像关系数据库。MongoDB在高负载的情况下,可以添加更多节点,可以保证服务器性能。MongoDB将数据存储为一个文档,数据结构由键值对组成。文档的数据结构有些类似JSON对象,字段值可以包含其他文档,数组及文档数组。2.MongoDB特点(1)MongoDB 是面向文档存储的数据库(2)可以设置任何属性的索引,实现更快排序
2020-07-14 09:52:19 537
原创 详解Redis
REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统。Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。1
2020-07-09 16:45:14 396
原创 详解HTTP协议与RESTFUL
1.HTTP简介http协议是一种超文本传输协议,主要应用在浏览器与服务器之间的通信,可以传输文本,图片,视频等。它是一种应用层协议,也是基于TCP协议,当然现在流行的Https协议是在TLS或SSL协议层上面。如下图所示:HTTP是一个应用层协议,是一个无状态协议,默认端口号是80.,HTTPS端口号为443。HTTP的特性:(1) 协议简单,只用传递请求方法和路径,程序规模小,通信速度快。(2)可以指定传输类型,由Content-Type标记。(3)HTTP0.9 和 1.0使用非持续连接
2020-07-08 20:33:32 8502
原创 详解Nginx系列
1.Nginx特点Nginx是一个事件驱动架构,而非传统过程驱动架构。具有内存占用低,当并发连接大时,能够预测内存使用率。Nginx改变了传统的web服务器体系架构,提高了响应速度,起初Nginx开发的目标是实现10倍以上的性能,并能够模块化,事件驱动,异步,单线程web服务器和web服务器代理。(1)Nginx作为web服务器Nginx使用更少的资源,支持更多连接,更快响应,能够支持高达50000个并发连接的响应,并选用了epoll and kqueue模型。(2) Nginx作为负载均衡服务器.
2020-07-07 09:51:37 355
原创 详解Mysql存储引擎
1.libmysql相关API介绍MYSQL *mysql_init(MYSQL *mysql)函数功能:分配或初始化MYSQL对象,若mysql是NULL,将分配,初始化,并返回新对象。否则,直接初始化,并返回。MYSQL *mysql_real_connect(MYSQL *mysql, const char *host,const char *user,const char *passwd,const char *db,unsigned int port,const char *uni
2020-07-02 16:55:20 314
原创 希尔排序、归并排序、快速排序,KMP
再说这三种排序前,先对比下这几种排序的复杂度。1.希尔排序希尔排序的思想是以分组的方式,分而治之。核心思想:一边分组一边排例如把10个数据,分为5组,5组里面,小的放在左边,大的放在右边。第二次,再把它分为4组,依然是小的放左边,大的放在右边。分组的次数越多,交换的次数越小。也可以把希尔排序看作一次分组的插入排序。希尔排序空间存储比较小o(1),适合空间复杂度比较小的场景。如果空间复杂度比较大,一般都是外排序。稳定和不稳定的意思是什么?比如集合中,有2个数一样,但是两个数经过排序后,依.
2020-06-30 17:29:25 272
原创 二叉树与红黑树
红黑树在工程中的使用,红黑树是平衡树的一种。红黑树顺序的功能快速查找的功能1.二叉树插入如果比当前根节点大,就插到右子树如果比当前根节点小,就插到左子树再与根节点的子树去比较,决定插入到左子树,还是右子树。一直到左右子树为空的情况。注意:二叉树的插入,只能作为叶子节点。代码中的tmp指向的是node的父节点。下图的根节点是tmp指向的,node是指向根节点的子节点。//二叉树创建节点,一般是不对外开放struct bstree_node *bstree_cr
2020-06-30 17:23:09 283
原创 布隆过滤器与哈希
1.布隆过滤器什么是布隆过滤器呢?它是一种类似哈希的数据结构,通过这个数据结构,可以快速的插入和查询,确定某个事件一定不存在或可能存在。特点是占用空间少,缺点是返回的结果是概率性,有一定误差,在方案选型时,需要注意这些特点。2.布隆过滤器数据结构布隆过滤器是一个bit向量或bit数组,如下图所示,bit的存储是耗内存,但是key的增加,反而不耗内存,因为不存储key。当一个元素加入集合时,就通过K个hash函数将这个映射成一个位数组中的K个点,把它们置为1。当查询时,只要检查这些点是否全为1,就能
2020-06-30 17:07:50 1363 1
原创 详解设计模式系列
1.观察者模式观察者模式作用:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。观察者模式结构图:Observer模式定义的是一对多的关系,这里一就是图中的Subject 类,而多则是Obesrver 类,当Subject 类的状态发生变化时,通知与对应的Observer去更新相应状态,并支持添加和删除Observer 对象的操作。Obesrver 模式的实现步骤如下:1.subject 类都是采用链表等容器来存放 Observer 对象
2020-06-30 16:55:32 233
原创 最快系统搭建:Vmware、ubuntu18.0及常用软件安装
首先去对应的官网下载vmware(官网下载,需要找密钥)和ubuntu18.0(桌面版本或者server版本)ubuntu官网:https://www.ubuntu.com/download/serverVm官网:https://www.vmware.com/cn/products/workstation-pro.html打开虚拟机,并创建新的虚拟机3.选择典型4.选择ubuntu对应的镜像,这个需要去ubuntu官网去下载5.密码:(自己设置)Root权限密码是:(自己设置..
2020-06-10 15:30:01 361
原创 RK3399音视频开发之花屏、抖动分析(硬核文章)
1.引言最近在RK339开发做项目时,碰到一个非常棘手的问题,挂机测试或终端后重启后具有小概率的花屏,抖动,而且这个现象是不可逆,只有重启推流服务或者重启整个终端,才会恢复。这个问题会导致视频采集,编码,推流的效果很差,导致用户体验很差。所以本文我就来分析下整个过程,以及解决办法。2.视频花屏、抖动问题定位我们在谈到视频花屏时,一般首先想到就是丢帧导致,那为什么会丢帧呢?丢帧是一个结果,那是什么原因导致丢帧?采集模块丢帧,编码模块丢帧,还是推流模块丢帧呢?还是什么其它原因呢?顺着这个思路开始了大量的
2020-05-21 11:33:13 1443
原创 ffmpeg源码优化之推流发送篇
1.引言大家好,距离上篇文章已经过去有一段时间了,主要是最近太忙了,一直没有更新。今天总算能抽出一点时间,说说ffmpeg源码级别的优化了,这块应该会连载,请大家持续关注。废话不多说,接下来就进入正题,说说怎么样进行优化。2.问题引出及解决使用ffmpeg接口去推流,当网络不稳定时,av_interleaved_write_frame有时候会出现长期无法返回,也就是卡死在里面,造成无法退出或不能进行下一步处理。下面我们就来分析下该接口究竟干了什么,揭开其神秘的面纱。int av_interleav
2020-05-09 19:17:54 2247 4
原创 实现音视频在Android与IOS平台的采集与编码之Android视频(1)
一、前言前面我们已经讲解了视频的编码、解码、网络传输的相关基础知识,相信认真阅读多的朋友,应该熟悉了,有人会问,这些知识能够帮我们做什么呢?本篇文章就来说说具体能做那些项目。由于时间和篇幅的关系,先来说说音视频的采集、编码、推流(网络传输),这种应用场景大多在直播,拍摄视频上传服务器等场景。比如通过手机摄像头拍摄了一段很精彩的视频,发送到朋友圈,这个过程就是本文所要详细描述的音视频采集、编码、推...
2020-01-17 16:05:48 440
原创 解析音视频网络传输技术之一
前面讲解了音视频编解码的基本知识,相信阅读过的朋友,都有个基本的认识。音视频除了存储,还如何传输呢?比如直播互动,网上课堂等,这些场景中,音视频是如何实现在网络中传输呢?今天这篇文章,就讲解下,音视频的传输的基本知识。本文主要讲解一些基本的传输协议、拥塞控制,音视频同步,校验,QOS服务质量等。一.传输协议流媒体的很多协议都是在传统的TCP/UDP协议之上,加强流媒体在网络传输中的稳定性。在端...
2020-01-14 18:49:19 3945
原创 H264解码器原理之一
H264的层次结构包括VCL(视频编码层)与NAL(网络提取层),具体的语法结构,在之前的文章已经提到过,这里就不再赘述了。NAL主要是把VCL的内容进行封装,帮助更好的适合复杂的网络环境。在解码端,NAL解码器又复杂拆分,进行图像重构建,如下图所示解码流程图。大致的解码流程为,解码器接收到压缩的码流,经过熵解码,再经过反量化,再反变换,得到残差数据,当解码器获得解码的头信息后构建一个预测块PR...
2020-01-11 11:12:27 1131
原创 H.264详解之一
前面有一篇文章,利用H264举例,讲解了编码的基础知识。这篇文章,就详细的剖析H264。H264究竟是什么结构?为什么性能好?带着这些问题来讲解,来完成这篇文章。1.H264元素的分层结构H264每个基本元素由视频序列(Group of Picture),图像、片(slice)、宏块(block)、子宏块等组成。H264的元素对每个slice中的公共数据做了提取,减少了冗余度。H264的分...
2020-01-06 20:59:14 528
原创 移植CMake、Opencv到海思(linux系统)平台
安装CMake:1.登陆Cmake官网:https://cmake.org/download/,官网界面如下:2.解压Cmake压缩包:tar zxvf cmake3.11.4.tar.gz,如图所示:3.进入cmake3.11.4文件夹,安装,cd cmake3.11.44.配置环境:./configure5.编译:make6.安装:sudo make install7.更新环境...
2020-01-04 11:06:58 634
原创 移植FFmepg到Hisi3531D(Linux系统)平台
1.登陆FFmoeg官网,http://ffmpeg.org/download.html 。下载对应的FFmpeg源码。我这里就以FFmpeg3.4.4为例子来讲解。2.解压:tar -zxvf ffmpeg-3.4.4.tar.gz3.解压出源码后,再指定权限:chmod -R 777 ffmpeg-3.4.44.把源码移动到自己创建的目录:mv ff ffmpeg-3.4.45.到源...
2020-01-04 10:26:57 472
原创 海思3531D环境搭建
前面工作中,有一段时间,再做海思相关的项目,hisi3531D是一款广泛应用在音视频领域的芯片,其解码的速度和效率,被业内称赞。本文主要是讲解海思3531D在linux系统环境搭建,包括u-boot、linux内核、根文件系统以及少写,以及如何实现网络环境开发。1.内核编译内核源代码中除了系统运行所必须的核心代码之外,还包含了各种各样的外部设备驱动、文件系统,以及一些跟某种特性相关的代码。而这...
2020-01-04 09:37:46 2521 3
原创 视频编码的基础知识
视频编码的基础知识在流媒体的平台搭建过程中,编码是无法避免的一个话题,为什么要编码?熟悉流媒体的朋友都知道,编码是为了压缩原有输入源的大小,使其更好的适应网络带宽,特别是在网络带宽不是很好的情况,所以学习流媒体,编码技术的理解和学习显得很重要,首先我们就来讲讲编码的基础知识。这里以H264为例子来讲解。H264是什么?H264是市面上常见的编码算法,其中编码后的文件,能够高效的在网络实现传输...
2020-01-03 17:22:23 593
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人