当前位置: 首页 > news >正文

java实现局域网内视频投屏播放(一)背景/需求

一 背景

我们在用电视上投屏电影或者电视剧时,如果没有vip,用盗版电影网站投屏的话会有两个问题,1:他们网站没有投屏功能。2:卡!!!。还有就是不能随心所欲的设置自己先要自动播放的视频列表(如看完柯南第一集后想自动播放火影第十五集),所以为了实现投屏自由,需要这么一个功能来让电视播放局域网内的视频。

二 需要的设备

需要的设备为电脑,可以投屏的电视或有投屏应用的机顶盒如爱投屏

三 原理

  1. 利用多线程爬虫从视频网站上将视频下载到本地
  2. 并根据HLS协议组装好播放视频所需的m3u8文件
  3. 提供获取m3u8文件内容和视频片段ts内容的http接口
  4. 通过UPnP协议,将视频链接发送给投屏设备(DLNA设备)
  5. 设备根据m3u8中的视频片段链接去获取视频片段内容
  6. 监听设备的动作回调接口,设备播放完视频后通知http服务,自动播放下一个视频

以此实现投屏设备播放局域网内的视频,因为下载用了多线程,所以整个下载过程也是非常快的,大概1-2分钟可以下载完一个视频。因为从局域网中获取视频,所以速度是非常快的,无论怎么拖动进度都不会卡。不过需要全程开着电脑提供视频获取服务,但是不影响电脑的其他功能的使用,可以一边用电脑玩游戏一边看电视中投屏的视频。
代码在这里​​​​​​​,是一个简单版本,在application.yml中定一个了一个属性video.base.path,指定了视频爬虫下载视频的保存地址,可以自行修改。项目中内置了几个爬虫,启动项目后使用方式如下

  1. 调用/video/crawl?url=视频网站视频播放页面链接。下载视频,会在video.base.path路径下生成一个名称为视频id的文件夹
  2. 调用/device/search?serviceType=urn:schemas-upnp-org:service:AVTransport:1 获取当前局域网下的投屏设备
  3. 调用/device/play?deviceId=设备列表的序号(从0开始)&videoId=视频id 投屏
  4. 提供了一个简单的页面来执行上述步骤1-3​​​​​​​http://localhost:8088/html/index.html,进入页面后会有5秒中进行搜索设备,并且显示出video.base.path路径下的视频列表,如果没有视频的话,可以输入地址进行下载,内置爬虫支持的网站为www.huidongxie.com、www.wszwz.net、www.nxyjjt.com。投屏的时候,在页面中先点一下设备列表中的设备,再点击视频列表中的视频,就可以进行投屏。

​​​​​​​

页面很简陋,先凑合着用。。。。

相关文章:

  • MATLAB Sub2ind下标值转化
  • Linux---获取管理员权限的相关命令
  • Day20【time模块】
  • 在Flutter中使用PhotoViewGallery指南
  • Docker与K8s的区别
  • 数字化转型导师坚鹏:中国工商银行人工智能与金融数字化转型培训
  • vscode 文件目录栏缩进
  • 基于Springboot的高校教学评价系统的设计与实现(源码+调试)
  • FreeRDP WebConnect Url 任意文件读取漏洞复现
  • acwing算法提高之动态规划--状态压缩DP
  • 网络安全—学习溯源和日志分析
  • Axure元件的介绍使用以及登录界面
  • HarmonyOS给应用添加消息通知
  • Logcat日志记录的使用
  • HPM6750系列--第十篇 时钟系统
  • 【Leetcode】101. 对称二叉树
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 230. Kth Smallest Element in a BST
  • android 一些 utils
  • axios 和 cookie 的那些事
  • C++11: atomic 头文件
  • canvas绘制圆角头像
  • classpath对获取配置文件的影响
  • codis proxy处理流程
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • go语言学习初探(一)
  • input的行数自动增减
  • Java,console输出实时的转向GUI textbox
  • js ES6 求数组的交集,并集,还有差集
  • Python 基础起步 (十) 什么叫函数?
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • Vue2.0 实现互斥
  • XML已死 ?
  • 反思总结然后整装待发
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 深度学习在携程攻略社区的应用
  • 网页视频流m3u8/ts视频下载
  • 小程序测试方案初探
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​业务双活的数据切换思路设计(下)
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #Lua:Lua调用C++生成的DLL库
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (1)(1.11) SiK Radio v2(一)
  • (poj1.3.2)1791(构造法模拟)
  • (分布式缓存)Redis分片集群
  • (四)c52学习之旅-流水LED灯
  • (转)socket Aio demo
  • (转载)深入super,看Python如何解决钻石继承难题
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .NET CORE 第一节 创建基本的 asp.net core
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • @RequestBody与@ModelAttribute
  • [BZOJ1060][ZJOI2007]时态同步 树形dp