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地址播放相关推荐

  1. vue 之url拼接 根据选择条件动态修改url地址

    vue 之url拼接 根据选择条件动态修改url地址 这里写的是某个项目中的一部分实现代码.. 如果需要学习 常见的动态路由可以看这篇文章:https://blog.csdn.net/ws199002 ...

  2. 集算报表用Java动态修改报表数据源

    实际应用中通过程序动态修改报表模板的情况很常见,其中动态修改数据源SQL就是一种典型场景.常见于系统中有一些结构相同而数据源不同的报表,为减少报表开发工作量,只开发一套报表模板,使用时通过程序动态修改 ...

  3. java动态修改class_Java Agent入门学习之动态修改代码

    前言 最近用了一下午总算把Java agent给跑通了,本篇文章记录一下具体的操作步骤,以免遗忘.下面话不多说,来一起看看详细的介绍: 通过java agent可以动态修改代码(替换.修改类的定义), ...

  4. 动态修改webservices地址 地址重载

    参考文档:http://www.cnblogs.com/jiewei915/archive/2013/01/30/2883027.html 静态修改方式 ----------------------- ...

  5. 润乾集算报表用Java动态修改报表数据源

    实际应用中通过程序动态修改报表模板的情况很常见,其中动态修改数据源SQL就是一种典型场景.常见于系统中有一些结构相同而数据源不同的报表,为减少报表开发工作量,只开发一套报表模板,使用时通过程序动态修改 ...

  6. Java 动态修改的数组——ArrayList

    定义 ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素. ArrayList继承于AbstractList并且实现了多个接口. 创建格 ...

  7. vue中使用pdf.js插件打包后不显示插件及打包后动态修改接口地址

    最近写了一个项目 需要在线展示pdf 实现方法是下载该插件并解压放到 static文件夹中 地址:http://mozilla.github.io/pdf.js/ 我在项目中使用iframe嵌套的方式 ...

  8. java 动态获取IP地址(城市)

    import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import j ...

  9. uniapp图片不显示 - 变量动态修改图片地址不生效 - 图片src路径错误

    效果图 完整代码 <template><view><image :src="popupImgSrc1" mode="aspectFit&qu ...

最新文章

  1. 打马赛克就安全了吗?AI消除马赛克,GitHub开源项目上线三天收获近7000星
  2. AppScan使用分享
  3. Beautifulsoup的使用
  4. pc微信不支持flash_在出售PC之前,如何取消对Flash内容的授权
  5. php如果实现日历的制作,教大家制作简单的php日历
  6. 获取显示器的唯一编号_宝马奔驰才配拥有的HUD抬头显示器,买菜车也能无损安装!...
  7. UVALive5461 UVA615 POJ1308 Is It A Tree?(解法二)【废除!!!】
  8. PMP证书考试攻略:项目管理考试技巧篇(名师分享PPT)
  9. Oracle大神资料索引
  10. 【Linux】tar命令各参数详解
  11. APP抓包加密破解(hook)
  12. Django之Model数据库数据的操作
  13. java浅拷贝与深拷贝及拷贝工具推荐
  14. 力扣36.有效的数独
  15. 产品设计学习(一)——梁宁产品思维大纲
  16. 摩申网络:浅析网络棋牌游戏用户群体
  17. 《软件工程》思维导图
  18. webstorm配置环境变量_Webstorm 配置与使用 Less
  19. 复杂网络实验9:vicsek模型(matlab)
  20. 不知道油猴,我真的不敢说自己会玩插件!

热门文章

  1. RFID技术在快餐行业运营管理中的应用
  2. 9780 RIM gtalk不能使用的解決方案 service not enabled for this handheld
  3. CBGS,百度地图15年的四个字母
  4. Win7有多条隧道适配器的原因及关闭方法
  5. IDL下高分二号完整预处理代码
  6. 武汉交通规划9号线九号线
  7. travisscott多高_175人民币买件T恤,TravisScott有多抠门?
  8. 28岁裸辞转行前端是怎样的一种体验
  9. 全国计算机二级office考试选择题知识汇总
  10. java基于Springboot的幼儿园管理系统-计算机毕业设计