import com.google.common.collect.ImmutableList;
import net.bramp.ffmpeg.builder.FFmpegBuilder; import java.util.ArrayList;
import java.util.List; /***
* 适用于hls协议的构造器,<a href="https://ffmpeg.org/ffmpeg-formats.html#hls-1">hls协议相关参数</a>
* @author dqk
*/ public class HLSFFmpegBuilder extends FFmpegBuilder { /***
* Set the maximum number of playlist entries. If set to 0 the list file will contain all the segments. Default value is 5.
*/
private Integer hlsListSize = 5; /***
* Set the target segment length in seconds. Default value is 2. Segment will be cut on the next key frame after this time has passed.
*/
private Integer hlsTime = 2; /***
* This is a deprecated option, you can use hls_list_size and hls_flags delete_segments instead it
*
* This option is useful to avoid to fill the disk with many segment files, and limits the maximum number of segment files written to disk to wrap.
*/
@Deprecated
private Integer hlsWrap = 0; public HLSFFmpegBuilder setHlsListSize(Integer hlsListSize) {
this.hlsListSize = hlsListSize;
return this;
} public HLSFFmpegBuilder setHlsTime(Integer hlsTime) {
this.hlsTime = hlsTime;
return this;
} public HLSFFmpegBuilder setHlsWrap(Integer hlsWrap) {
this.hlsWrap = hlsWrap;
return this;
} public Integer getHlsListSize() {
return hlsListSize;
} public Integer getHlsTime() {
return hlsTime;
} public Integer getHlsWrap() {
return hlsWrap;
} @Override
public List<String> build() {
List<String> args = super.build();
List<String> temp = new ArrayList<>(); setFormat("hls"); if(this.hlsWrap != null){
temp.add("-hls_wrap");
temp.add(hlsWrap.toString());
} if(this.hlsTime != null){
temp.add("-hls_time");
temp.add(hlsTime.toString());
} if(this.hlsListSize != null){
temp.add("-hls_list_size");
temp.add(hlsListSize.toString());
} for(String arg: temp){
args.add(arg);
}
List<String> newargs = ImmutableList.copyOf(args);
return newargs;
}
}
GkFFmpegBuilder.java
import com.google.common.collect.ImmutableList;
import net.bramp.ffmpeg.builder.FFmpegBuilder; import java.util.ArrayList;
import java.util.List; /**
* 为了方便拓展api中没有的参数
*/ public class GkFFmpegBuilder extends FFmpegBuilder { private Long itsoffset; @Override
public List<String> build() {
// 该数组为不可变数组 (原因未知)
List<String> args = super.build();
List<String> temp = new ArrayList<>();
if(this.itsoffset != null){
temp.add("-itsoffset");
temp.add(this.itsoffset.toString());
} for(String arg: args){
temp.add(arg);
}
List<String> newargs = ImmutableList.copyOf(temp);
return newargs;
} public Long getItsoffset() {
return itsoffset;
} public GkFFmpegBuilder setItsoffset(Long itsoffset) {
this.itsoffset = itsoffset;
return this;
} }

