ffmpeg基于hls实现大视频分片下载播放[视频直播二](代码片段)

author author     2022-12-10     408

关键词:

关于HLS,上篇咱们已经讲过,它基于http协议,内容包括两部分:m3u8描述文件,ts媒体文件。
它可以实现视频直播,不过直播有点延迟,延迟大小与循环体的大小有关。我们将要利用它的循环体,来实现大视频的分片下载播放。
问:怎么将一个视频分片得到m3u8文件?
答:利用ffmpeg工具。
问:那么什么是FFmpeg呢?
答:FFmpeg是一套可以用来记录、转换数字音频、视频,并且将其转化为流的开源程序。
它提供了录制、转换及流化音视频的完整解决方案。包含非常先进的音视频编码解码库libavcodec。
FFmpeg是在Linux平台下开发,但它可以在其他操作系统环境中编译运行。FF代表 fast forward 。
问:FFmpeg的组成?
答:主要包含三部分:
第一部分是四个作用不同的工具软件,分别是:
ffmpeg.exe,ffplay.exe,ffserver.exe和ffprobe.exe。
?ffmpeg.exe:音视频转码、转换器
?ffplay.exe:简单的音视频播放器
?ffserver.exe:流媒体服务器
?ffprobe.exe:简单的多媒体码流分析器
第二部分是可以供开发者使用的SDK,为各个不同平台编译完成的库。
如果说上面的四个工具软件都是完整成品形式的玩具,那么这些库就相当于乐高积木一样,我们可以根据自己的需求使用这些库开发自己的应用程序。这些库有:
?libavcodec:包含音视频编码器和解码器
?libavutil:包含多媒体应用常用的简化编程的工具,如随机数生成器、数据结构、数学函数等功能
?libavformat:包含多种多媒体容器格式的封装、解封装工具
?libavfilter:包含多媒体处理常用的滤镜功能
?libavdevice:用于音视频数据采集和渲染等功能的设备相关
?libswscale:用于图像缩放和色彩空间和像素格式转换功能
?libswresample:用于音频重采样和格式转换等功能
第三部分是整个工程的源代码,无论是编译出来的可执行程序还是SDK,都是由这些源代码编译出来的。
FFmpeg的源代码由C语言实现,主要在Linux平台上进行开发。FFmpeg不是一个孤立的工程,它还存在多个依赖的第三方工程来增强它自身的功能。在当前这一系列的博文/视频中,我们暂时不会涉及太多源代码相关的内容,主要以FFmpeg的工具和SDK的调用为主。到下一系列我们将专门研究如何编译源代码并根据源代码来进行二次开发。

下载与安装FFmpeg
《FFmpeg官网》

技术图片

配置环境变量

技术图片

技术图片

【使用】
在视频所在的文件夹,输入以下命令(我这里有一个123.mp4的电影):

ffmpeg -i 80s.mp4 -c:v libx264 -c:a aac -strict -2 -f hls -hls_list_size 0 -hls_time 60 output/output.m3u8

技术图片

技术图片

初始视频地址123.mp4
hls_time 10 表示切片视频的时长,默认为2
hls_list_size 表示 m3u8 文件记录切片的数量,默认为5.即只记录最后5条切片,设置为0表示记录所有切片

漫长的等待.......

技术图片

问:浏览器怎么播放m3u8格式的视频?
答:使用safari浏览器打开就可以播放

    <!DOCTYPE hmtl>
    <html>
    <head>
    <title>the5fire m3u8 test</title>
    </head>
    <body>
    <video controls autoplay >
            <source src="http://127.0.0.1:8080/frozen/video/finish/output.m3u8">
    </video>
    </body>

但是,在其他浏览器上却:

技术图片

