首页 > 异步预热在线视频实现

异步预热在线视频实现

毕业之际给学校搭建了基于ATS的正向代理缓存服务器,专门用来处理优酷土豆等在线视频流量。通过改写一个浏览器做成在线视频专用浏览器,内置了ATS的代理设置。

用php配合memcacheq和小脚本实现了简单的异步预热功能,在实际运用中安全性请自行考虑完善。

工作方式:PHP页面提交URL——>memcacheq<——shell脚本cron定时取队列url预热(wget)

php提交

php

PHP代码(海洋之心指导修改了部分):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
广师ATS缓存预热后台
header("Content-type: text/html; charset=utf-8");
$myurl=$_GET['url'];
if(${myurl}!=""){
echo "${myurl}已经提交到下载队列,服务器会尽快下载";}
echo "";
echo "
";
echo "请输入要预热的视频URL:";
     echo "";
     echo "";
?>

mem.php:

1
2
3
4
5
6
7
8
9
10
11
header("Content-type: text/html; charset=utf-8");
$url= $_POST['url'];
//if(${url}!=""){
$memcache_obj = memcache_connect('127.0.0.1', 21201);
memcache_set($memcache_obj, 'url', $url, 0, 80);
Header("Location: autofetch.php?url=$url");//}
//Header("Location: autofetch.php");
?>

memcacheq的配置参考:http://blog.163.com/song_0803/blog/static/46097597201131510533947/

Shell脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/bin/bash
jinchengshu=`ps aux |grep -c "wget"`
if [ $jinchengshu -gt "3" ]; then
echo "wget进程太多,我先退出了"
exit 0
fi
shumu=1
time=`date "+%Y-%m-%d %H:%M:%S"`
memurl=`printf "get url " | nc 127.0.0.1 21201 | sed -n 2p`
ok=`echo $memurl | grep http`
if [ -z $ok ]
then
    echo "队列为空!"
    exit 0
