• 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模块,也可以拖动播放.

  • 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开机启动

    • 示例脚本
      在/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
    
  • debian中vim显示中文出现乱码

    在/etc/vim/vimrc中添加配置

    set termencoding=utf-8
    set encoding=utf-8