给奶牛做直播之四

一、前言

给奶牛做直播之三 我们讲了怎么搭建RTMP直播服务器,前几天在折腾Android直播推拉流一直没个结果,顺手整理了一下Android如何加载SO动态库,本想顺着这条路把JNI、NDK、JSBridge、Python调用SO这些一起整理出来 ,这样搞就像函数调用   A->B->C-D->E,然而没有返回一直往下很容易堆栈溢出,咱还是先回到视频相关的事情吧,上边知识点以后再扯。

二、HLS协议

给牛奶做直播之二  介绍了视频应用层HTTP和RTMP两大协议,今天我们看一下HLS协议。

1、HLS概念

HLS全称HTTP Live Stream是由Apple公司推出基于HTTP的流媒体网络协议,它的工作原理是把整个流切分成一个个小的基于HTTP协议进行文件下载。

2、HLS协议规定

  • 视频的封装格式是TS

  • 视频的编码格式是H.264,音频的格式是MP3、AAC.

  • 控制播放的文件m3u8

注:基于HLS搭建的播放首次加载接近10秒,而RTMP3秒左右,但HLS不受防火墙影响,并且HLS除了首次加载,后续因为有m3u8索引文件会预先通过多个线程把小的TS文件下载下来.效率还是不错的。

3、HLS视频采集播放流程

给奶牛做直播之四_第1张图片

注:上面图片来自网络,借用一下。

  • 采集端可以是任意格式的视频,通讯也是可以任意协议。

  • 视频服务端将原始视频流进行H.264编码 ,视频的编解码可以看 给奶牛做直播之一。

  • 然后进行视频切片,切片后生成索引文件m3u8和很多小的ts文件

三、Linux切片环境搭建

1、安装 ffmpeg 

apt-get install ffmpeg

ffmpeg 是一套可以用于记录、转换数字音频、视频,并能将其转化为流的开源软件。

2、安装ffmpeg支持库

apt-get install libavformat-dev

m3u8-segmenter需要依赖于libavformat-dev这个库。

3、编译安装m3u8-segmenter

下载地址:https://github.com/m3u8-segmenter/m3u8-segmenter

安装依赖:不确定是否都需要,不管了,一起装。

apt install curl build-essential automake automake1.11 libavformat-dev pkg-config ffmpeg
aclocal
automake -ac
autoconf
./configure
make && make install

4、用ffmpeg将mp4转换为TS

例子:ffmpeg -y -i channel.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb channel.ts

5、用segmenter将TS文件切片并生成m3u8

例:m3u8-segmenter -i channel.ts -d 1 -p channel -m channel.m3u8 -u http://118.31.5.244/

每隔1秒钟切为一片,然后指定web的路径

注:ffmpeg和m3u8-segmenter安装好后,命令的参数可以使用man查看。

四、m3u8和ts文件介绍

m3u8其实就是一个索引文件,它记录了TS文件的下载地址

上面例子生成的channel.m3u8内容如下

给奶牛做直播之四_第2张图片

ts文件是一个视频封装格式,全名为MPEG-TS,每一个小片段都可以独立播放,上面m3u8-segmenter命令切片后生成的文件如下。

将生成的m3u8和所有TS文件放到Nginx目录下,然后前端整合Video.js,就可以进行播放了。

给奶牛做直播之四_第3张图片

下面是淘宝同学录播课程的网络请求,可以看到一直在下载一个个小的TS文件,这样对版权也能起到一定的保护作用,除非你愿意将一个个TS再合并起来 。

http://v.xue.taobao.com/learn.htm?spm=a2174.7365753.0.0.y556Ba&courseId=53566

给奶牛做直播之四_第4张图片

如果是直播的话需要动态生成m3u8和TS文件,这要复杂很多了,有时间再玩。

注:在写这个文章的时候才想起还在淘宝同学这个项目组呆过一段时间,不过视频是来自迅雷一个同事负责和淘宝视频组的人做对接,我当时好像在维护VSearch数据,对视频一直没去了解,话说前后不同项目组里共事过三个做视频的,一个来自快播,一个来自盛大,当时和他们在一起聊得最多的是妹子,没怎么聊技术,好像做视频技术都好色哈。

你可能感兴趣的:(杂项,音视频)