FFmpeg hls设置hls_time切片时间不准确的解决方案-ts流强制gop

场景

        播放m3u8的ts切片,必须要完整的下载一个ts切片,才能够播放,设置hls_time的时间间隔越短越好,实际过程中设置切片时间间隔为1秒,调用如下指令

ffmpeg -i test.mp4 -c:v libx264 -c:a aac -strict -2 -f hls -hls_time 1 index.m3u8

实际上产生的切片时间间隔#EXT-X-TARGETDURATION:443

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:443
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:53.000000,
index0.ts
#EXTINF:153.000000,
index1.ts

说明没有按照参数输入,进行切片

原因

       ts文件的切割,还跟原文件视频的GOP大小有关系(也就是两个I帧之间的时间间隔),因为任何一个ts分片第一帧必须是I帧,否则无法最快播放,并且第一帧不是I帧,对于播放器也是没有任何的意义,直接被播放器扔掉。任何一个视频流必须在获取到第一个I帧才能成功解码出图片。虽然指定了1秒切割一个ts文件,实际上,由于原视频流可能好几秒才有一个I帧,所以必须等到下一个I帧,才会重新开始切片    

解决思路

              既然知道要1秒产生一个ts分片,那就必须产生切片的过程中,强制一秒中产生一个关键帧,解决问题

解决方案

            ffmpeg -i test.mp4 -force_key_frames "expr:gte(t,n_forced*1)" -strict -2 -c:a aac -c:v libx264 -hls_time 1 -f hls index.m3u8

指令说明

             -force_key_frames "expr:gte(t,n_forced*1)"  设置关键帧间隔,设置间隔为2秒的参数如下:-force_key_frames "expr:gte(t,n_forced*2)"

### 使用 FFmpeg至 Web 服务器 #### 准备工作 为了成功使用 FFmpeg 进行推操作,需确保已安装并配置好必要的软件环境。这包括但限于 FFmpeg 和 RTSP 或其他类型的媒体服务器。 对于基于 RTSP 的推场景,在执行推命令前应启动 `rtsp-simple-server`[^2]: ```bash ./rtsp-simple-server ``` 此服务用于接收来自 FFmpeg 的视频,并将其转发给连接的客户端设备或应用程序。 #### 命令构建与解释 针对同需求可调整 FFmpeg 的具体参数设置。下面给出了一条典型指令来实现从本地文件向特定 IP 地址及端口号推送 H.264 编码格式的视频的例子: ```bash ffmpeg -re -stream_loop -1 -i 输入视频路径 -c copy -f rtsp 输出RTSP地址[:端口]/直播名称 ``` 其中 `-re` 参数表示按照输入文件时间戳读取数据;而 `-stream_loop -1` 则意味着无限次重复播放源文件直到手动停止进程为止。另外需要注意的是,当目标为实际存在的网络摄像机或其他硬件资源而非预录影片时,应当省略上述两个选项,并直接指定相应的 URI 来作为输入来源。 如果意图传输实时捕获的画面(比如通过 USB 摄像头),可以采用如下方式获取图像序列并向远端发送: ```bash ffmpeg -f v4l2 -framerate 30 -video_size hd720 -input_format mjpeg -i /dev/video0 \ -c:v libx264 -preset ultrafast -tune zerolatency -b:v 500k -g 50 -keyint_min 50 \ -f flv rtmp://example.com/live/stream_key ``` 这里采用了更复杂的编码策略以适应低延迟应用场景的要求——选用快速压缩模式 (`ultrafast`) 并优化零延时性能(`zerolatency`) ,同时控制比特率 (`500k`) 及 GOP 结构 (每秒最多更新一次 I-frame),从而保证畅度的同时减少带宽占用量。 #### 实现细节说明 FFmpeg 支持广泛的音视频编解码标准以及多种传输协议,因此可以根据实际情况灵活选择合适的组合方案。例如,在某些情况下可能更适合利用 HLS(HTTP Live Streaming) 协议代替 RTMP/RTSP : ```bash ffmpeg -re -i input.mp4 -codec:copy -start_number 0 -hls_time 10 -hls_list_size 6 -f hls index.m3u8 ``` 该实例展示了怎样创建一段自适应质量变化范围内的 HTTP 式媒体内容供网页浏览器在线观看。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值