- 博客(45)
- 资源 (6)
- 收藏
- 关注
原创 使用nginx做为http-flv服务如何解决跨域问题
什么是跨域跨域是指浏览器的同源策略限制,这个策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。如果一个请求url的协议、域名、端口三者之间任意一个与当前页面的url不同即为跨域。如下图所示即为跨域时的报错:使用nginx搭建http-flv服务主要使用了nginx和nginx-http-flv-module模块,具体过程可参考:https://blog.cs...
2020-04-15 22:04:42
5242
1
原创 windows 10 x64环境下编译带有ffplay的ffmpeg
windows下编译ffmpeg的核心在于要搭建一个类linux的编译环境,换句话说就是需要在windows环境中运行gcc、make等命令工具。本文详细介绍windows下编译环境的搭建与ffmpeg的编译过程,并成功生成ffplay。编译环境搭建windows下类linux的编译环境常见的有两种,一种是MinGW,一种是cygwin。下面先简单介绍一下两者的区别。MinGW与c...
2019-06-12 07:20:18
3456
1
转载 时间复杂度O(1), O(n), O(logn), O(nlogn) 表示的具体含义
在描述算法复杂度时,经常用到O(1), O(n), O(logn), O(nlogn)来表示对应复杂度程度, 不过目前大家默认也通过这几个方式表示空间复杂度 。那么,O(1), O(n), O(logn), O(nlogn)就可以看作既可表示算法复杂度,也可以表示空间复杂度。大O加上()的形式,里面其实包裹的是一个函数f(),O(f()),指明某个算法的耗时/耗空间与数据增长量之间的关系。...
2019-05-18 09:10:58
3358
原创 对YUV格式的详细分析
YUV数据格式的定义和采集方式YUV数据格式定义YUV分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。与我们熟知的RGB类似,YUV也是一种颜色编码方法,主要用于电视系统以及模拟视频领域,它将亮度信息(Y)与色彩信息(UV)分离,没有UV信...
2019-05-16 22:35:36
828
原创 Linux线程JOINABLE与DETACHED的区别
Linux线程JOINABLE与DETACHED的区别Linux下两种类型线程的创建joinable属性的线程detached属性的线程代码示例Linux下两种类型线程的创建Linux下多线程编程时,线程有两种属性,一种是joinable,一种是detached。joinable属性的线程如果是joinable的线程,那么必须使用**pthread_join()来等待线程结束,否则线程所占...
2019-05-13 18:50:01
1532
1
原创 MLT框架简介与部分命令解析
本文仅仅做为一篇入门文章,带领大家认识一下MLT这个框架(库)。一、简介 MLT的英文全称为MLT Multimedia Frameword,翻译过来为MLT多媒体框架。该框架国内用的人比较少,也几乎没有中文资料,本文的目的是带大家简单认识一下这个功能强大的库。 MLT的官网为:https://www.mltframework.org/, 可以在上面下载最新的源码,...
2019-04-10 14:17:15
11719
转载 TCP协议可靠传输的实现
TCP协议作为一个可靠的面向流的传输协议,其可靠性和流量控制由滑动窗口协议保证,而拥塞控制则由控制窗口结合一系列的控制算法实现。一、滑动窗口协议 关于这部分自己不晓得怎么叙述才好,因为理解的部分更多,下面就用自己的理解来介绍下TCP的精髓:滑动窗口协议。 所谓滑动窗口协议,自己理解有两点:1. “窗口”对应的是一段可以被发送者发送的字节序列,其连续的范围称之为“...
2019-01-13 23:10:12
650
原创 golang版的排序算法实现(冒泡、选择、快速)
用golang重写冒泡、选择和快速三种排序算法。测试输入参数如下所示:valus := []int{12, 23, 1, 5, 3, 9}冒泡排序接口:func bubbleSort(values []int) { for i := 0; i < len(values); i++ { for j := i+1; j < len(values); j++ { ...
2019-01-11 22:44:42
323
原创 C++中const如何用于函数重载
常成员函数和非常成员函数之间的重载首先先回忆一下常成员函数声明:<类型标志符>函数名(参数表)const;说明:(1)const是函数类型的一部分,在实现部分也要带该关键字。(2)const关键字可以用于对重载函数的区分。(3)常成员函数不能更新类的成员变量,也不能调用该类中没有用const修饰的成员函数,只能调用常成员函数。(4)非常量对象也可以调用常成员...
2019-01-09 17:28:40
368
原创 使用ffmpeg命令行实现一入多出转码
我们在实际工作中有时会遇到一入多出的转码需求,比如在给播放器提供多种网络环境的播放源选择(如流畅、清晰、高清和超清等)时就会需要这种操作。在这篇文章中,我们讲一下如何使用一条ffmpeg命令来实现同一个输入源转码输出多路不同视频的功能。
2018-11-28 17:50:05
11432
11
翻译 ffmpeg命令行map参数的使用
介绍理解-map参数的最好办法就是想像一下怎么去告诉ffmpeg你要从源文件中选择/拷贝哪个流到输出文件。输出文件的stream顺序取决于在命令行中-map的参数顺序。下面有一些例子。默认默认操作(没有指定map参数),比如:ffmpeg -i INPUT OUTPUT本质上,是从所有输入中发现“最高质量”(单个)视频输入流和“最高质量”(单个)音频输入流,并“发送”到O...
2018-07-21 11:04:58
26455
4
转载 基于FFMPEG的音频编码器
本文介绍一个最简单的基于FFMPEG的音频编码器。该编码器实现了PCM音频采样数据编码为AAC的压缩编码数据。编码器代码十分简单,但是每一行代码都很重要。通过看本编码器的源代码,可以了解FFMPEG音频编码的流程。本程序使用最新版的类库(编译时间为2014.5.6),开发平台为VC2010。所有的配置都已经做好,只需要运行就可以了。流程(2014.9.29更新)下面附一张使用FFmpeg编码音频的...
2018-07-13 18:19:59
416
转载 用ffmepg实现音频重采样
1.概述在进行音频播放时,有时音频流不能满足播放要求,需要对声音的相关属性如:通道数,采样率,样本存储方式进行变更播放,也就是音频重采样。ffmpeg提供了SwrContext进行转换。typedef struct SwrContext SwrContext;2.基本概念2.1通道数声音在录制时在不同空间位置用不同录音设备采样的声音信号,声音在播放时采用相应个数的扬声器播放。采用多通道的方式是为了...
2018-07-13 18:03:48
605
转载 Qt中无处不在的d指针为何方神圣
在研究QCoreApplication类的代码时,无意间弄明白了“d_func()”和“d指针”的来源:class Q_CORE_EXPORT QCoreApplication#ifndef QT_NO_QOBJECT : public QObject#endif{ …… Q_DECLARE_PRIVATE(QCoreApplication)public: …...
2018-02-26 17:46:29
1294
转载 ts、mp4、mov和flv媒体容器封装层的timebase分析
在使用ffmpeg封装过程中发现,封装成mp4文件音视频是同步的,但是封装成mpegts文件则有问题,视频播放正常,但音频播放异常,且不同步。所以猜测是封装层的时间基准单位(timebase)在搞鬼。 在此,并没有去深入的分析ffmepg中的源代码,而是简单的修改了一下ffmpeg中的av_dump_format函数,使之把音频的tbn(即封装层的timebase)也打印出来,分析了如下容器:mp...
2018-02-26 16:38:03
2292
原创 三个基于WebRTC开源MCU框架的横向对比
1. licode官网地址:http://lynckia.com/licode/index.html官方demo地址:https://chotis2.dit.upm.es/Github地址:https://github.com/lynckia/licodeGithub推荐指数:1483(star)功能(官方原文):Licode is base
2018-01-17 18:19:46
32964
3
原创 使用jitsi官方源安装内网演示环境过程
操作系统:ubuntu 16.04 x641.安装nginxsudo apt-get install nginx2.添加软件库sudo vim /etc/apt/sources.list在文件的最下面加上:deb https://download.jitsi.org stable/3.添加一个dns 服务地址:sudo vim /etc/
2018-01-17 15:20:58
19550
15
转载 如何使用Android Studio用相同的代码工程生成不同的APP
今天由于公司业务需要, 经理让安装两个相同的APP到手机上, 考虑到包名是应用程序的唯一标识, 所以在工程列表的app下的build.gradle里, 把applicationId改成了不同的. 然后再使用新的签名文件(也可以使用同一个签名文件)重新打包, 这样打包出来的APK就可以和其它的项目同时运行在手机上了.
2017-11-02 22:28:58
4080
原创 ffmpeg常用转码参数解析
转码命令示例$ ffmpeg -i input.flv -vcodec h264 -s 960x540 -pix_fmt yuv420p -b 800k -r 25.0 -g 50 /–acodec aac -ab 64k –ac 2 -ar 44100 -profile:v high -level:v 3.1 -subq 5 -me_method /umh -me_range 8 -r...
2017-08-08 15:51:33
6977
原创 VS2015调用低版本lib库出现“无法解析的外部符号 __snprintf ”问题的解决
VS2015在调用低版本lib库出现有时会出现“无法解析的外部符号 __snprintf ”的问题
2017-03-22 20:16:14
7119
转载 Android四大基本组件及生命周期介绍
Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器。
2017-03-06 08:03:50
645
原创 win7+vs2015 nmake编译libevent-2.1.8-stable
svn中下载的目录中,不建议用trunk中的代码,因为主分枝代码是正在开发过程中的,可能会不稳定或有bug。本例中用到的代码是从tags目录中找到libevent-2.1.8-stable,也就是当前最新发布的稳定版。
2017-02-21 14:06:26
4807
原创 C++ 11为什么会引入nullptr?
C中NULL是宏定义的void*指针:#define NULL ((void*)0)C++中void*指针不能隐式转换成其他类型的指针,所以NULL是0的宏定义:#define NULL 0那么,假如有重载函数f(int)和f(T *),调用时用f(NULL),那么就会出现二义性,无法确定调用那个函数。nullptr是一个空指针类型nullptr_t的常量,nullptr_t类
2017-02-17 19:58:48
1542
转载 C++中智能指针std::auto_ptr的用法详解
C++中指针申请和释放内存通常采用的方式是new和delete。然而标准C++中还有一个强大的模版类就是auto_ptr,它可以在你不用的时候自动帮你释放内存。下面简单说一下用法。
2017-02-09 15:23:08
8641
转载 GPU视频解码之CUVID
项目中,需要对高清监控视频分析处理,经测试,其解码过程所占CPU资源较多,导致整个系统处理效率不高,解码成为系统的瓶颈。
2016-12-21 17:22:53
6542
原创 h264 NALU的获取与分析
0x00000001或0x000001是一个nalu的起始标志,遇到下一个此标志时为该nalu的结尾。起始标志的后面第一个字节(type)里包含有nalu的类型,type & 0x1F即为该nalu的类型(nal_unit_type),具体类型分析详见下节。
2016-12-05 10:36:33
12508
转载 Linux动态库的生成与使用指南
Linux下动态库文件的文件名形如 libxxx.so,其中so是 Shared Object 的缩写,即可以共享的目标文件。
2016-11-29 16:58:36
371
原创 当类的指针被赋值为NULL时,类的哪些成员还可以被该指针调用
因为函数在类里面是独立于类存在的,而且不占用类的空间,在程序编译的时候就已经把函数的地址分配好了,因此,只要有这么一个对象,不管他指向NULL还是非NULL,都是可以调用该函数的,也不会出错。
2016-11-25 18:14:55
1730
原创 C++中为什么要使用断言
断言assert是仅在debug下有效的宏,当其中的条件为假时,触发错误提示。使用断言的目的是捕捉不应该发生的非法情况。注意:不要混淆非法情况与错误情况之间的区别,后者的出现是因为代码错误,是一定要作出处理的。
2016-11-22 10:08:25
1888
原创 Windows线程同步常用锁的分析
线程同步常用的四种锁:Event(事件)、Mutex(互斥量)、CrititicalSection(临界区)、Semaphore(信号量)
2016-11-17 10:19:48
874
原创 出现“发生访问冲突”类型错误的解决方法
若出现“***exe中的0x***处未处理的异常:0x***读取位置0x***时发生访问冲突”这样的错误,则说明访问了不属于自己的内存空间,可按照下列顺序查明原因
2016-11-17 07:34:25
6342
学生信息管理系统(VB)
2008-01-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人