一 背景
我们在用电视上投屏电影或者电视剧时,如果没有vip,用盗版电影网站投屏的话会有两个问题,1:他们网站没有投屏功能。2:卡!!!。还有就是不能随心所欲的设置自己先要自动播放的视频列表(如看完柯南第一集后想自动播放火影第十五集),所以为了实现投屏自由,需要这么一个功能来让电视播放局域网内的视频。
二 需要的设备
需要的设备为电脑,可以投屏的电视或有投屏应用的机顶盒如爱投屏
三 原理
- 利用多线程爬虫从视频网站上将视频下载到本地
- 并根据HLS协议组装好播放视频所需的m3u8文件
- 提供获取m3u8文件内容和视频片段ts内容的http接口
- 通过UPnP协议,将视频链接发送给投屏设备(DLNA设备)
- 设备根据m3u8中的视频片段链接去获取视频片段内容
- 监听设备的动作回调接口,设备播放完视频后通知http服务,自动播放下一个视频
以此实现投屏设备播放局域网内的视频,因为下载用了多线程,所以整个下载过程也是非常快的,大概1-2分钟可以下载完一个视频。因为从局域网中获取视频,所以速度是非常快的,无论怎么拖动进度都不会卡。不过需要全程开着电脑提供视频获取服务,但是不影响电脑的其他功能的使用,可以一边用电脑玩游戏一边看电视中投屏的视频。
代码在这里,是一个简单版本,在application.yml中定一个了一个属性video.base.path,指定了视频爬虫下载视频的保存地址,可以自行修改。项目中内置了几个爬虫,启动项目后使用方式如下
- 调用/video/crawl?url=视频网站视频播放页面链接。下载视频,会在video.base.path路径下生成一个名称为视频id的文件夹
- 调用/device/search?serviceType=urn:schemas-upnp-org:service:AVTransport:1 获取当前局域网下的投屏设备
- 调用/device/play?deviceId=设备列表的序号(从0开始)&videoId=视频id 投屏
- 提供了一个简单的页面来执行上述步骤1-3http://localhost:8088/html/index.html,进入页面后会有5秒中进行搜索设备,并且显示出video.base.path路径下的视频列表,如果没有视频的话,可以输入地址进行下载,内置爬虫支持的网站为www.huidongxie.com、www.wszwz.net、www.nxyjjt.com。投屏的时候,在页面中先点一下设备列表中的设备,再点击视频列表中的视频,就可以进行投屏。
页面很简陋,先凑合着用。。。。