video.js视频播放插件初试

最近在弄视频服务器,首先找播放插件。当看到video.js,非常清爽,并且它支持flv、mp4、webm、ogv播放格式,比较喜欢,所以选它.

简单示例

  • video.js官网
http://www.videojs.com/
  • 下载
wget http://www.videojs.com/downloads/video-js-4.12.5.zip
  • 解压
unzip video-js-4.12.5.zip
  • 简易web服务器
进入video-js目录,使用python,运行一个简易服务器
➜  video-js  python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...
 
在浏览器访问http://localhost:8000/demo.html 即可看到demo

demo.html文件介绍

<!DOCTYPE html>
<html>
<head>
  <title>Video.js | HTML5 Video Player</title>

  <!-- Chang URLs to wherever Video.js files will be hosted -->
  <link href="video-js.css" rel="stylesheet" type="text/css">
  <!-- video.js must be in the <head> for older IEs to work. -->
  <script src="video.js"></script>

  <!-- Unless using the CDN hosted version, update the URL to the Flash SWF -->
  <script>
    <!--支持播放flv -->
    videojs.options.flash.swf = "video-js.swf";
  </script>


</head>
<body>
  <!-- poster封面 preload预加载 -->
  <video id="example_video_1" class="video-js vjs-default-skin" controls preload="none" width="640" height="264"
      poster="http://video-js.zencoder.com/oceans-clip.png"
      data-setup="{}">
    <!-- 三种播放格式-->
    <source src="http://video-js.zencoder.com/oceans-clip.mp4" type='video/mp4' />
    <source src="http://video-js.zencoder.com/oceans-clip.webm" type='video/webm' />
    <source src="http://video-js.zencoder.com/oceans-clip.ogv" type='video/ogg' />
    <!-- 字幕 -->
    <track kind="captions" src="demo.captions.vtt" srclang="en" label="English"></track><!-- Tracks need an ending tag thanks to IE9 -->
    <track kind="subtitles" src="demo.captions.vtt" srclang="en" label="English"></track><!-- Tracks need an ending tag thanks to IE9 -->
    <p class="vjs-no-js">To view this video please enable JavaScript, and consider upgrading to a web browser that <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a></p>
  </video>

</body>
</html>
 
从上可看出,支持四种播放格式flv、mp4、webm、ogv

测试自己的视频

  • 转换视频
找个mp4视频,然后转换为flv、ogv、webm、swf格式. 
➜  video-js  ls -sh video
总用量 303M
 25M demo.flv   96M demo.ogv   40M demo.webm
120M demo.mp4   25M demo.swf
  • 修改demo.html文件
<source src="/video/demo.flv" type='video/x-flv' />
<!--
<source src="/video/demo.ogv" type='video/ogg' />
<source src="/video/demo.mp4" type='video/mp4' />
<source src="/video/demo.webm" type='video/webm' />
-->
  • 播放效果
改成自己的视频后,发现播放非常慢. 由于视频在本地,这种情况不正常. 最后发现由于视频文件放在web服务器中,web服务器处理静态数据很慢.

nginx静态资源服务器

有没有更快的访问方式?想到nginx处理静态数据非常快. 
  • 安装nginx
nginx的安装就不说了
 
  • 修改配置
location / {
    root   /home/wyq/workspace/video-js/;
    #root   html;
    index  index.html index.htm;
}
启动nginx之后,通过它访问demo.html,发现此时播放视频非常流畅.
  • 限速   
假如视频把网页速度占了,怎么限制视频速度?在可以在nginx中添加如下参数.
location / {
    root   /home/wyq/workspace/video-js/;
    limit_rate_after 5m; #下载5M以后开始限速
    limit_rate 512k;     #每个链接速度限制为512K
    #root   html;
    index  index.html index.htm;
}
 
另外找资料发现,网上说播放视频需要http_flv_module模块才支持拖动播放flv视频. 按照上面方法,没有安装flv模块,也可以拖动播放。想了下原因,可能我用的是nginx1.6,比较新,不需要安装flv模块,也可以拖动播放. 
 

为jekyll站点生成sitemap.xml

尝试过很多方法为站点生成sitemap.xml文件,发现下面方法最简单.
  • git地址
https://github.com/jekyll/jekyll-sitemap
  • 安装