else
echo "正在联网查询,请稍后..."
flvurl=`echo "$memurl" | sed -e "s@:@%3A@g" -e "s@/@%2F@g"`
echo "${time}要处理的URL为 $memurl" >>/data/ats/autofetch.log
url="http://www.flvcd.com/parse.php?format=&kw=${flvurl}"
urls=`curl -s "$url" |sed -r '/
for u in $urls
do
    echo "找到的视频链接${shumu} $u" >>/data/ats/autofetch.log
    shumu=$((shumu + 1))
    trueurl=`curl -s -I $u | awk '/Location/{print $2}'`
    echo "真实视频URL $trueurl" >> /data/ats/autofetch.log
done
thead_num=15 ###并发数
tmp_fifo_file="/tmp/$$.fifo"
mkfifo $tmp_fifo_file
exec 6<>$tmp_fifo_file
rm -f $tmp_fifo_file
for ((i=0;i<$thead_num;i++))
do
        echo ""
done >&6
for i in $urls
do
        echo "URL为$i"
        read -u6
                {
                        nowtime=`date "+%Y-%m-%d %H:%M:%S"`
                        wget -Y on --header="Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" --header="Accept-Encoding:gzip, deflate" --header="Accept-Language:zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3" --header="Referer:http://static.youku.com/v1.0.0313/v/swf/loader.swf" --header="User-Agent:Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20100101 Firefox/15.0.1" $i && echo "${nowtime} 下载完成 $i" >> /data/ats/autofetch.log
                        sleep 1
                        echo "" >&6
                }&
done
wait
exec 6>&-
echo " " >> /data/ats/autofetch.log
fi

【注:要配置wget的代理】

创建文件 ~/.wgetrc 内容为:http_proxy = http://atsip:端口/,然后可以设定crontab让shell脚本定时取memq队列预热。

喜欢用curl下载的话可以自行修改下wget的部分代码即可。

后话

经过上面的简单运用完善一下就可以出来了一个比较完整的预热功能如下图。

yure

更多相关:

  • 好久不写shell脚本,有些生疏。总结下shell的语法,以便后续参考,快速捡起来。 shell 脚本执行的3种方式: 1). ./xx.sh (xx.sh 需要有执行权限) 2). source xx.sh 3). bash xx.sh 变量定义 var=2 //注意:=左右没有空格 变量引用的2种方式 $符号就是变量解引用...

  • 作者:荒原之梦 原文链接:http://zhaokaifeng.com/?p=538 前言: “Ping”属于ICMP协议(即“Internet控制报文协议”),而ICMP协议是TCP/IP协议的一个子协议,工作在网际层。ICMP协议主要用于传输网络是否连通、主机是否可达以及路由是否可用等控制信息。Ping可以回显TTL生存...

  • 前言:俗话说的好,懒是第一生产力,懒是提高生产效率的必要条件。而现今windows是大部分人的第一生产工具,批处理+定时任务这对黄金搭档就是提升生产效率的第一工具。大家在生产过程中经常会遇到各种周期性的重复的工作,比如我现在每天都会更换最新的jar包并重启tomcat,linux服务器我们可以用shell+crontab,而windo...

  •   Linux 登陆服务器敲命令太多,某时候确实不便,所以就用shell写了一个  我的blog地址: http://www.cnblogs.com/caoguo   一.说明 支持秘密和密钥两种格式用户名和密码都是写文件的,明文保存二.配置 密码文件配置:序号:IP:端口:用户:密码:说明 1:192.168.88.128:22:...

  • Python的WEB框架有Django、Tornado、Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等诸多功能。本文将以下方面带大家全面了解Django框架,笔者使用的版本为1.10.流程基本配置路由系统视图view模板Model中间件Form认证...

  • 我知道这个错误已经被讨论了很多,但似乎每种情况都有不同的原因。我使用下面的代码和selenium从一个网站提取一些数据,并在第二次调用浏览器.get(url)。在import openpyxl, osfrom selenium import webdriveros.chdir('C://Users/user/Documents')os...

  •   onReady(){// #ifdef H5// 初始化微信 let url = location.href.split("#")[0];configWxMp({debug: false,jsApiList: ["scanQRCode"],url: this.config.apiList.wxMpConfig,data: {ur...

  • wget -S "http:/192.168.0.102:8080/cache/lookup_url?url=http://www.dnion.com/"...

  • 首先说一下业务需求: 需要在当前各主流浏览器上从tab标签形式弹出一个页面,尽量不要以单独窗口弹出。 下面是网上搜集并修改、验证后的js代码,以备以后参阅。 function getUnionCookie(B) {var A = new RegExp(B + "=([^;]+)"), _ = A.exec(document....

  • ng g s services/http  app.module.ts ... @NgModule({declarations: [...],imports: [...HttpClientModule,//这个很重紧要,没有就会报错],providers: [],bootstrap: [AppComponent] }) expor...

  • set-misc-nginx-module模块是标准的HttpRewriteModule指令的扩展,提供更多的功能,如URI转义与非转义、JSON引述、Hexadecimal/MD5/SHA1/Base32/Base64编码与解码、随机数等等。在后面的应用中,都将会接触使用到这个模块的。该模块是由章亦春先生开发的,他开发的其他模块应用...

  • 该源码包是MySQL-python-1.2.4b4.tar.gz 从2013-06-28以来一直没有更新,注意该网站可以区分访问的终端类型是Windows还是Linux之类的,从而返回的源码包格式不一样。 在CentOS上的安装方法是 http://www.cnblogs.com/jackluo/p/3559978.html...

  • ATS默认提供了对Referer头的http request的防盗链功能,主要应用于图片,对视频等会使用级别更高的防盗链功能,比如事先约定好key,采用md5或HMAC-Sha1算法加密等。 在remap.config中按如下格式设置: map_with_referer client-URL origin-server-URL re...

  • 测试大文件下载 curl -I "http://resource.tsk.erya100.com/TS/flv/TS180/5836/9.flv?t=1430796561727" 单条转发模式in per remap mode 在remap.config中添加一条 map http://resource.tsk.e...