近年来直播已成为互联网行业的大热话题,直播答题、游戏直播、竞赛直播,抖音直播,直播教育等层出不穷,直播早已成为人们耳熟能详的技术。事实上直播的兴起不仅与新时代人们要求为自己代言的心理有关,同时也得益于带宽的提速和CDN技术的发展。伴随着CDN技术的成熟,企业自己部署云服务器做直播也越来越简单。

本文作为直播介绍系列文,主要和大家谈谈直播协议、视频推流等技术内容

1.直播协议(文末附上学习路线导图)

流媒体分为直播和点播。通常来说点播使用的都是HTTP协议,直播主要用的是RTMP, HLS, HTTP-FLV等。近年来直播协议也有新发展如DASH,但仍处于起步阶段。 直播和点播协议的不同,根源在于他们的业务差异。

点播,常见用于优酷,爱奇艺等视频网站中电视剧、电影等媒体资源的播放,即点播都是录制好的视频,一千个人看同一个视频,无论任何时候点进去获取到的媒体数据都是一样的,而直播则不然,不同时候点进来观看到的信息是不一样的。

通常来讲,直播和点播是相互并不交融的,不过近些年来也有人创新发展——直播时移模式,即点播与直播相结合。其做法是将直播流录制成一小片一小片的点播文件,然后用户可以在任何地点、任意终端访问任意内容。比如你正在看一场球赛的直播,然后有一个镜头很精彩,想马上再看一遍,就可以拖一下进度条回退然后回放,在看完回放后还可以一键返回直播。

目前直播分发主要有以下特点:

1,flv居多,ts较少,原因主要是ts标准太过于复杂。Flv的标准开放文档是11页,ts的有174页。对于一般的直播,flv基本能满足需求,因此ts应用就较少。当然了,我们也可以借助于FFmpeg,但是它会将流媒体方面你想得到的和想不到的都封装了,不够精准。

2,rtmp和hls并存。一般来讲,rtmp用在PC端上,使用flash播放;hls用作手机和平板上。

3,实时流一般使用rtmp。rtmp能做到1到3秒的延迟,是直播里除了rtsp外延迟最低的协议。PC上支持直接播放,移动端可以用FFmpeg解码播放。除了rtmp还有其他协议适合实时流媒体播放吗?

实际上http-flv比rtmp更合适实时流播放。二者延迟一样,在PC端上都可直接播,移动端需要使用ffmpeg,但http-flv还有个好处就是能穿墙。但大多数CDN并不支持http-flv直播,因为一般的Web服务器不支持http-flv,这是个流媒体问题。

音视频开发相关知识点内容学习资料点击 学习资料 获取

2. 直播服务器 (文末附上学习路线导图)

直播中流媒体数据的传输主要依赖服务器。目前开源的流媒体服务器,有RED5、CRTMPD、NGINX-RTMP和SRS等。

RED5:最古老的基于flash的流媒体服务的开源流媒体服务器。它由Java语言编写,使用rtmp作为流媒体传输协议,与FMS完全兼容;具有流化flv、MP3文件,实时录制客户端流为flv文件,共享对象,实时视频播放、Remoting等功能。但由于其技术较为落后,新入场的直播平台都已放弃使用。

CRTMPD:使用c++语言编写,支持多种rtmp协议、IPTV相关网络协议和移动设备的流媒体服务器。使用单线程异步socket,在当时处于领先水平,但是当NGINX出现后就渐渐淡出大众视野了。

NGINX-RTMP :基于NGINX模块,使用C语言编写的流媒体服务器,也是目前市场上使用最多的流媒体服务器。伴随着2012年CDN业务的扩展,直播业务需求暴涨,由于NGINX-RTMP中直播点播共用一套服务器,且用户熟悉信任NGINX;NGINX-RTMP逐渐处于行业垄断地位。

SRS(Simple Rtmp Sever)是一个国产的流媒体服务器,产品定位是运营级的互联网直播服务器集群,追求更好的概念完整性和最简单实现的代码。据官网介绍其效率非常高,能达到NGINX-RTMP的3倍,而且中英文文档各有一份,较为适合国内程序员的开发环境。

3.直播推流 (文末附上学习路线导图)

直播推流的总体过程如下图

如上图所示,直播中通常在从摄像头和麦克风等采集到相关数据源后需要做一些封装前处理,如去噪、美颜、变声等,然后进行音视频编码,再用相适应的流媒体协议封装,进行码率自适应后就可投到相关站点展示了。

但是在不同的技术语言下做直播推流的方法也是不同的:

如果你是iOS或者Android程序员,做RTMP推流就会更简单,可以直接找一个推流的数据库然后给出视频参数,以及最终的RTMP地址,就能推出一个标准的RTMP流

如果你是C++程序员,会麻烦很多,你至少要掌握采集、编码、写流这3个步骤。当然,这些步骤都有库可以调用,但是即便如此,假设你使用FFmpeg库,完成上述动作代码也需要100行左右了;因为其主要的代码流程就需包括打开音视频设备、创建编解码器、设置编码参数、初始化网络流句柄、写协议头、循环采集数据、解码数据、编码数据、格式封装和写网络流。

当然,你可以直接用FFmpeg的命令行,一条命令完成推流,但是这也仅限于测试或者做简单的demo,真正的工程环境中并不适用,因为这种一条简单命令的方法在许多功能上都不能支持。

4.总结:(文末附上学习路线导图)

总之,做直播难易程度主要是和你想实现的功能有关,如果你只是打算自己做测试,那下载一个开源服务器代码,编码运行,再用FFmpeg一行命令推流,再用播放器播放也就完成了。但是如果想要商业化,满足用户的多种需求,如回声抑制、连麦直播、美颜滤镜等,问题的复杂度就呈指数倍上涨了。

