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-3http://localhost:8088/html/index.html,进入页面后会有5秒中进行搜索设备,并且显示出video.base.path路径下的视频列表,如果没有视频的话,可以输入地址进行下载,内置爬虫支持的网站为www.huidongxie.comwww.wszwz.netwww.nxyjjt.com。投屏的时候,在页面中先点一下设备列表中的设备,再点击视频列表中的视频,就可以进行投屏。

​​​​​​​

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

相关推荐
mghio7 小时前
Dubbo 中的集群容错
java·微服务·dubbo
咖啡教室12 小时前
java日常开发笔记和开发问题记录
java
咖啡教室12 小时前
java练习项目记录笔记
java
鱼樱前端13 小时前
maven的基础安装和使用--mac/window版本
java·后端
RainbowSea13 小时前
6. RabbitMQ 死信队列的详细操作编写
java·消息队列·rabbitmq
RainbowSea13 小时前
5. RabbitMQ 消息队列中 Exchanges(交换机) 的详细说明
java·消息队列·rabbitmq
李少兄15 小时前
Unirest:优雅的Java HTTP客户端库
java·开发语言·http
此木|西贝15 小时前
【设计模式】原型模式
java·设计模式·原型模式
可乐加.糖15 小时前
一篇关于Netty相关的梳理总结
java·后端·网络协议·netty·信息与通信