- 博客(24)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 FLV 封装格式解析
FLV 实例分析FLV(Flash Video) 是一种非常流行的多媒体封装格式。它可以以文件的方式存储,也可以承载在RTMP协议之上。作为网络传输的一种封装格式。像我们现在大部分的视频网站,或者是直播网站都是使用这种格式。所以对于从事多媒体行业的人员来说,FLV也是一个我们应该掌握的基本的封装格式了。在介绍FLV文件结构之前,我们需要先理解两个概念,大端模式和小端模式。 大端模式:
2018-01-31 14:10:02
7322
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 C语言面向对象
在我们的印象中,C语言是一个面向过程的语言。应该是和面向对象没有什么关系的。但是在我们的实际开发中,如果我们真的决定使用C语言来完成一个大型的项目的化。纯函数式的编程,纯面向过程式的设计还是会让代码很难维护和理解的。所以一般的C语言项目中是或多或少会去尝试一些面向对象的设计的。那么用C 语言怎么实现面向对象呢?结构体+函数指针。基本就是这个套路了。比如我们想要定义一个Person 类。那么用Java
2017-08-30 17:01:24
2843
转载 H264 的Profile与level
原文地址:http://www.cnblogs.com/tinywan/p/6402007.html背景知识 先科普一下profile&level。(这里讨论最常用的H264) H.264有四种画质级别,分别是baseline, extended, main, high: 1、Baseline Profile:基本画质。支持I/P 帧,只支持无交错(Progressive...
2018-02-26 09:47:31
615
原创 iOS 音视频采集 AVCaptureSession
多媒体开发技术概要在之前的文章中,对多媒体音视频开发的经典流程做过一个简单的介绍。在这篇文章中,将首先就音视频从采集部分做一个实例的讲解。首先以iOS平台为例。AVFoundationApple 官方给我们提供了一个很大的一个集合框架 AVFoundation。Apple的官方介绍原文如下AVFoundation is one of several frameworks that you can
2018-02-08 16:19:27
3110
1
原创 多媒体开发技术概要
我们在多媒体开发的过程中,其实主要是处理两方面的事情。一个是多媒体数据的产生。一个是多媒体数据的展现。就对媒体数据的产生来说。如果我们将多媒体这个概念限制在音视频数据的话。那么这个过程就包含着音视频原始数据的采集,音视频原始数据的压缩,对压缩后数据的存储封装或分发。再来看一个比较经典的多媒体数据展现的流程这个基本就是上面多媒体数据产生的一个逆过程。不过为了友好的用户体验。在视频...
2018-02-08 11:01:36
977
原创 AAC ADTS 解析
ADTS的全称是 Audio Data Transport Stream。是一种运用于AAC编码数据之上的传输封装格式。当然,AAC可中的传输封装格式不止ADTS这一种。还有比如我们再VOIP产品时,如果用RTP协议作为传输协议的话,这个时候使用的就是LATM格式了。但我们再其他的一些应用场景中比较多见的就是ADTS了。比如我们需要把AAC音频编码数据存储为文件是,就需要把AAC的ES流打包成ADT
2018-02-07 15:18:54
1045
原创 H.264 PPS 解析
在上一篇文章中我们看过了SPS的结构了。同时对其中的一些字段做了一些说明。这篇文章,我们接着来讲一讲PPS(picture parameter set)图像参数集。顾名思义。PPS主要是承载一些图像级的参数的。我们还是先来一个PPS的语法定义吧 然后我们还是需要了解一下其中的一些字段的含义。 pic_parameter_set_id:用于指定本PPS的序号。而这个需要将会在slice语法中被
2018-02-06 15:06:06
3767
原创 H.264 Sps 解析
H.264 NALUint 解析H.264 NALUint 解析–实例在之前的两篇文章 H.264 NALUint 解析 和 H.264 NALUint 解析–实例 中针对NALUint做了一个比较全面的介绍了,同时也结合了实例分析。在实例分析的过程中,我们看到,我们解析出来的头两个NALUint分别为 SPS 和PPS。SPS和PPS一般是一个H.264码流的头两个NAL。在解码阶段,需要
2018-02-06 12:10:50
4078
原创 H.264 NALUint 解析--实例
H.264 NALUint 解析在上一篇文章 H.264 NALUint解析中对NALUint进行了语法结构上的分析了。这篇文章将对照上一篇的分析,结合实际的例子来一次实际的分析。我现在用UltraEdit打开一个.h264文件 看到如下结果 我们看到头四个字节的内容: 0x00 00 00 01 这就是NALUint的起始码,一直到遇到下一个起始码。我们一路看下去发下,下一个起始码
2018-02-02 14:52:02
3379
1
原创 H.264 NALUint 解析
接触过H.264视频编解码的朋友应该都知道NAL 单元这个概念。NAL的全称是 (Network Abstraction Layer) 网络抽象层。而这个NAL的主要作用是方便视频编码后数据的存储和网络传输而设计的一个额外的层。也就是说NAL是对编码数据的一种封装。说到这我们就有必要先来聊一下H.264的编码输出数据的定义了。H.264 将最后呈现给我们的编码数据分为两层: VCL: (Vide
2018-02-02 14:01:59
4035
原创 FLV 实例分析
上一篇文章我们就FLV文件格式做了一个分析,这篇文章,我们结合实际的FLV文件对照着FLV的结构来一一分析一遍。我们用UltraEdit打开一个FLV文件,我们看到的内容大概是这样的: 其中选中的9个字节就是FLV header 我们通过最右边的字符表述可以很清楚的知道。 头三个字节 0x46 0x4C 0x56 正好是FLV三个字母的ASCII码的值。 接下来的一个字节 0x01 就是Ver
2018-02-01 15:15:25
4885
原创 设计模式--适配器模式
说道适配器模式,又要说到那句老话了。计算机科学领域的任何问题, 都可以通过添加一个中间层来解决。适配器模式也是这样的一个中间层。 那么它的出现主要是要解决什么问题呢?我们现实生活中的太多事软件系统都是按照分层架构来构建的,自顶向下。有时候我们会遇到这样一个问题:现在软件已经写完了,可以正常工作了。但是现在需求发生了变动。之前软件设计的是支持Android平台。现在需要同时支持iOS平台了。但是我们
2017-11-17 14:45:32
2976
原创 设计模式--外观模式
外观模式应该是我们再实际项目中常常使用的一种设计模式。或者说其实在使用的时候自己都不感觉在使用一种设计模式在编程。它其实就是直接体现了在系统中增加一个中间件将使代码逻辑更加简洁清晰这样一种思想。比如我们需要编写一个媒体播放器。一般外面的调用者就只能看到一个Player类了而不用去关心内部的实现细节。当需要播放一个内容时就直接 Player.play(url) 就完成了我们关心的媒体播放业务。而至于底
2017-11-17 13:18:31
3011
原创 设计模式--策略模式
在面向对象程序设计过程中,我们常常说道利用多态这个特性,我觉得策略模式是最最原始的利用多态的一个设计模式了。 拿一个现实中的例子来澄清整个过程吧,比如两个人A,B同时去沃尔玛买一袋米,对于这袋米的销售价格,沃尔玛方面是这样规定的:普通用户:原价100元会员用户:原价基础上打八折所以针对不同的角色我们需要套用不同的价格算法。这时候我们引入策略模式就恰如其分了。 首先我们定义一个大米类:cla
2017-11-16 16:00:40
2969
原创 设计模式--观察者模式
观察者模式可以说是相当相当重要的一个设计模式,很多设计框架都是基于这一个设计模式的。比如我们最最熟悉的MVC,MVP,MVVM。那么观察者模式到底要解决一个什么问题呢? 现在假如在我们的系统中有A,B两个大的模块。我们可以先做这样一个假定。A模块在系统中负责信息展示与输入。B模块负责数据处理与存取。当上层用户通过A向整个系统输入数据后,A可以直接与B进行交互,把数据直接设置给B模块。然后B模块
2017-11-16 14:49:57
2989
原创 设计模式--代理模式
代理模式在我们日常开发中也是一个很重要的设计模式。我们见到的代理可以分为两种,分别是静态代理和动态代理。 我们先来看看代理的概念吧,假如我们现在有两个类,分别为Client类和Subject 类,在实现某一业务逻辑时,Client需要与Subject进行交互。出于某些考量,我们不能让Client直接调用Subject提供的接口,这些因素可能包括但不限于:控制Client对Subject的访问权限
2017-11-15 15:06:21
2982
原创 设计模式--工厂模式
工厂模式可以说是我们日常工作过程中使用比较多的一个设计模式了。如果系统比较小,也比较简单,我们可能会直接选择最简单的一种工厂模式即简单工厂模式例如,我们定义了一个Animal 接口:interface Animal{ public void printInfo();}包含一个 printInfo 方法, 用来自我描述。 然后我们定义两种动物。一种是Cat 另一种是Dog。都实现Anima
2017-11-10 15:22:16
3186
原创 设计模式 -- 单例模式
随着项目经验的增长,在工作过程中我们或多或少会涉及到设计模式相关的内容。设计模式是那些巨人们在漫长的软件开发过程中总结出来的对一些问题的通用的解决方案。或者称之为解题思想。正如我们大家所知道一样,从来没有一个设计模式的类库可以供大家直接调用的。而原因也就在于设计模式这东西没有固定的。它是一些经验的总结,一些问题的解决思路的总结,它不针对于任何某一特定产品和业务。而运用它则需要我们理解它并用这些方案和
2017-11-09 17:15:03
3198
原创 C 语言面向对象-- 多态
在面相对象的设计过程中,很重要的一个特性就是实现运行时多态。在我们的前面一篇文章中我们讨论过了如何实现继承。那么这篇文章中我们就将着上一次的例子,来说说在C语言中如何利用语言的灵活性来实现多态。C 语言面向对象– 继承 C 语言面向对象– 多态在继承的例子里,我们实现了一个基类 Persontypedef struct _person{ char name[128]; int
2017-11-09 14:56:26
3434
原创 C 语言面向对象-- 继承
在Java语言中,如果我们想实现继承,那我们会这样写。 比如我们要定义一个 Person 类,然后定义一个Student 类继承自Person 类,public class Person { private String name; private int age; public Person(String name, int age) { th
2017-09-04 10:15:03
2843
原创 FFMpeg 源码分析 (3)avformat_open_input()
这个函数主要用来打开媒体资源。完成媒体格式的探测和获取相关的媒体信息的工作。函数完成定义如下:int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options){ AVFormatContext
2017-08-29 15:04:20
3096
原创 FFMpeg 源码分析(2)avformat_network_init()
如果我们需要用到网络功能,那么我们还是需要调用一下avformat_network_init 这个方法。int avformat_network_init(void){#if CONFIG_NETWORK int ret; ff_network_inited_globally = 1; if ((ret = ff_network_init()) < 0)
2017-08-25 16:33:41
8539
原创 FFMpeg 源码分析(1)av_register_all()
FFMpeg 源码分析(1)av_register_all()一般我们使用FFMpeg做编解码都会先调用`av_register_all()`这个函数开头,完成基本的初始化工作。而至于它具体初始化了哪些东西呢,我们直接从代码里面来看吧。 void av_register_all(void) { static int initialized; //标志位指示是否已经初始化
2017-08-25 14:01:09
4993
1
原创 FFMpeg 源代码分析
FFMpeg 源代码分析引言最近在公司带领团队在做一个视频播放器的项目。由于整个团队之前并没有相关的技术积累,同时公司也没有相关的产品积累。为了能让项目快速的上线,决定使用FFMpeg作为底层的多媒体引擎。一方面大大节省项目时间,另一方面也可以大大降低整个项目的技术门槛。 联想起之前的一些过往经验,学过的技术很久不用还是很容易忘记的。还是记下来做个备忘比较靠谱。所以决定写这样一个技术博客来
2017-08-25 13:12:34
2917
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人