5.音视频开发-学习路线导图

音视频开发的学习资料及学习路线图,大家如果需要的话,可以点击 音视频学习资料 进qun获取

学习资料链接:FFmpeg/WebRTC/RTMP音视频流媒体高级开发-学习视频

音视频开发——通信直播协议和视频推流丨RTMP-RTSP相关推荐

  1. 直播平台搭建中音视频通信——直播协议和视频推流

    近年来直播已成为互联网行业的大热话题,直播答题.游戏直播.竞赛直播等层出不穷,直播早已成为人们耳熟能详的技术.事实上直播的兴起不仅与新时代人们要求为自己代言的心理有关,同时也得益于带宽的提速和CDN技 ...

  2. 网络直播平台搭建中直播协议和视频推流

    网络直播平台搭建中直播协议和视频推流 直播协议 流媒体分为直播和点播.通常来说点播使用的都是HTTP协议,直播主要用的是RTMP, HLS, HTTP-FLV等.近年来直播协议也有新发展如DASH,但 ...

  3. 即时通讯音视频开发(三):视频编解码之编码基础

    前言 即时通讯应用中的实时音视频技术,几乎是IM开发中的最后一道高墙.原因在于:实时音视频技术 = 音视频处理技术 + 网络传输技术 的横向技术应用集合体,而公共互联网不是为了实时通信设计的. 系列文 ...

  4. 即时通讯音视频开发(二):视频编解码之数字视频介绍

    前言 即时通讯应用中的实时音视频技术,几乎是IM开发中的最后一道高墙.原因在于:实时音视频技术 = 音视频处理技术 + 网络传输技术 的横向技术应用集合体,而公共互联网不是为了实时通信设计的. 系列文 ...

  5. 即时通讯音视频开发(一):视频编解码之理论概述

    前言 即时通讯应用中的实时音视频技术,几乎是IM开发中的最后一道高墙.原因在于:实时音视频技术 = 音视频处理技术 + 网络传输技术 的横向技术应用集合体,而公共互联网不是为了实时通信设计的. 系列文 ...

  6. 音视频开发:直播推流技术指南

    一.推流架构 推流SDK客户端的模块主要有三个,推流采集端.队列控制模块.推流端.其中每个模块的主要流程如下,本文的主要目的就是拆分推流流程. 1.1 采集端 视频采集:通过Camera采集视频. 音 ...

  7. 音视频开发(19)---Android视频开发基础(一)

    Android视频开发基础(一) 版权声明:本文为[viclee]原创,如需转载请注明出处~ https://blog.csdn.net/goodlixueyong/article/details/6 ...

  8. 图像视频信息库改直播服务器,短视频直播系统,开发流程详细解析

    原标题:短视频直播系统,开发流程详细解析 短视频直播系统的开发也分Android端和iOS端,不同端口对应不同的开发方式,使用不同的开发协议,与直播系统的开发流程相同,也是分五个步骤,今天就给大家详细 ...

  9. 抖音app开发时,在录制视频添加背景音乐功能实现流程

    抖音app之所以"横扫"整个短视频领域,最主要的还是占据了短视频玩法的"先机",其中在录制视频时添加背景音乐,是很多用户都非常喜欢的步骤,但是在抖音app开发时 ...

最新文章

  1. 浅谈C#中的多态及相关知识(主要内容来自msdn) -转载(benzite)
  2. C# 文件操作 全收录 追加、拷贝、删除、移动文件、创建目录、递归删除文件夹及文件.......
  3. attention机制中的注意力图怎么画_注意力机制 | 图卷积多跳注意力机制 | Direct multihop Attention based GNN...
  4. AndroidStudio_安卓原生开发_java.io.FileNotFoundException: http://172.19.128.5(拒绝访问)---Android原生开发工作笔记157
  5. Python Tricks(二十一)—— 排列组合的计算
  6. Python基于OpenCV的人脸集合相似度检测系统(源码&UI&教程)
  7. android 渠道包 作用,谈谈我的Android多渠道打包方式
  8. html制作钢铁侠心脏,钢铁侠的“心脏”并不是特效,得知如何制成的,网友:难以置信...
  9. birthday日期类型转化
  10. 智和信通搭建高可靠、真稳定IT运维平台,助力能源行业高效生产
  11. 华雨欢:多日震荡趋势明显,本周即将结束要开启每周大行情了
  12. 安卓x86实际使用virgl案例
  13. 基于android校园订餐APP,简单实现登录注册功能(SharedPreferences)
  14. coffeescript_在服务器上使用CoffeeScript
  15. Jmeter TCP socket接口测试(一)
  16. 一 你好啊,我叫阿丁2
  17. 2021年11月11日第九次电台—《我想把你们留下》
  18. 一个早起的程序员简介
  19. (新版)SJTU-OJ-1049. 二哥学二叉树
  20. leetcode 538:把二叉树搜索树转换为累加树

热门文章

  1. R关于一些字符串报错
  2. c语言:找1000中的“完数”
  3. Simulink之脉宽调制(PWM)逆变技术
  4. MCN出海史:Tiktok跨境MCN值得做么?
  5. 计算机专业英语第十一单元,初一英语下册第十一单元所有重点单词、短语和句型...
  6. 华为语音解锁设置_华为手机用户一定要掌握的技巧1,指纹键与语音控制的妙用...
  7. 手机python3ide加法器_VB 加法器 代码,,,求最终代码。。。
  8. 用atmega16编程十位数计算机,mega16
  9. Python实践 制作石头剪刀布游戏 带GUI界面
  10. 用链表储存学生信息然后排序输出