• 给奶牛做直播之四


    一、前言

    给奶牛做直播之三 我们讲了怎么搭建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视频采集播放流程

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

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

    • 视频服务端将原始视频流进行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

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

    1. apt install curl build-essential automake automake1.11 libavformat-dev pkg-config ffmpeg
    2. aclocal
    3. automake -ac
    4. autoconf
    5. ./configure
    6. 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内容如下

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

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

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

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

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

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

  • 相关阅读:
    大数据Hadoop入门教程 | (一)概论
    LLM研究之-NVIDIA的CUDA
    count(*)为什么很慢
    快读《ASP.NET Core技术内幕与项目实战》基础组件1.3:配置
    php实战案例记录(8)去除XSS的函数
    [pmayavi][python]mayavi所有whl文件下载地址汇总
    Garnet: 力压Redis的C#高性能分布式存储数据库
    java毕业生设计短视频交流点播系统计算机源码+系统+mysql+调试部署+lw
    MySQL数据库 -- 表的增删查改
    PHP代码审计17—CLTPHP代码审计
  • 原文地址:https://blog.csdn.net/2301_76787421/article/details/133455087