Java 动态修改m3u8地址播放
Java动态处理m3u8问题
原始m3u8文件
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:20
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:20.500000,
00000.ts
#EXTINF:20.266667,
00001.ts
#EXTINF:20.266667,
00002.ts
#EXTINF:9.900000,
00003.ts
#EXT-X-ENDLIST
修改后m3u8文件
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:20
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:20.500000,
/data/test/00000.ts
#EXTINF:20.266667,
/data/test/00001.ts
#EXTINF:20.266667,
/data/test/00002.ts
#EXTINF:9.900000,
/data/test/00003.ts
#EXT-X-ENDLIST
Java 动态修改m3u8地址播放
package com.xxx.xxx.controller;import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.http.MediaTypeFactory;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Optional;/*** @author HanKeQi* @date 2023/3/8*/
@Slf4j
@RestController
public class TestController {@GetMapping(value = {"/play/{id}", "/play/{id}/"})public void videoPay(@PathVariable("id") Long id, HttpServletResponse response) throws IOException {OutputStream os = new BufferedOutputStream(response.getOutputStream());response.setCharacterEncoding("utf-8");try {String targetPathM3u8 = "/xxx/xxx.m3u8";byte[] targetByte = Files.readAllBytes(Paths.get(targetPathM3u8));StringBuffer stringBuffer = new StringBuffer();byte[] bytes = new byte[]{};String m3u8Str = new String(targetByte);if(!StringUtils.isEmpty(m3u8Str)) {String[] split = m3u8Str.split(System.lineSeparator());Arrays.stream(split).forEach(ts -> {if (stringBuffer.length() != 0) {stringBuffer.append(System.lineSeparator());}// .ts 文件if (!StringUtils.isEmpty(ts) && ts.endsWith(".ts")) {String formatBytes = String.format("%s/%s", "自定义URL", ts);stringBuffer.append(formatBytes);return;}stringBuffer.append(ts);});bytes = stringBuffer.toString().getBytes(StandardCharsets.UTF_8);}Optional<MediaType> mediaType = MediaTypeFactory.getMediaType(targetPathM3u8);if (mediaType.isPresent()){response.setCharacterEncoding("utf-8");response.setContentType(mediaType.get().toString());response.setHeader("Accept-Ranges", "bytes");os.write(bytes);}}finally {os = null;}}
}
Java 动态修改m3u8地址播放相关推荐
- vue 之url拼接 根据选择条件动态修改url地址
vue 之url拼接 根据选择条件动态修改url地址 这里写的是某个项目中的一部分实现代码.. 如果需要学习 常见的动态路由可以看这篇文章:https://blog.csdn.net/ws199002 ...
- 集算报表用Java动态修改报表数据源
实际应用中通过程序动态修改报表模板的情况很常见,其中动态修改数据源SQL就是一种典型场景.常见于系统中有一些结构相同而数据源不同的报表,为减少报表开发工作量,只开发一套报表模板,使用时通过程序动态修改 ...
- java动态修改class_Java Agent入门学习之动态修改代码
前言 最近用了一下午总算把Java agent给跑通了,本篇文章记录一下具体的操作步骤,以免遗忘.下面话不多说,来一起看看详细的介绍: 通过java agent可以动态修改代码(替换.修改类的定义), ...
- 动态修改webservices地址 地址重载
参考文档:http://www.cnblogs.com/jiewei915/archive/2013/01/30/2883027.html 静态修改方式 ----------------------- ...
- 润乾集算报表用Java动态修改报表数据源
实际应用中通过程序动态修改报表模板的情况很常见,其中动态修改数据源SQL就是一种典型场景.常见于系统中有一些结构相同而数据源不同的报表,为减少报表开发工作量,只开发一套报表模板,使用时通过程序动态修改 ...
- Java 动态修改的数组——ArrayList
定义 ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素. ArrayList继承于AbstractList并且实现了多个接口. 创建格 ...
- vue中使用pdf.js插件打包后不显示插件及打包后动态修改接口地址
最近写了一个项目 需要在线展示pdf 实现方法是下载该插件并解压放到 static文件夹中 地址:http://mozilla.github.io/pdf.js/ 我在项目中使用iframe嵌套的方式 ...
- java 动态获取IP地址(城市)
import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import j ...
- uniapp图片不显示 - 变量动态修改图片地址不生效 - 图片src路径错误
效果图 完整代码 <template><view><image :src="popupImgSrc1" mode="aspectFit&qu ...
最新文章
- 打马赛克就安全了吗?AI消除马赛克,GitHub开源项目上线三天收获近7000星
- AppScan使用分享
- Beautifulsoup的使用
- pc微信不支持flash_在出售PC之前,如何取消对Flash内容的授权
- php如果实现日历的制作,教大家制作简单的php日历
- 获取显示器的唯一编号_宝马奔驰才配拥有的HUD抬头显示器,买菜车也能无损安装!...
- UVALive5461 UVA615 POJ1308 Is It A Tree?(解法二)【废除!!!】
- PMP证书考试攻略:项目管理考试技巧篇(名师分享PPT)
- Oracle大神资料索引
- 【Linux】tar命令各参数详解
- APP抓包加密破解(hook)
- Django之Model数据库数据的操作
- java浅拷贝与深拷贝及拷贝工具推荐
- 力扣36.有效的数独
- 产品设计学习(一)——梁宁产品思维大纲
- 摩申网络:浅析网络棋牌游戏用户群体
- 《软件工程》思维导图
- webstorm配置环境变量_Webstorm 配置与使用 Less
- 复杂网络实验9:vicsek模型(matlab)
- 不知道油猴,我真的不敢说自己会玩插件!