因此我们得调成使用flash播放,这里使用的是swfobject.js。《StrobeMediaPlayback.swf》
【拓展:swfobject.js】
首先,我们要为SWF资源预留一个HTML结点。这个HTML结点内的所有内容都会在客户端被Flash资源替换,当客户端没有安装Flash播放器的时候,这些内容会显示出来。这一特色在SEO以及对用户体验方面非常有必 要。

    <!DOCTYPE hmtl>
    <html>

        <head>
            <meta charset="UTF-8">
            <title>m3u8播放器</title>
            <script type="text/javascript" src="swfobject/src/swfobject.js" ></script>
        </head>

        <body>
            <div id="player">
            </div>
            <script>
                var flashvars = 
                    // M3U8 url, or any other url which compatible with SMP player (flv, mp4, f4m) 
                    // escaped it for urls with ampersands         
                    src: escape("http://127.0.0.1:8080/frozen/video/finish/output.m3u8"),
                    // url to OSMF HLS Plugin         
                    //plugin_m3u8: "http://www.the5fire.com/static/demos/swf/HLSProviderOSMF.swf",
                    plugin_m3u8:"http://127.0.0.1:8080/frozen/video/finish/HLSProviderOSMF.swf"

                ;
                var params = 
                    // self-explained parameters         
                    allowFullScreen: true,
                    allowScriptAccess: "always",
                    bgcolor: "#000000"
                ;
                var attrs = 
                    name: "player"
                ;

                swfobject.embedSWF(
                    // url to SMP player         
                    //"http://www.the5fire.com/static/demos/swf/StrobeMediaPlayback.swf",
                    "http://127.0.0.1:8080/frozen/video/finish/StrobeMediaPlayback.swf",
                    // div id where player will be place         
                    "player",
                    // width, height         
                    "800","485",
                    // minimum flash player version required         
                    "10.2",
                    // other parameters         
                    null, flashvars, params, attrs
                );
            </script>
        </body>

    </html>

大功告成!!!!

技术图片

使用 FFMPEG 下载 HLS 视频时,它不会下载音频

】使用FFMPEG下载HLS视频时,它不会下载音频【英文标题】:WhendownloadingHLSvideowithFFMPEGitdoesnotdownloadtheaudio【发布时间】:2021-08-0300:10:24【问题描述】:我有一个问题,当我尝试使用FFMPEG下载HLS视频时,它会下载视频轨道,但找不... 查看详情

将视频转换为hls(httplivestreaming)协议格式文件

