1小时学会:最简单的iOS直播推流(六)h264、aac、flv介绍
最简单的iOS 推流代码,视频捕获,软编码(faac,x264),硬编码(aac,h264),美颜,flv编码,rtmp协议,陆续更新代码解析,你想学的知识这里都有,愿意懂直播技术的同学快来看!!
源代码:https://github.com/hardman/AWLive
前面介绍了如何捕获音视频原始数据,介绍了yuv和pcm。
下面来介绍一下我们的想要转换的目标音视频格式:h264,aac,flv。
什么是h264?
这里就不贴名词解释了。
说明一下,为什么需要这种格式。
其实除了h264格式之外,视频格式有很多种,出现这些格式原因无非有3种。
1. 压缩尺寸。我们来计算一下:yuv420格式,宽度为480,高度为320的视频,每一帧 需要 480*320*3/2 = 230400 字节。假设视频每秒20帧,那么30秒的视频 是 230400 * 20 * 30 = 138240000 字节 大约138M。你可能觉得不是很大,但是这个分辨率同样清晰度的h264视频可能只需要1-2M左右(当然也跟码率有关)。2. 为了与当前产品业务匹配,或者版权专利等原因,创造一种独特的格式。比如QuickTime,WMV等。3. 对当前技术的改进。h264正是对h263的改进。
h264 怎么压缩视频数据呢?
最重要的一点是将视频帧分为关键帧和非关键帧。
关键帧的数据是完整的。包含了所有的颜色数据。这样的视频帧称为I帧。
非关键帧数据不完整,但是它能够根据前面或者后面的帧数据,甚至自己的部分帧数据,将自身数据补充完整。这种视频帧被称为 B/P 帧。
总体来说,h264跟yuv相比,最大的不同就是它是压缩的(通常此过程称为编码,不只是简单的压缩)。
什么是aac
aac同h264性质一样,它也是pcm的压缩(编码)格式。
mp3大家都听说过,以前听歌保存到电脑里的歌曲90%都是mp3格式。
aac 相对 mp3来说,是更先进的压缩格式。
什么是flv
h264是视频编码格式。
aac是音频编码格式。
除了这两种格式之外,还有一种将视频和音频合成(muxer 这个词会在相关代码中经常出现)在一起的格式。
比如:mp4,avi,rmvb,flv。
flv 是一种简单的视频合成格式。
它支持指定的音视频格式,如:h263,h264,VP6 及 AAC,MP3,Nellymoser等。
简单说来,flv的组成如下:
flv header + script tag + video tag + audio tag + ... + video tag + audio tag
flv由 flv header 和无数的tag组成的。
flv header 内容是固定的。
一个tag就像是一个数组中的元素。是一个单独的储存了信息的数据块。
script tag 内存储了视频相关信息,如:宽高,码率,fps,文件大小,音频信息等等。
video tag 中 存储的是完整的视频压缩格式的一帧数据,如h264数据。
audio tag 中 存储的是完整的音频压缩格式的一帧数据,如 aac数据。
这样把所有数据拼接在一起,写入文件。这个文件就是flv格式。可以使用播放器播放了。
而flv刚好支持 h264 和 aac。
为什么介绍flv呢?
因为rtmp协议所传输的视频流,就要求是flv格式。
所以,程序从相机和麦克风捕获到音视频数据后,分别转成 aac和h264格式的音视频帧。
然后将aac和h264音视频帧合成flv格式的视频后发送到rtmp服务器。客户端就可以播放我们推的流了。
注:上述内容不一定够精确,以容易理解为上。
文章列表
- 1小时学会:最简单的iOS直播推流(一)项目介绍
- 1小时学会:最简单的iOS直播推流(二)代码架构概述
- 1小时学会:最简单的iOS直播推流(三)使用系统接口捕获音视频
- 1小时学会:最简单的iOS直播推流(四)如何使用GPUImage,如何美颜
- 1小时学会:最简单的iOS直播推流(五)yuv、pcm数据的介绍和获取
- 1小时学会:最简单的iOS直播推流(六)h264、aac、flv介绍
- 1小时学会:最简单的iOS直播推流(七)h264/aac 硬编码
- 1小时学会:最简单的iOS直播推流(八)h264/aac 软编码
- 1小时学会:最简单的iOS直播推流(九)flv 编码与音视频时间戳同步
- 1小时学会:最简单的iOS直播推流(十)librtmp使用介绍
- 1小时学会:最简单的iOS直播推流(十一)sps&pps和AudioSpecificConfig介绍(完结)
相关文章:

