SpringBoot接口实现视频在线播放
获取所有的mp4在线播放地址,并当前端调用该接口时返回mp4视频文件名及其播放地址,mp4视频存放在D盘的video文件夹下
@ApiOperation("获取所有MP4播放地址")@GetMapping("/get/video/address")public List<Map<String, String>> getVideoAddress() {File file = new File("D:\\video");List<Map<String, String>> fileNs = new ArrayList<Map<String, String>>();String filename = "";File[] subFile = file.listFiles();for (File value : subFile) {// 判断是否为文件夹if (!value.isDirectory()) {Map<String, String> jsonVideos = new HashMap<>();String subFileName = value.getName();// 判断是否为mp4结尾if (subFileName.trim().toLowerCase().endsWith(".mp4")) {filename = "http://localhost:8080/video/alone/video/play" + subFileName;String chFileName = VIDEO_EN_CH.get(subFileName);jsonVideos.put("filename",chFileName);jsonVideos.put("address",filename);fileNs.add(jsonVideos);}}}return fileNs;}
单个视频在线播放接口,这里需要传mp4文件名
@ApiOperation("单个MP4播放")@GetMapping(value = "/alone/video/play/{filename}" ,produces ="application/json;charset=utf-8")public void aloneVideoPlay(HttpServletRequest request, @PathVariable("filename") String fileName, HttpServletResponse response) {InputStream is = null;OutputStream os = null;try {response.setContentType("video/mp4");File file = new File("D:\\video\\" + fileName);response.addHeader("Content-Length", "" + file.length());is = new FileInputStream(file);os = response.getOutputStream();IOUtils.copy(is, os);} catch (Exception e) {log.error("播放MP4失败", e);} finally {if (null != os) {try {os.close();} catch (IOException e) {e.printStackTrace();}}}}
完整Controller
@Api(tags = "视频Controller")
@RestController
@RequestMapping("/video")
public class VideoController {@ApiOperation("获取所有MP4播放地址")@GetMapping("/get/video/address")public List<Map<String, String>> getVideoAddress() {File file = new File("D:\\video");List<Map<String, String>> fileNs = new ArrayList<Map<String, String>>();String filename = "";File[] subFile = file.listFiles();for (File value : subFile) {// 判断是否为文件夹if (!value.isDirectory()) {Map<String, String> jsonVideos = new HashMap<>();String subFileName = value.getName();// 判断是否为mp4结尾if (subFileName.trim().toLowerCase().endsWith(".mp4")) {filename = "http://localhost:8080/video/alone/video/play" + subFileName;String chFileName = VIDEO_EN_CH.get(subFileName);jsonVideos.put("filename",chFileName);jsonVideos.put("address",filename);fileNs.add(jsonVideos);}}}return fileNs;}@ApiOperation("单个MP4播放")@GetMapping(value = "/alone/video/play/{filename}" ,produces ="application/json;charset=utf-8")public void aloneVideoPlay(HttpServletRequest request, @PathVariable("filename") String fileName, HttpServletResponse response) {InputStream is = null;OutputStream os = null;try {response.setContentType("video/mp4");File file = new File("D:\\video\\" + fileName);response.addHeader("Content-Length", "" + file.length());is = new FileInputStream(file);os = response.getOutputStream();IOUtils.copy(is, os);} catch (Exception e) {log.error("播放MP4失败", e);} finally {if (null != os) {try {os.close();} catch (IOException e) {e.printStackTrace();}}}}}
扩展对视频进行分页
PageUtil
public class PageUtil {/*** 开始分页* @param list* @param pageNum 页码* @param pageSize 每页多少条数据* @return*/public static List startPage(List list, Integer pageNum,Integer pageSize) {if (list == null) {return null;}if (list.size() == 0) {return null;}Integer count = list.size(); // 记录总数Integer pageCount = 0; // 页数if (count % pageSize == 0) {pageCount = count / pageSize;} else {pageCount = count / pageSize + 1;}int fromIndex = 0; // 开始索引int toIndex = 0; // 结束索引if (pageNum != pageCount) {fromIndex = (pageNum - 1) * pageSize;toIndex = fromIndex + pageSize;} else {fromIndex = (pageNum - 1) * pageSize;toIndex = count;}List pageList = list.subList(fromIndex, toIndex);return pageList;}
}
获取所有MP4播放地址(分页),需要前端调该接口时,传两个参数,pageNum及pageSize,页码和每页多少条
@ApiOperation("获取所有MP4播放地址")@PostMapping("/get/video/address")public List<Map<String, String>> getVideoAddress(@RequestBody Map<String, String> json) {File file = new File("D:\\video");List<Map<String, String>> fileNs = new ArrayList<Map<String, String>>();String filename = "";File[] subFile = file.listFiles();for (File value : subFile) {// 判断是否为文件夹if (!value.isDirectory()) {Map<String, String> jsonVideos = new HashMap<>();String subFileName = value.getName();// 判断是否为mp4结尾if (subFileName.trim().toLowerCase().endsWith(".mp4")) {filename = "http://localhost:8080/video/alone/video/play" + subFileName;String chFileName = VIDEO_EN_CH.get(subFileName);jsonVideos.put("filename",chFileName);jsonVideos.put("address",filename);fileNs.add(jsonVideos);}}}String pageNum = json.get("pageNum");String pageSize = json.get("pageSize");return PageUtil.startPage(fileNs, Integer.parseInt(pageNum), Integer.parseInt(pageSize));}
SpringBoot接口实现视频在线播放相关推荐
- WordPress 7B2主题插件分享 – 动漫视频在线播放插件Selection
简介: 这个插件和上篇分享的统计插件都是基于7B2主题开发的,用在其他主题可能产生无法使用的可能或者CSS错乱的问题 这款插件就厉害了,可以让7B2主题从一个博客主题变成视频在线播放网站,此插件是开源 ...
- php实现在线视频播放,HTML如何实现视频在线播放
本篇文章主要给大家介绍HTML视频在线播放的具体实现方法. 对于学习HTML的新手来说,可能觉得实现视频在线播放的功能会有一点难度.其实大家只要熟练掌握其中主要的标签,就会非常容易去实现. 下面我们就 ...
- 让你的Onedrive网盘秒变网站,文件展示,直连下载,视频在线播放
之前我们介绍了免费的5TB的Onedrive网盘,不但能做本地硬盘使用,还能扩展你的硬盘,今天我们就来介绍一下另一款Onedrive网盘的神器OneIndex,这是针对Onedrive网盘的一个开源程 ...
- 39. 实战:基于api接口实现视频解析播放(32接口,窗口化操作,可导出exe,附源码)
目录 前言 目的 思路 代码实现 需要导入的模块 1. 导入解析网站列表,实现解析过程 2. 设计UI界面 3. 设置窗口居中和循环执行 4. 注意事项 完整源码 运行效果 总结 前言 本节将类似34 ...
- html5ios播放视频在线播放,ios-iPhone上的HTML5视频自动播放
这是克服您在网站上进行视频自动播放的所有难题的小技巧: 1)检查视频是否正在播放.2)在诸如单击或触摸身体等事件时触发视频播放. 注意:除非用户与设备进行交互,否则某些浏览器不允许视频自动播放. 因此 ...
- asp.net实现视频在线播放
利用ASP.net实现在线音频.视频播放功能 ASP.net实现音乐,视频播放功能的实例: 今天主要介绍的是借助于微软提供的Media Player插件来实现 该插件默认是没有添在加工具箱面板上的,需 ...
- 92game帝国CMS电影视频在线播放网站源码 自适应手机端
介绍: 模板用帝国CMS为核心,适合做视频播放和下载站点, 默认可以播放优酷土豆腾讯等视频站点的视频(通用播放分享代码,非解析! ), 集成CKPLAYER播放器,可以上传和外链自己的MP4.FLV格 ...
- php在线点播,php如何实现视频在线播放
如题,我在弄一个可以播放视频的页面,是服务器端的,用php如何能实现呢? 回复讨论(解决方案) 只能是动态调用视频地址 在客户端的插件中进行播放 和语言没关系 不知道是不是这个意思 你可以通过html ...
- Java实现视频在线播放flv视频
1.首先使用Idea创建一个Spring Boot项目. 2.在application.properties文件下加入以下代码,进行DEBUG日志输出,配置pom.xml文件: #logging日志配 ...
最新文章
- centos vim 安装插件本质研究
- .jsp后缀语言_ARM汇编语言入门(三)
- 性能测试, 压力测试 , 负载测试和 容量测试 的区别与联系
- ASP.NET 连接MySql数据库
- oracle以32位运行,Oracle在 32位系统上运行突破sga1.7g的方法
- ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction
- comptia a+_CompTIA认证考试– A +,Network + Security +,CASP,Linux +和IT基础实践测试和网站
- echo输出不重复行到文件 shell_Shell脚本echo指令使用小技巧
- 云计算机是对什么技术的发展,云计算是对什么技术的发展与运用
- python爬取百度的工具_Python爬虫之小试牛刀——使用Python抓取百度街景图像
- windows 电脑如何查看电脑显卡内存(显存)、CPU型号、内存、USB集线器等配置信息 win+r dxdiag
- 科技的成就(三十六)
- 内核与驱动文件的version magic匹配问题
- idea中*mapper.xml文件字体颜色变成黄色的解决办法
- 远程桌面无法连接远程计算机是什么原因?
- cmdy5(cmdy5庆余年)
- Python——生成激活码
- 中国石油大学《输气管道设计与管理(含课程设计)》第一阶段在线作业
- 更新TTK失败,请检查网络连接
- MARKETS AND MARKET LOGIC——The Market‘s Principles (5)
热门文章
- python的tesseract库几个重要的命令
- Orange pi GPIO输出控制,裸机点灯大法(二)!
- python机器学习初探
- win10查看服务器共享文件夹权限,win10共享文件夹win7没有权限访问的解决教程
- 回归预测 | MATLAB实现GWO-LSTM灰狼算法优化长短期记忆神经网络多输入单输出回归预测
- 图像在计算机中通过什么方式表示_线性代数在数据科学中的十大强大应用(二)...
- ZOJ 2975	Kinds of Fuwas(暴力)
- ec20 以太网_整车通讯系统——车载以太网系统系列文章(第一篇)
- 记录win10安装Dexdump并脱壳
- 淘宝短视频多模态融合识别