...升加载速度,节省流量。1、准备好源视频文件。2、下载ffmpeg(http://ffmpeg.org/download.html),软件为绿色版,解压即可使用,找到其中的ffmpeg.exe程序。3、为了方便使用,可以将ffmpeg.exe所在目录加入环境变量,或者随时拿着走也行... 查看详情

hls流媒体视频防盗实现

 HLS流媒体视频防盗实现一、Windows安装FFmpeg1.1安装版本1.1.1网址:https://ffmpeg.org/1.1.2选择Windows版本:https://ffmpeg.org/download.html#build-windows  1.2解压安装:1.2.1下载并解压FFmpeg文件夹,它会生成一个类似名为“ffmpeg-20150504-g 查看详情

hls视频播放-hls认知(代码片段)

...义:HTTPLiveStreaming(缩写是HLS)是一个由苹果公司提出的基于HTTP的流媒体网络传输协议。是苹果公司QuickTimeX和iPhone软件系统的一部分。它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下 查看详情

使用ffmpeghls和nginx搭建在线视频流媒体播放系统(代码片段)

目录1、综述2、安装nginx3、安装ffmpeg4、安装m3u8-segmenter5、制作m3u8文件与ts文件6、VLC播放器中测试7、web网页中的播放测试    本文简单介绍一下如何使用FFmpeg、HLS和Nginx搭建在线视频流媒体播放系统,并使用浏览器进行验证... 查看详情

基于ffmpeg和libvlc的视频剪辑播放器

以前研究的时候,写过一个简单的基于VLC的视频播放器。后来因为各种项目,有时为了方便测试,等各种原因,陆续加了一些功能,现在集成了视频播放、视频加减速、视频剪切,视频合并(增加中)等功能在一起。有时候看点... 查看详情

基于ffmpeg和libvlc的视频剪辑播放器

以前研究的时候,写过一个简单的基于VLC的视频播放器。后来因为各种项目,有时为了方便测试,等各种原因,陆续加了一些功能,现在集成了视频播放、视频加减速、视频剪切,视频合并(增加中)等功能在一起。有时候看点... 查看详情

基于ffmpeg和libvlc的视频剪辑播放器

以前研究的时候,写过一个简单的基于VLC的视频播放器。后来因为各种项目,有时为了方便测试,等各种原因,陆续加了一些功能,现在集成了视频播放、视频加减速、视频剪切,视频合并(增加中)等功能在一起。有时候看点... 查看详情

基于ffmpeg和libvlc的视频剪辑播放器

以前研究的时候,写过一个简单的基于VLC的视频播放器。后来因为各种项目,有时为了方便测试,等各种原因,陆续加了一些功能,现在集成了视频播放、视频加减速、视频剪切,视频合并(增加中)等功能在一起。有时候看点... 查看详情

基于ffmpeg和libvlc的视频剪辑播放器

以前研究的时候,写过一个简单的基于VLC的视频播放器。后来因为各种项目,有时为了方便测试,等各种原因,陆续加了一些功能,现在集成了视频播放、视频加减速、视频剪切,视频合并(增加中)等功能在一起。有时候看点... 查看详情

hls视频播放-基于chplayer(代码片段)

...载hls的m3u8格式文件,不能用在chrome,ie等浏览器上。 基于ChPlayer视频播放经过查询资料发现ChPlayer,使用ChPlayer进行视频的播放,支持点播和直播,支持m3u8格式。调用示例:<scr 查看详情

videojs+hls视频加密播放(代码片段)

...(HTTPLiveStreaming的缩写)是一个由苹果公司提出的基于HTTP的流媒体网络传输协议。HLS协议基于HTTP协议,客户端按照顺序使用HTTP协议下载存储在服务器上的文件。HLS协议规定,视频的封装格式是TS(TransportStream&... 查看详情

基于ffmpeg的简单android视频播放器(代码片段)

...现3.播放控制4.音视频同步5.总结之前的博客中已经使用了FFmpeg进行音频文件的解码,并且基于OpenSLES实现了一个简单的音乐播放器。最近正在学习《音视频开发进阶指南》,看到了视频部分。不如就干脆再写一个视频播放... 查看详情

100行代码实现最简单的基于ffmpeg+sdl的视频播放器(sdl1.x)(代码片段)

...1;===========最简单的基于FFmpeg的视频播放器系列文章列表:100行代码实现最简单的基于FFMPEG+SDL的视频播放器(SDL1.x)最简单的基于FFMPEG+SDL的视频播放器ver2(采用SDL2.0)最... 查看详情

[开源]基于ffmpeg和libvlc的视频剪辑播放器

[开源]基于ffmpeg和libvlc的视频剪辑、播放器以前研究的时候,写过一个简单的基于VLC的视频播放器。后来因为各种项目,有时为了方便测试,等各种原因,陆续加了一些功能,现在集成了视频播放、视频加减速、视频剪切,视频... 查看详情

基于ffmpeg下载.ts流媒体分片传输文件自动合并单独完整mp4文件,windows(代码片段)

基于ffmpeg下载.ts流媒体分片传输文件自动合并单独完整mp4文件,windows现在的一些直播视频网站,把视频做成分片的.ts文件通过网络传输,让用户观看,这导致不能像过去一样右键另存为一个完整视频保存。本例提... 查看详情

基于ffmpeg下载.ts流媒体分片传输文件自动合并单独完整mp4文件,windows(代码片段)

基于ffmpeg下载.ts流媒体分片传输文件自动合并单独完整mp4文件,windows现在的一些直播视频网站,把视频做成分片的.ts文件通过网络传输,让用户观看,这导致不能像过去一样右键另存为一个完整视频保存。本例提... 查看详情

使用ffmpeg实现单线程异步的视频播放器(代码片段)

自定义播放器系列第一章视频渲染第二章音频(push)播放第三章音频(pull)播放第四章实现时钟同步第五章实现通用时钟同步第六章实现播放器(本章)文章目录自定义播放器系列前言一、播放流程二、... 查看详情