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。投屏的时候,在页面中先点一下设备列表中的设备,再点击视频列表中的视频,就可以进行投屏。

​​​​​​​

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

相关推荐
Allen Bright4 分钟前
Spring Boot 整合 RabbitMQ:手动 ACK 与 QoS 配置详解
spring boot·rabbitmq·java-rabbitmq
新手小袁_J21 分钟前
JDK11下载安装和配置超详细过程
java·spring cloud·jdk·maven·mybatis·jdk11
呆呆小雅22 分钟前
C#关键字volatile
java·redis·c#
Monly2122 分钟前
Java(若依):修改Tomcat的版本
java·开发语言·tomcat
Eric.Lee202123 分钟前
moviepy将图片序列制作成视频并加载字幕 - python 实现
开发语言·python·音视频·moviepy·字幕视频合成·图像制作为视频
Ttang2325 分钟前
Tomcat原理(6)——tomcat完整实现
java·tomcat
goTsHgo26 分钟前
在 Spring Boot 的 MVC 框架中 路径匹配的实现 详解
spring boot·后端·mvc
却道天凉_好个秋29 分钟前
音视频学习(二十四):hls协议
音视频·hls
钱多多_qdd35 分钟前
spring cache源码解析(四)——从@EnableCaching开始来阅读源码
java·spring boot·spring
waicsdn_haha37 分钟前
Java/JDK下载、安装及环境配置超详细教程【Windows10、macOS和Linux图文详解】
java·运维·服务器·开发语言·windows·后端·jdk