gem  install jekyll-sitemap
  • 添加配置
在_config.yml中添加内容
gems:
  - jekyll-sitemap
  • 排除
如果不想加入sitemap,可以在post文章头部添加下面内容
sitemap: false
 
 

nginx限制访问速度

location / {
    limit_rate_after 5m;  #下载5m以后开始限速
    limit_rate 100k;      #每个链接限速100k
}

/etc/bashrc:37: command not found: shopt

在zsh中配置jdk,使用source .bash_profile出现错误
➜  ~  source .bash_profile 
/etc/bashrc:37: command not found: shopt
/etc/bashrc:fc:38: event not found: -a
/etc/bashrc:40: command not found: shopt
/etc/bashrc:51: command not found: shopt
zsh的环境变量需要配置在~/.zshrc中,不再是bash的._bash_profile
 

ifstat查看网速

安装

sudo yum install ifstat

debian示例

root@DEV-server:~# ifstat
       eth0       
 KB/s in  KB/s out
   73.53     66.34
    1.14      0.99
   89.65     22.87
    5.62      2.62
    1.79      1.15
    2.22      1.46
   62.26     62.24

fedora示例

➜  ~  ifstat
#kernel
Interface        RX Pkts/Rate    TX Pkts/Rate    RX Data/Rate    TX Data/Rate  
                 RX Errs/Drop    TX Errs/Drop    RX Over/Rate    TX Coll/Rate  
lo                     0 0             0 0             0 0             0 0      
                       0 0             0 0             0 0             0 0      
p2p1                   0 0             1 0             0 0            62 0      
                       0 0             0 0             0 0             0 0
  • RX Pkts/Rate  数据包接收流量
  • RX Errs/Drop  丢包
  • TX Pkts/Rate  数据包发送流量
  • RX Data/Rate 数据接收流量
  • TX Data/Rate 数据发送流量
  • lo与p2p1表示两个网卡
 

debian中设置tomcat开机启动

  • 解压  
在tomcat的bin目录下有commons-daemon-native.tar.gz文件
➜  bin  tar -zxvf commons-daemon-native.tar.gz
  • 编译
➜  unix  ./configure 
...
➜  unix  make
  • 复制到bin目录  
编译后生成jsvc文件,复制到bin目录下
cp jsvc /home/wyq/software/apache-tomcat-7.0.59/bin/
  • 设置启动用户
打开daemon.sh文件,默认用户是tomcat,可以自己更改
TOMCAT_USER=wyq
  • 启动/停止
sh daemon.sh start/stop
  • 修改daemon.sh配置
在daemon.sh文件中添加以下配置
pkenv=/home/wyq/pkenv
JAVA_HOME=$pkenv/jdk1.7.0_75
CATALINA_HOME=$pkenv/apache-tomcat-7.0.59
CATALINA_BASE=$pkenv/apache-tomcat-7.0.59
DAEMON_HOME=$pkenv/apache-tomcat-7.0.59/bin
TOMCAT_USER=wyq
  • 添加到/etc/init.d
cd /etc/init.d
ln -s xxxx/bin/daemon.sh tomcat
  • 以service方式启动/停止
sudo service tomcat start/stop
重启机器,tomcat会跟随启动启动.
 

一台机器部署多个tomcat

修改conf/server.xml文件中的三个端口
8005 用于停止Tomcat的端口
8009 Apache的侦听端口
8080 默认的连接端口
 

debian7.5设置开机启动(insserv)

  • 示例脚本
在/etc/init.d目录下新建脚本hello.sh
#!/bin/bash
#
### BEGIN INIT INFO
# Provides:          hello
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Should-Start:      $network $time
# Should-Stop:       $network $time
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Description:       hello world
### END INIT INFO
#

echo "hello world" > /home/wyq/a.log
  • 以update-rc.d命令添加开机启动
wyq@localhost:/etc/init.d$ sudo update-rc.d hello defaults 90
update-rc.d: using dependency based boot sequencing
update-rc.d: error: unable to read /etc/init.d/hello
在debian7系统中,会出现上面错误,需要该用insserv命令
  • 以insserv命令添加开机启动
