本文介绍如何用ffmpeg开源组件按时长进行切片,举一个例子,一个视频网站,拿到一个时长1.5小时的电影,用户点击播放时,常用的技术方案就是把一个完整的大文件,转码后切成按固定时长的小文件,分发到cdn...上去,这样用户就可以实现就近下载,包括拖放等操作,这里面有比较多的技术细节,本文只讨论第一步,按时长切片。...一 获取视频时长 ffmpeg安装后,直接执行ffmpeg -i 文件就可以从内容中获取到时长,如下图所示,其中的Duration就是时长 wangyachangdeMacBook-Pro:ffmpeg...二 切片 通过下面的命令可以实现切片。
我们在一个医疗行业视频直播服务的项目中了解到,该项目采用EasyDSS直播服务,系统对接中,因为获取的录像时长始终不能准确定位到秒,要么多几秒、要么少几秒,一直很苦恼,于是找到了我们寻找解决办法。...EasyDSS做录像存储采用的是切片存储的方式,即是HLS切片方式,存储录像文件如下图所示,一个索引文件m3u8,加一堆ts切片文件。...因为采用切片方式存储,所以必然会带来误差,比如用户请求时间正好是跨两个切片中间,就会出现上述用户反馈的情况,这是必然的。...但是我们可以通过设置切片时长大小来缓解这种问题的出现,当然切片时长也不是设置的越小越好,因为设置的越小再做切这个动作的时候又非常消耗CPU,所以建议用户可以根据自己服务器的配置来选择设置这个切片时长的大小
接下来,我们看到有 3 个资源切片,时长分别是 9.009 秒、9.009 秒、3.003 秒。 在点播时,客户端首先下载 M3U8 文件,然后按照 M3U8 列表下载各个资源切片依次播放即可。...一个媒体播放列表的时长等于它包含的所有媒体切片时长的总和。 每个媒体切片的码率等于切片的大小除以它的时长。...一个媒体播放列表的平均码率是所有切片的大小之和(单位:bit)除以播放列表的时长。...EXTINF,表示其后媒体切片的时长(单位为秒)。每个媒体切片之前必须指定该标签。...EXT-X-TARGETDURATION,表示所有媒体切片的最大时长,单位是秒。这个标签是必填的。EXTINF 所指定的各个切片的时长必须不大于这个时长,否则会出现播放卡顿或播放错误。
m3u8 文件格式详解 M3U8 是 Unicode 版本的 M3U,用 UTF-8 编码。"...客户端依据该 m3u8 文件即可获取对应的媒体资源,进行播放。 因此,客户端获取 HLS 流文件,主要就是对 m3u8 文件进行解析操作。 那么,下面就简单介绍下 m3u8 文件。...媒体播放列表(Media Playlist)的流资源总时长就是各切片资源的时长之和。 每个切片的码率(bit rate)就是切片的大小除以它对应的时长(EXTINF 指定的时长)。...EXT-X-TARGETDURATION 指定的时长绝对不能进行更改。通常该值指定的时长为 10 秒。...EXT-X-MEDIA-SEQUENCE 标签必须出现在播放列表第一个切片之前。 EXT-X-DISCONTINUITY-DEQUENCE 标签必须出现在播放列表第一个切片之前。
写在前面:m3u8文件使用UTF-8字符编码 m3u8索引文件介绍 EXTM3U: 这个是M3U8文件必须包含的标签,必须放在第一行 EXT-X-VERSION:M3U8文件的版本,常见的是3(目前最高版本应该是...7) EXT-X-MEDIA-SEQUENCE: 第一个TS分片的序列号 EXT-X-TARGETDURATION: 每个分片TS的最大的时长 EXT-X-ALLOW-CACHE: 是否允许cache...EXT-X-ENDLIST: m3u8文件结束符,表明M3U8文件不会再产生更多的切片 EXTINF extra info:分片TS的信息,如时长,带宽等 示例 test.m3u8文件 #EXTM3U
/objs/nginx/html/live)会有m3u8/ts。...html; hls_fragment 10; hls_window 60; } } hls配置节(hls分发) enabled:是否开启HLS hls_fragment:指定ts切片的最小长度...(单位:秒) hls_window:指定HLS大小,即m3u8中ts文件的时长之和,超过总时长后,丢弃第一个m3u8中的第一个切片,直到ts的总时长在这个配置项范围之内。...即SRS保证下面的公式:hls_window>= sum(m3u8中每个ts的时长) 详细说明:https://github.com/ossrs/srs/wiki/v2_CN_DeliveryHLS...#启动分发hls(m3u8/ts)的nginx .
对于 HLS 直播,相对于常见的流媒体直播协议,例如 RTMP 协议、RTSP 协议等,HLS 最大的不同在于直播客户端获取到的并不是一个完整的数据流,而是连续的、短时长的媒体文件(如 MPEG-TS...由于数据通过 HTTP 协议传输,所以完全不用考虑防火墙或者代理的问题,而且分段文件的时长很短,客户端可以很快的选择和切换码率,以适应不同带宽条件下的播放。...HLS 协议的实现是和 M3U8 文件的定义密切相关的,这部分的知识在《M3U8 格式》中已经做了详细介绍。在这里只简单介绍一下 HLS 协议的整体框架。...在这个过程中,MPEG-2 的数据流会被处理为一系列连续的小切片文件(.ts)存储在 Web 服务器上,同时服务器会生成一个索引文件对这些切片文件进行索引,并将这个索引文件发布出去。...客户端请求和读取该索引文件,并请求和获取其中的切片文件从而获得对应的媒体资源数据来进行处理和展示。
分片的序列号,一般情况下是0,但是在直播场景下,这个序列号标识直播段的起始位置; #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-TARGETDURATION 每个分片TS的最大的时长...; #EXT-X-TARGETDURATION:10 每个分片的最大时长是 10s #EXT-X-ALLOW-CACHE 是否允许cache; #EXT-X-ALLOW-CACHE...extra info,分片TS的信息,如时长,带宽等;一般情况下是 #EXTINF:,[] 后面可以跟着其他的信息,逗号之前是当前分片的ts时长,分片时长 移动要小于...#EXT-X-TARGETDURATION 定义的值; #EXT-X-VERSION M3U8版本号 #EXT-X-DISCONTINUITY 该标签表明其前一个切片与下一个切片之间存在中断...'#EXT-X-DISCONTINUITY' 该标签表明其前一个切片与下一个切片之间存在中断。
M3U8文件是一个记录索引的纯文本文件,打开它时播放软件并不是播放它,而是根据它的索引找到对应的音视频文件的网络地址进行在线播放。...TSINGSEE青犀视频EasyDSS直播点播系统支持调用m3u8播放地址进行二次开发或者集成。...目前在m3u8地址上仍存在的问题是,调用获取指定时间录像的m3u8播放地址用苹果手机进行播放,会出现黑屏无法播放的问题,但是其他平台并无该问题。所以这个成为我们亟待解决的问题。...经过研发的分析,应该是后台在生成新的m3u8文件出现了问题,新的m3u8文件对内容不是很严谨,其中在统计播放时长的那个参数一开始并没有统计,导致iOS系统在识别的时候出现问题。...因此我们从代码中对最大ts切片的时长和总时长进行统计,将数据写到对应的m3u8参数中。
首先我们先使用 ffmepg 对一段视频文件进行切片,视频所在路径:D:\Work\test 切片命令行如下: ffmpeg -i SampleVideo_1280x720_20mb.mp4 -...-hls_time 5: 设置HLS(HTTP Live Streaming)分段的时长为5秒。这将影响生成的.m3u8文件中每个.ts分段文件的时长。...在切片过程中,CPU 利用率飙升,这属于正常现象 切片后,可以在目录下看到下面的文件,ffmpeg 将源视频文件切成了 23 个子文件和一个 index.m3u8 文件 上面先有个基本的概念...这里是 3,那么这里用的就是 HLS 协议第三个版本,此标签只能有 0 或 1 个, 不写代表使用版本 1 EXT-X-TARGETDURATION 所有切片的最大时长,有些 Apple 设备这个参数不正确会无法播放...EXT-X-MEDIA-SEQUENCE 切片的开始序号。每一个切片都有唯一的序号,相邻之间序号+1。这个编号会继续增长,保证流的连续性。 EXTINF ts 切片的实际时长。
那么,下面就简单介绍下 m3u8 文件。...M3U8中包含基础标签: EXTM3U:表明该文件是一个 m3u8 文件,每个 m3u8 文件必须将该标签放置在第一行。...该标签为全局作用域,使能整个 m3u8 文件;每个 m3u8 文件内最多只能出现一个该标签定义。如果 m3u8 文件不包含该标签,则默认为协议的第一个版本。...EXTINF:表示其后 URL 指定的媒体片段时长(单位为秒)。每个 URL 媒体片段之前必须指定该标签,其值必须小于或等于 EXT-X-TARGETDURATION 指定的值。...如果大家对我们的ts切片感兴趣,可以回顾一下我们之前写过的ts切片大小设置。视频相关解决方案均可访问TSINGSEE青犀视频,如有需求或疑问,欢迎随时联系我们!
m3u8合并解密 TS视频文件分片合并解密 支持QQ、UC浏览器等缓存视频合并解密(此软件免费使用) qq群:1062927028 图片: 合并解密成功 TS是日本高清摄像机拍摄下进行的封装格式...m3u8是一个TS切片列表文件,它记录视频的每个切片的时长与顺序,m3u8是一种文本文件,非视频文件,是UTF-8编码格式的文本文件,可以用文本编辑器打开如下: #EXTM3U #EXT-X-TARGETDURATION
一个视频可以被分割成多个视频切片,这些切片的传送位置和顺序在一组被称为播放列表的XML文件中,该文件以文件扩展名m3u8结尾。人们可以使用兼容了HLS的播放器播放视频。...当客户端发起请求时,HLS服务器需要提供的文件是播放列表(m3u8文件),以及实际的A/V内容(TS切片或者 fMP4)。...EXTINF:该标签指定媒体切片的持续时长。后面应该接续相关媒体切片的URI(必须如此)。你应该确保EXTINF的值小于或者等于它所指的媒体文件的实际时长。 HLS的最小切片时长是多少?...早些时候,Apple会推荐使用10秒切片时长(EXTINF)值来打包视频,但现在已经越来越少见。...如果你已经打包的切片时长是10秒的视频,然后需要缓冲3个切片,这样即使在视频还没开始播放的情况下,你就需要去下载150 Mbit(5 mbps * 10 seconds * 3个视频切片)或者18.75MB
这个视频在server服务器上被转换成HLS格式的视频(既TS和m3u8文件)文件。...转码成H264视频数据之后,在stream segmenter模块将视频切片,切片的结果就是index file(m3u8)和ts文件了。...#EXTINF表示每个ts切片视频文件的时长。...#EXT-X-TARGETDURATION指定当前视频流中的切片文件的最大时长,也就是说这些ts切片的时长不能大于#EXT-X-TARGETDURATION的值。...上面的例子中就是一个点播模式下的m3u8的结构。 Live 模式就是实时生成M3u8和ts文件。
,将音视频数据写入切片文件 接下来进入本篇的核心代码:生成新切片文件,关闭旧切片文件,将音视频数据写入新切片文件 OnTsPackets对应的是muxer.go#FeedMpegts:先用updateFragment...当前时间戳 - 当前分片的初始时间戳 > 配置中单个ts分片时长的10倍 // 原因可能是: // 1. 当前包的时间戳发生了大的跳跃 // 2....,切片时长没有达到设置的阈值,则不开启新的切片 if f.duration < float64(m.config.FragmentDurationMs)/1000 { return nil...当前不是第一个分片,但是上一个分片已经达到配置时长 if boundary { if err := m.closeFragment(false); err !...= "m3u8" && filetype !
track的信息,track是多媒体文件中可以独立操作的媒体单位,例如一个音频流或一个视频流就是一个track (3)解析mvhd子容器 参数列表 (书 P66) 解析出视频的基本信息,包括尺寸、类型、时长...Note:音频时长可通过Duration / TimeScale的方式来计算。...:M3U8直播时的直播切片序列,当播放打开M3U8时,以这个标签的值为参考,播放对应序列号的切片 客户端播放M3U8的标准还有更多规则: 分片必须是动态改变的,序列不能相同,且序列必须是增序的...:M3U8列表中每一个分片的duration,还包含其他信息,主要为标注切片信息 EXT-X-STREAM-INF:主要出现在多级M3U8文件中,例如不同清晰度 FFmpeg转HLS参数 FFmpeg...-c copy -f hls -start_number 300 output.m3u8 2.hls_time参数 设置M3U8列表中切片的duration;该切片规则是从关键帧开始切片,时间不均匀;如果先转码再切片
HLS (HTTP Live Streaming)是苹果推出的视频流协议,HLS格式的视频包含一个m3u8文本文件,以及众多的.ts的视频片段,而m3u8文本文件的作用就是将这些ts片段索引起来。...今天我在这里教大家如何用ffmpeg将mp4格式的视频转为HLS(m3u8)格式。 ... 这里用到了几个参数,作用分别如下: 参数 作用 -i 指定输入的文件名 -c:v 指定视频的编码格式,copy的意思是复用原始视频的编码信息,不重新编码 -hls_time 指定切分的ts文件时长...,单位秒 -hls_segment_filename ts文件的命名格式 -f 指定输出的文件格式,实测这个参数可以省略 这里有个坑,当我用上面命令行生成hls视频后,我发现每个ts的时长不是我指定的...查阅资料后发现,ts切片的大小严格依赖于原始视频的GOP大小,因为必选保证一个ts内至少包含一个GOP,否则这个ts分片就无法使用。
使用HLS协议播放视频时:首先会请求一个M3U8文件,如果是点播只需要在初始化时获取一次就可以拿到所有的TS切片指向,但如果是直播的话就需要不停地轮询M3U8文件,获取新的TS切片。...获取到M3U8后:我们可以看一下里面的内容。首先开头是一些通用描述信息,比如第一个分片序列号、片段最大时长和总时长等,接下来就是具体TS对应的地址列表。...如果是直播,那么每次请求M3U8文件里面的TS列表都会随着最新的直播切片更新,从而达到直播流播放的效果。...比如我们一个M3U8有5个TS文件,每个TS文件播放时长是2秒,那么一个M3U8文件的播放时长就是10秒,也就是说这个M3U8播放的直播进度至少是10秒之前的,这对于直播场景来说是一个比较大的弊端。...首先从延时角度考虑:不考虑云端转码以及上下行的消耗,HLS和MPEG-DASH通过将切片时长减短,延时在10秒左右;RTMP和FLV理论上延时相当,在2-3秒。
select sum(num) from (select UNIX_TIMESTAMP(CONCAT('2015-01-19 ',playtime))-UNIX...
0.01 -s 480x320 test.jpg -f 强制选择格式 -ss 搜索到指定时间,支持格式:[-]hh:mm:ss[.xxx],时间单位:秒 -t 设置记录时间 -s 设置帧的大小 获取视频时长...# ffmpeg -i test.flv 2>&1 | grep 'Duration' | cut -d ' ' -f 4 | sed s/,// 视频切片 # ffmpeg -i test.flv...-strict -2 -c:v libx264 -c:a aac -f hls output.m3u8 -strict 跟标准的严格性 转换 ts 文件并生成 m3u8 将 mp4 文件转换成 ts...文件 # ffmpeg -i test.mp4 -c copy -bsf h264_mp4toannexb output.ts 将 ts 切片,并且生成 m3u8 文件 # ffmpeg -i output.ts...m3u8 文件:用文本方式对媒体文件进行描述,由一系列标签组成。
领取专属 10元无门槛券
手把手带您无忧上云