给奶牛做直播之四

news2024/11/25 14:32:00

一、前言

给奶牛做直播之三 我们讲了怎么搭建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

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

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内容如下

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数据,对视频一直没去了解,话说前后不同项目组里共事过三个做视频的,一个来自快播,一个来自盛大,当时和他们在一起聊得最多的是妹子,没怎么聊技术,好像做视频技术都好色哈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1053685.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

叶工好容6-自定义与扩展

本篇主要介绍扩展的本质以及CRD与Operator之间的区别,帮助大家理解相关的概念以及知道要进行扩展需要做哪些工作。 CRD(CustomerResourceDefinition) 自定义资源定义,代表某种自定义的配置或者独立运行的服务。 用户只定义了CRD没有任何意…

28296-2012 含镍生铁 思维导图

声明 本文是学习GB-T 28296-2012 含镍生铁. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了含镍生铁的技术要求、试验方法、检验规则以及包装、储运、标志和质量证明书。 本标准适用于炼钢、铸造或合金材料中作为镍元素添加剂的…

C++实现集群聊天服务器

C实现集群聊天服务器 JSON Json是一种轻量级的数据交换模式(也叫做数据序列化方式)。Json采用完全独立于编程语言的文本格式来存储和表示数据。见解和清晰的层次结构使得Json称为理想的数据交换语言。易于阅读和编写。同时也易于支持机器解析和生成&am…

28384-2012 平台式平型网版印刷机 阅读笔记

声明 本文是学习GB-T 28384-2012 平台式平型网版印刷机. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了平台式平型网版印刷机的术语和定义、型式与基本参数、要求、试验方法、检验规则、 标志、包装、运输与贮存。 本标准适用…

babel.config.js配置文件详解

文章目录 一、前言三、babel 详解四、拓展阅读 一、前言 项目开发阶段,使用可选链操作符 ?. 出现以下编译报错问题: 分析:由于可选链操作符 ?. 是ES2020(即ES11)中推出的新语法,允许我们不需要校验当前属…

【软考】系统集成项目管理工程师(五)项目立项管理【5分】

一、 项目建议书 1、定义 项目建议书又称为立项申请;建设单位向上级主管部门提交项目申请时所必须的文件,是对拟建项目提出的框架性的总体设想;是项目发展周期的初始阶段,是国家或上级主管部门选择项目的依据,也是可行…

取消excel表格中的隐藏行

Excel工作表中的行列隐藏了数据,如何取消隐藏行列呢?今天分享几个方法给大家 方法一: 选中隐藏的区域,点击右键,选择【取消隐藏】就可以了 方法二: 如果工作表中有多个地方有隐藏的话,还是建…

【python基础】复杂数据类型-列表类型(元组)

1.初识元组 列表非常适合用于存储在程序运行期间可能变化的数据集。列表是可以修改的。 然而,有时候需要创建一系列不可修改的元素,元组可以满足这种需求 python将不能修改的值称为不可变的,而不可变的列表被称为元组。 元组看起来犹如列表,但使用圆括号而不是方括号来标识…

苹果文件传到mac电脑用什么软件?

在数字化时代,文件传输已经成为我们日常生活中不可或缺的一部分。然而,苹果用户在将手机文件传输到电脑时,往往会面临一些困扰。曾经的“文件传输助手”并不能完全满足用户的需求。于是,很多人开始寻找更便捷的解决方案。在本文中…

Nginx 代理WebSocket

## √ map $http_upgrade $connection_upgrade {default upgrade; close; }## √ upstream websocket {server 127.0.0.1:9999 weight10 max_fails2 fail_timeout30s; }server {listen 8020;gzip on;gzip_min_length 1k;gzip_comp_level 9;gzip_types text/plain application/…

集合-set系列集合

系列文章目录 1.集合-Collection-CSDN博客​​​​​​ 2.集合-List集合-CSDN博客 3.集合-ArrayList源码分析(面试)_喜欢吃animal milk的博客-CSDN博客 4.数据结构-哈希表_喜欢吃animal milk的博客-CSDN博客 5.集合-set系列集合-CSDN博客 文章目录 目录 系列文章目录 文章目录…

JS defineProperty详解

defineProperty Object.defineProperty():方法会在对象上直接定义个新的属性,或者修改现有的属性,并返回此对象 let obj {} //与我们使用 obj.name zhangsna 效果一样 但是用defineProperty定义的属性无法改变 或者删除 Object.defineProperty(obj,n…

【面试经典150 | 数组】加油站

文章目录 写在前面Tag题目来源题目解读解题方法方法一:暴力枚举方法二:一次遍历 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些…

单元测试框架-Pytest(简单学习)

单元测试框架-Pytest Pytest是基于Python语言的单元测试框架,也是一个命令行的工具,比 unittest 测试框架更灵活。具有以下特点: 入门简单,易上手,官方文档丰富而且使用广泛,有大量的参数例子。 unittest…

2.索引操作

1. 创建索引 创建索引就等于创建数据库,ES使用put操作创建索引,我们创建一个students的索引,只需要发生put请求:http://127.0.0.1:9200/students 2. 查看索引 2.1 查看所有索引: 使用http://127.0.0.1:9200/_cat/ind…

抓包习讯云院校数据通过PHP解析导入数据库

前言 最近,打卡APP需要这个数据,通过抓包后发现这个数据是固定的,获取很简单,但是数据太多,手动导入不显示,于是分析了json格式后果断通过脚本完成 【推荐】 《【MQTT】Esp32数据上传采集:最…

搭建后台框架

一、引入依赖 项目的包层级关系如下 依赖引入 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&quo…

cloudCompare教程:三、点云保存格式、自带截图

如果你没有统计法线&#xff0c;保存的点云文件中也是没有法线的。 如下格式&#xff1a; 1 //X;Y;Z;Original_cloud_index;2;intensity;tree 2 1903 3 -2.96899939;43.87673187;0.12744403;1.000000;nan;8.000000;99.000000 4 -2.72843552;43.74015808;0.15977502;1.000000;…

S型速度曲线轨迹规划(已知速度和距离)

S型速度曲线规划的基础知识可以查看下面这篇博客&#xff1a; 带平滑功能的斜坡函数&#xff08;多段曲线控温纯S型曲线SCL源代码完整算法分析&#xff09;_RXXW_Dor的博客-CSDN博客PLC运动控制基础系列之梯形速度曲线&#xff0c;可以参看下面这篇博客&#xff1a;PLC运动控制…

2023-9-29 JZ33 二叉搜索树的后序遍历序列

题目链接&#xff1a;二叉搜索树的后序遍历序列 import java.util.*; public class Solution {int [] seq;public boolean VerifySquenceOfBST(int [] sequence) {if(sequence.length < 0) return false;this.seq sequence;return dfs(0, seq.length - 1);}public boolean …