分享一款Markdown的css样式
使用 本样式在这个样式的基础上做了一些修改, 主要是对于表格和代码块以及一些细节的修改。 主要目的是用在chrome的扩展 Markdown Preview Plus中, 替换其内置的样式。 由于 Markdown Preview Plus对css文件大大小有要求(小于8K)…

远程桌面怎么持续连接_如何拥有成功且可持续的远程产品管理职业
远程桌面怎么持续连接Remote work is rapidly growing in all industries. Some professionals might try to push away this new way of working, seeing it as simply a current necessity. They might not think its fit for a product manager who’s constantly managing …

1小时学会:最简单的iOS直播推流(七)h264/aac 硬编码
最简单的iOS 推流代码,视频捕获,软编码(faac,x264),硬编码(aac,h264),美颜,flv编码,rtmp协议,陆续更新代码解析,你想学的知识这里都有…

Linux日常命令记录
1、查找进程 ps -ef | grep javajps 2、杀死进程 kill -9 1827 3、进入tomcat中的日志文件夹 cd logs 4、查看日志 tail -f catalina.outtail -n 10000 catalina.out 5、查看tomcat的连接数 ss -nat|grep -i "8081"|wc -lnetstat -nat | grep -i "8081" | …

【特效】移入显示移出隐藏
移入显示移出隐藏的效果也是很常见的,例如: 如果页面有有多处地方有此效果,那么也可以合并到一块,只写一段js代码,只要注意控制样式和class名字和用于js获取元素的class名字分开设置就可以了。代码很简单,用…

web前端开发最佳实践_学习前端Web开发的最佳方法
web前端开发最佳实践为什么要进行网站开发? (Why web development?) Web development is a field that is not going anywhere anytime soon. The web is moving quickly, and there are regular improvements to the devices many people use daily. Web开发是一个…

使用C#的HttpWebRequest模拟登陆网站
很久没有写新的东西了,今天在工作中遇到的一个问题,感觉很有用,有种想记下来的冲动。 这篇文章是有关模拟登录网站方面的。 实现步骤; 启用一个web会话发送模拟数据请求(POST或者GET)获取会话的CooKie 并根…

1小时学会:最简单的iOS直播推流(番外)运行不起AWLive的demo的同学请看这里
最简单的iOS 推流代码,视频捕获,软编码(faac,x264),硬编码(aac,h264),美颜,flv编码,rtmp协议,陆续更新代码解析,你想学的知识这里都有…

学习css布局
非常经典 http://zh.learnlayout.com/ float和position:absolute都是inline-block,破坏性的。absolute根据父元素定位(static父元素除外)。div也将不再是一行的块了。 position:relative自身定位。top,left是根据自己原本位置&…
csv文件示例_如何在R中使用数据框和CSV文件-带有示例的详细介绍
csv文件示例Welcome! If you want to start diving into data science and statistics, then data frames, CSV files, and R will be essential tools for you. Lets see how you can use their amazing capabilities.欢迎! 如果您想开始研究数据科学和统计学&…

1小时学会:最简单的iOS直播推流(八)h264/aac 软编码
最简单的iOS 推流代码,视频捕获,软编码(faac,x264),硬编码(aac,h264),美颜,flv编码,rtmp协议,陆续更新代码解析,你想学的知识这里都有…

003小插曲之变量和字符串
变量:赋值(名字值);变量名:字母分大小写/数字/下划线,不能以数字开头;拼接;原始字符串r; 专业优秀的名称:teacher/num/name/test/temp >>> teacher小…

mysql插入大量数据
创建实验表: CREATE TABLE a ( id int(11) NOT NULL AUTO_INCREMENT, name char(50) NOT NULL, type char(20) NOT NULL, PRIMARY KEY (id)) ENGINEInnoDB; 创建存储语句: delimiter // create procedure insertdata() begin declare i int …

十六进制190的2进制数_十六进制数系统解释
十六进制190的2进制数Hexadecimal numbers, often shortened to “hex numbers” or “hex”, are numbers represented in base 16 as opposed to base 10 that we use for everyday arithmetic and counting.十六进制数字(通常缩写为“十六进制数字”或“十六进制”)是以16为…

初学ssm框架的信息
ssm框架,就是Spring ,SpringMVC ,mybstis 的简称,我们是从mybstis 开始学起的,mybatis的作用作为一个连接数据库的框架,可以很好配置连接好数据库, 有mybatis,我们对数据库增删改查的操作更为简便了。SSM框架ÿ…

