由于很多时候,视频资源下载很慢,需要用自己的电脑挂机;又或是国外的资源被墙,无法观看;所以需要一个可以挂机下载的服务器。
离线下载这步做到之后,又由于download到自己电脑上还需要一段时间,而且有些资源可能是不需要的, 所以又有了在线观看的需求。
其实正常的开发流程一般遵照网上的教程或者官方文档就可以很容易的解决;这边讲讲一些需要费一些精力才能解决的问题
一般都是使用 eval
来执行加密过的字符串,只要先将eval里面的参数给解密出来,然后使用正则匹配解密之后的字符串里面的下载地址就可以了
p = re.compile(ur'eval/((.*)') m = p.search(response.body) if not m: print('---- not match ----') return jsctx = PyV8.JSContext(PyV8.JSClass()) jsctx.enter() jsctx.eval(r"var a = new String(" + m.group(1)) print(jsctx.locals.a) content = jsctx.locals.a p1 = re.compile('(http://[^"]+)') m1 = p1.search(content) if not m1: print('---- cannot find url in js content ----') return videoUrl = m1.group(1)
# encoding: utf-8 import xmlrpclib class Pipeline(object): def __init__(self): self.s = xmlrpclib.ServerProxy('http://localhost:6800/rpc') def init_hook(self): self.s.aria2.onDownloadStart(self.onDownloadStart) self.s.aria2.onDownloadError(self.onDownloadError) self.s.aria2.onDownloadComplete(self.onDownloadComplete) def onDownloadStart(self, event): pass def onDownloadError(self, event): pass def onDownloadComplete(self, event): pass def process_item(self, item, spider): # ... gid = self.s.aria2.addUri([item['video_url']], {"out": path}) # ...
命令如下, 注意替换<>之间的内容
ffmpeg -i <ccc.mp4> -vf scale=-2:360 -profile:v baseline -level 3.0 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls <ccc.m3u8>
注意替换命令中的两个变量
ffmpeg -ss 00:00:10 -t 5 -i "$filename" -vf scale=360:-1 -b 2048k "$dirname".gif
默认情况之下videojs是不支持播放HLS的,需要引入 videojs-contrib-hls.min.js
videojs.options.flash.swf = "/js/video-js/video-js.swf"; videojs('main_video').ready(function() { this.hotkeys({ volumeStep: 0.1, seekStep: 5, enableMute: true, enableFullscreen: true, enableNumbers: true }); });