文档章节

[直播一揽子]初期调研

拉风的道长
 拉风的道长
发布于 2016/07/10 00:05
字数 1065
阅读 106
收藏 2

这几天在调研直播的技术。虽然现在有很多“开源”的SDK,或者各个厂家的SDK。但是还是想自己去调研一下整个的直播流程/技术,并且通过代码去实现一套这样的功能。

整体规划:

看网上的文章介绍,基本上的流程是这样的:采集,编码,发送,转发,解码。我这次主要研究一下采集,编码,发送这三个客户端采集的步骤。

采集设备:Android手机摄像头采集视频,麦克风采集音频。

编码格式:音频:aac,视频:h264。

发送协议:rtmp协议。

采集方法:

摄像头采集视频的方法有两种:Camera的onPreviewFrame的回调方法,和MediaRecorder的outPut方法。经过对比,发现各有各的优缺点:

Camera的onPreviewFrame方法:

优点:
                可以获取到视频的原始YUV数据。
                使用简单:直接设置一个回调方法就能够获取到预览时的视频数据。
        缺点:
                需要自己将YUV数据编码为h264格式,对编码需要一定的了解。

MediaRecorder的outPut方法:

 优点:
                可以直接获取到编码后的h264格式的视频帧数据。
        缺点:
                获取部分的代码比较麻烦:需要在程序内部架设socket服务来获取h264视频数据。

在各有优缺点的情况下,通过对比其他现有的直播SDK的功能,最终采用了Camera的onPreviewFrame的方法。众所周知,美颜功能已经是目前直播的主要功能点之一。获取到最原始的YUV数据,对于后期加美颜效果是有极大的帮助的。

麦克风采集音频,也有两种方式:AudioRecorder的read,和MediaRecorder的outPut方法。优缺点基本和视频相似。故还是选择AudioRecorder来采集音频,这样就能获取到最原始的PCM数据(也就是去掉wav头信息的原始数据)。

编码格式:

视频的编码格式采用h264,主要从数据的体积大小上考虑。原始的视频帧YUV数据,是没有经过压缩的,相对来说体积较大。数据越大,在网络上传输出错的可能性越大,并且对网络的带宽消耗也越大。而h264则对数据进行了压缩和编码,有了关键帧和非关键帧的概念。而非关键帧相对于关键帧,视频数据小了很多。这样带来的好处就是直播需要在网络上传输的数据就变少,对服务器的带宽消耗也相对变小。

音频的编码格式采用aac,主要还是由于体积问题。同时,aac在压缩编码之后,声音的变化基本听不出来,声音质量高。

传输协议:

目前大多数直播协议都是基于Rtmp协议的。所以我也准备采用这个协议。

选择库:

有了具体的想法之后,就在于代码的实现。而代码实现往往是最难的部分。毕竟空想谁都会,实现起来,就会遇到各种问题。

看到网上很多是基于ffmpeg去实现直播的采集。但是分析了采集的需求之后,其实发现我们只需要三个地方做好,基本上采集就OK了。分别是:h264  的编码实现。aac的编码实现。rtmp的编码实现。而经过查阅资料,发现ffmpeg也是集成了这三个功能,从而实现的直播功能。

为了简单,我决定就从这三个方面入手编写代码。编写代码不代表就是要重新造轮子。毕竟一个人完全从0开始写直播是不太符合目前的状况的:没那个精力。于是,选择库,成了重要的一个步骤。

h264的编码库也不少,最终选择了x264。
aac的编码库,选择了fdkaac。
rtmp的库,选择了rtmpdump。

以上这三种库都是驰骋沙场的老将,应该没有问题。

接下来就是各个击破,一步一步的去完成实现采集所需的功能。

© 著作权归作者所有

拉风的道长
粉丝 54
博文 110
码字总数 55629
作品 0
昌平
程序员
私信 提问
【参与调研赢年终盛典门票】2017,你最关注的音视频技术问题大调研

2016被称为“直播元年”,2017直播依旧风头不减。想必各位在平时的工作中,接触到的音视频类开发项目也不少,当中有没有遇到一些困难呢? 您在开发音视频技术时都遇到了哪些问题?需要大牛对...

图鸭科技研究员
2017/12/04
183
1
ThinkSNSPlus 技术优势

ThinkSNS产品有哪些特色和优势? ThinkSNS在产品系统研发中始终坚持高性能,高标准,高适用“三高”原则。注重框架,模块,功能,体验4个部分的完整性,关联性,需求有效性。通过市场调研,企...

ThinkSNS账号
2018/10/16
0
0
鱼羊儿揭秘第二期:手机直播软件直播源码编解码技术!

2018年刚刚开始手机直播程序开发随着直播的火爆正慢慢进入大众化,本文就将最近手机直播程序开发使用到的编解码技术讲给大家,让大家更深入的认识手机直播程序开发。初期创业公司或个人如果打...

qq616664615
2018/01/18
0
0
北京腾讯云-云+社区技术沙龙报名

报名点击这里: 沙龙简介 近年来,随着移动互联网的普及和智能终端设备的广泛应用,短视频、直播、在线教学等各类形式的音视频形式的应用越来越广泛,然而,音视频技术使用起来虽然便捷,但是...

宋庆离
2018/04/12
246
0
政府安全资讯精选 2018年第六期 国家互联网信息办公室公布《微博客信息服务管理规定》;中国信息安全测评中心正式发布《中国信息安全从业人员现状调研报告(2017年度)》

;;; 【国内政策动态】国家互联网信息办公室公布《微博客信息服务管理规定》 概要:国家互联网信息办公室2月2日公布《微博客信息服务管理规定》,将从3月20日起施行。《规定》共十八条,包...

yuhanliu
2018/02/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux scp命令

Linux scp命令 Linux 命令大全 Linux scp命令用于Linux之间复制文件和目录。 scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。 语法 scp [-1246BCpqrv] ...

linjin200
5分钟前
0
0
Echoin获得ZB Captial战略投资

Echoin获得ZB Captial战略投资

怎当她临去时秋波那一转
5分钟前
0
0
Jenkins 持续集成综合实战

Jenkins 持续集成综合实战 发表于 2017-01-06 文章目录 1 安装 Jenkins 1.1 安装 JDK/Maven 1.2 安装 Jenkins 1.2.1 离线安装 1.2.2 在线安装 1.2.3 基于 Tomcat 安装 1.2.4 免安装方式 1.3 ...

linzhuangrong
7分钟前
0
0
自动编码(AE)器的简单实现

一.目录 自动编码(AE)器的简单实现 一.目录 二.自动编码器的发展简述 2.1 自动编码器(Auto-Encoders,AE) 2.2 降噪自编码(Denoising Auto-Encoders, DAE)(2008) 2.3 堆叠降燥自动编码器 (Sta...

zhaowei121
11分钟前
0
0
十分良心!全网最详细的Java 自动内存管理机制及性能优化教程

先来个思维导图预览一下本文结构。 一图带你看完本文 一、运行时数据区域 首先来看看Java虚拟机所管理的内存包括哪些区域,就像我们要了解一个房子,我们得先知道这个房子大体构造。根据《J...

戎码益深
11分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部