转:YUV RGB 常见视频格式解析
转: http://www.cnblogs.com/qinjunni/archive/2012/02/23/2364446.html YUV RGB 常见视频格式解析 I420是YUV格式的一种,而YUV有packed format和planar format两种,而I420属于planar format的一种。 同时I420表示了YUV的采样比例4:2:0。4…

1小时学会:最简单的iOS直播推流(十)librtmp使用介绍
最简单的iOS 推流代码,视频捕获,软编码(faac,x264),硬编码(aac,h264),美颜,flv编码,rtmp协议,陆续更新代码解析,你想学的知识这里都有…

导入语句 python_Python导入语句说明
导入语句 pythonWhile learning programming and reading some resources you’d have come across this word ‘abstraction’ which simply means to reduce and reuse the code as much as possible.在学习编程和阅读一些资源时,您会遇到“抽象”一词,…

网页性能测试---webpagetest
http://www.webpagetest.org/转载于:https://www.cnblogs.com/cai-yu-candice/p/8194866.html

1小时学会:最简单的iOS直播推流(十一)spspps和AudioSpecificConfig介绍(完结)
最简单的iOS 推流代码,视频捕获,软编码(faac,x264),硬编码(aac,h264),美颜,flv编码,rtmp协议,陆续更新代码解析,你想学的知识这里都有…

ES5 数组方法forEach
ES6已经到了非学不可的地步了,对于ES5都不太熟的我决定是时候学习ES5了。 1. js 数组循环遍历。 数组循环变量,最先想到的就是 for(var i0;i<count;i)这样的方式了。 除此之外,也可以使用较简便的forEach 方式 2. forEach 函数。 使用如…

pytorch深度学习_了解如何使用PyTorch进行深度学习
pytorch深度学习PyTorch is an open source machine learning library for Python that facilitates building deep learning projects. Weve published a 10-hour course that will take you from being complete beginner in PyTorch to using it to code your own GANs (gen…

LwIP Application Developers Manual12---Configuring lwIP
1.前言 2.LwIP makefiles With minimal featuresC_SOURCES \ src/api/err.c \ src/core/init.c \ src/core/mem.c \ src/core/memp.c \ src/core/netif.c \ src/core/pbuf.c \ src/core/stats.c \ src/core/udp.c \ src/core/ipv4/icmp.c \ src/core/ipv4/inet.c \ src/core/i…

仿斗鱼聊天:基于CoreText的面向对象图文排版工具AWRichText
AWRichText 基于CoreText,面向对象,极简,易用,高效,支持精确点击,UIView混排,GIF动图,并不仅仅局限于图文混排的富文本排版神器。 代码地址:https://github.com/hardman/…

搭建nexus后,进入首页的时候出现warning: Could not connect to Nexus.错误
nexus出现这种问题,一般是版本太旧,换一个高版本的nexus就能解决了。 转载于:https://www.cnblogs.com/tietazhan/p/5459393.html

微软hackathon_武汉Hackathon的黑客之路–开发人员如何抗击COVID-19
微软hackathonThe Chinese New Year in 2020 was one of the saddest Chinese New Years in recent memory. After the sudden outbreak of the COVID-19 virus, the city pressed pause on all celebrations.2020年的农历新年是最近记忆中最可悲的农历新年之一。 在COVID-19病…

SVN版本控制系统使用
一.版本控制系统安装: 软件下载地址:https://www.visualsvn.com/downloads/ 二.安装版本控制系统以后,在window下,设置环境变量。 三.在命令提示符控制台查看服务器版本:svn --version 四.创建仓库:F:\DevR…

iOS的KVO实现剖析
KVO原理 对于KVO的原理,很多人都比较清楚了。大概是这样子的: 假定我们自己的类是Object和它的对象 obj, 当obj发送addObserverForKeypath:keypath消息后,系统会做3件事情: 动态创建一个Object的子类,名…

你真的以为了解java.io吗 呕心沥血 绝对干货 别把我移出首页了
文章结构1 flush的使用场景2 一个java字节流,inputstream 和 outputstream的简单例子3 分别测试了可能抛出java.io.FileNotFoundException,java.io.FileNotFoundException: test (拒绝访问。),java.io.FileNotFoundException: test.txt (系统…

GitHub为所有人免费提供了所有核心功能-这就是您应该关心的原因
Just a couple of days ago, GitHub wrote a blog article stating that it is now free for teams. Heres the official blog article if youre interested. 就在几天前,GitHub写了一篇博客文章,指出它现在对团队免费。 如果您有兴趣,这是官…