HLSFFmpegBuilder适用于hls协议的构造器 没具体测试的更多相关文章

  1. CentOS6下基于Nginx搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具)

    1.先添加几个RPM下载源 1.1)安装RPMforge的CentOS6源     [root@AY130611215205Z ~]# wget -c http://pkgs.repoforge.or ...

  2. HLS 协议

    HTML 5 视频直播一站式扫盲   本文来自于腾讯bugly开发者社区,原文地址:http://bugly.qq.com/bbs/forum.php?mod=viewthread&tid=1 ...

  3. Ubuntu 14.10下基于Nginx搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具)

    Ubuntu 14.10下基于Nginx搭建mp4/flv流媒体服务器(可随意拖动)并支持RTMP/HLS协议(含转码工具) 最近因为项目关系,收朋友之托,想制作秀场网站,但是因为之前一直没有涉及到这 ...

  4. 流媒体协议(一):HLS 协议

    一.HLS 概述 HLS 全称是 HTTP Live Streaming,是一个由 Apple 公司提出的基于 HTTP 的媒体流传输协议,用于实时音视频流的传输.目前HLS协议被广泛的应用于视频点播 ...

  5. 开源流媒体服务器SRS学习笔记(2) - rtmp / http-flv / hls 协议配置 及跨域问题

    对rtmp/http-flv/hls这三种协议不熟悉的同学,强烈建议先看看网友写的这篇文章科普下:理解RTMP.HttpFlv和HLS的正确姿势 .   srs可以同时支持这3种协议,只要修改conf ...

  6. AOSP中的HLS协议解析

    [时间:2018-04] [状态:Open] [关键词:流媒体,stream,HLS, AOSP, 源码分析,HttpLiveSource, LiveSession,PlaylistFetcher] ...

  7. vlc源码分析(七) 调试学习HLS协议

    HTTP Live Streaming(HLS)是苹果公司提出来的流媒体传输协议.与RTP协议不同的是,HLS可以穿透某些允许HTTP协议通过的防火墙. 一.HLS播放模式 (1) 点播模式(Vide ...

  8. 基于Html5+HLS协议播放符合部标1078协议的实时流媒体视频

    由于现在主流的部标GPS和1077视频监控平台,都是BS架构,在网页上播放视频,早期的很多平台用的都是ActiveX控件的形式,依赖于IE浏览器,需要降低浏览器的安全设置,而且非常难用.同时由于win ...

  9. 如何生成HLS协议的M3U8文件

    什么是HLS协议: HLS(Http Live Streaming)是由Apple公司定义的用于实时流传输的协议,HLS基于HTTP协议实现,传输内容包括两部分,一是M3U8描述文件,二是TS媒体文件 ...

随机推荐

  1. char[] byte[] string

    C#  byte 和 char 可以认为是等价的.但是在文本显示的时候有差异. char 占两个字节,unicode字符 1.内存转换: char转化为byte: public static byte ...

  2. SIGAI机器学习第二十一集 AdaBoost算法2

    讲授Boosting算法的原理,AdaBoost算法的基本概念,训练算法,与随机森林的比较,训练误差分析,广义加法模型,指数损失函数,训练算法的推导,弱分类器的选择,样本权重削减,实际应用. 大纲: ...

  3. (6)Go函数和函数式编程

    一.Go函数 函数是组织好的.可重复使用的.用于执行指定任务的代码块.本文介绍了Go语言中函数的相关内容. Go语言中支持函数.匿名函数和闭包,并且函数在Go语言中属于"一等公民" ...

  4. Django基础(1)-虚拟环境的安装及配置

    virtualenv介绍 (1)做什么的?virtualenv是用于创建独立的python环境,使得多个python应用彼此独立: (2)优点: a)使不同应用开发环境独立 b)环境升级不影响其他应用 ...

  5. FCS省选模拟赛 Day7

    Description  Solution T1 island 考虑把问题成两部分计算 纵坐标的距离和很好计算,在输入的同时一次计算了就完事 横坐标又分成两部分 分别在\(y\)轴不同侧的矩形的距离和 ...

  6. CTYZ的树论赛(P5557 旅行/P5558 心上秋/P5559 失昼城的守星使)

    总结 由于受中秋节影响,没能在比赛时间内切掉\(T3\) 思维难度\(T1<T2<T3\),代码难度\(T1>T2>T3\) P5557 旅行 显然跳到环上去后就可以直接模了, ...

  7. nodejs 日志框架winston笔记

    winston是一款nodejs的日志库,本文以2.1.1版本为例,介绍一下使用方法. 1.基础用法 引用日志库,返回的是一个对象.包含一些构造器,实例方法. 其中transports是日志输出方式. ...

  8. hadoop错误记录部分总结

    错误记录与分析 错误1:java.net.BindException: Port in use: localhost:0 datanode节点启动时报错 日志信息如下: Exiting with st ...

  9. Linux下的crontab定时执行任务命令

    0x00 简介 在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间. cron的 ...

  10. 时间控件My97DatePicker事件监听及用法

    引入js <script src="My97DatePicker/WdatePicker.js"></script> 应用 <input type=& ...