wyq@localhost:/etc/init.d$ sudo insserv /etc/init.d/hello.sh
insserv: warning: script 'hello.sh' missing LSB tags and overrides
如果脚本没有添加metadata信息,会出现上面错误.
  • insserv用法
insserv myserver #添加服务
insserv -r myserver #删除服务
insserv -d myserver #使用默认的runlevels
 

httpsqs基本用法

基于 HTTP GET/POST 协议的轻量级开源简单消息队列服务

启动/停止

  • 启动
httpsqs -d -x /opt/httpsqs/data
  • 停止
pkill httpsqs
  • 参数
-l <ip_addr> 监听的IP地址,默认值为 0.0.0.0 
-p <num> 监听的TCP端口(默认值:1218)
-x <path> 数据库目录,目录不存在会自动创建(例如:/opt/httpsqs/data)
-t <second> HTTP请求的超时时间(默认值:3)
-s <second> 同步内存缓冲区内容到磁盘的间隔秒数(默认值:5)
-c <num> 内存中缓存的最大非叶子节点数(默认值:1024)
-m <size> 数据库内存缓存大小,单位:MB(默认值:100)
-i <file> 保存进程PID到文件中(默认值:/tmp/httpsqs.pid)
-a <auth> 访问HTTPSQS的验证密码(例如:mypass123)
-d 以守护进程运行
-h 显示这个帮助

入队

  • get方式
http://localhost:1218/?name=your_queue_name&opt=put&data=经过URL编码的文本消息&auth=mypass123
  • post方式
http://localhost:1218/?name=your_queue_name&opt=put&auth=mypass123
  • 返回
HTTPSQS_PUT_OK    入队成功
HTTPSQS_PUT_ERROR 入队失败
HTTPSQS_PUT_END 队列已满

出队

  • get方式
http://localhost:1218/?charset=utf-8&name=your_queue_name&opt=get&auth=mypass123
  • post方式
http://localhost:1218/?charset=gb2312&name=your_queue_name&opt=get&auth=mypass123
  • 返回
HTTPSQS_GET_END 没有未读消息

获取状态

  • get方式
http://localhost:1218/?name=your_queue_name&opt=status&auth=mypass123
  • 返回
HTTP Simple Queue Service v1.7
------------------------------
Queue Name: wyq                      队列名
Maximum number of queues: 1000000    最大数
Put position of queue (1st lap): 18  入队位置
Get position of queue (1st lap): 18  出队位置
Number of unread queue: 0            未读数量
  • get方式
http://localhost:1218/?name=your_queue_name&opt=status_json&auth=mypass123
  • 返回json方式
{
"name":"wyq",
"maxqueue":1000000,
"putpos":18,   入队位置
"getpos":18,   出队位置
"putlap":1,    队列写入初始点
"getlap":1,    队列读取初始点
"unread":0     未读数量
}

重置

  • get方式
http://localhost:1218/?name=your_queue_name&opt=reset&auth=mypass123
  • 返回
HTTPSQS_RESET_OK    重置成功
HTTPSQS_RESET_ERROR 重置失败

更改参数

  • 设置最大队列数
http://localhost:1218/?name=your_queue_name&opt=maxqueue&num=1000000000&auth=mypass123
  • 返回
HTTPSQS_MAXQUEUE_OK     更改最大队列数成功
HTTPSQS_MAXQUEUE_CANCEL 操作被取消
  • 设置刷新内存缓冲区到磁盘间隔时间
http://localhost:1218/?name=your_queue_name&opt=synctime&num=10&auth=mypass123
  • 返回
HTTPSQS_SYNCTIME_CANCEL  本次操作被取消
HTTPSQS_SYNCTIME_OK   修改间隔时间成功
 
 
HTTPSQS_AUTH_FAILED 密码校验失败  
HTTPSQS_ERROR  全局错误
 

fedora中安装httpsqs

依赖包

  • libevent事件驱动
sudo yum install libevent  libevent-devel
 
  • tokyocabinet日本人开发的dbm数据库
sudo yum install tokyocabinet  tokyocabinet-devel
 
  • * zlib数据压缩的函数库, bzip2压缩工具
sudo yum install zlib zlib-devel bzip2-devel bzip2 bzip2-libs

安装

  • 下载
wget http://httpsqs.googlecode.com/files/httpsqs-1.7.tar.gz
 
  • 编译安装
make
make install