Archive

Archive for June, 2008

[学习笔记]MPEG-2概要

June 27th, 2008 No comments

MPEG-2概要

MPEG-2是MPEG工作组于1994年发布的视频和音频压缩国际标准。MPEG-2通常用来为广播信号提供视频和音频编码,包括卫星电视、有线电视等。MPEG-2经过少量修改后,也成为DVD产品的核心技术。

MPEG-2的系统描述部分(第1部分)定义了传输流,它用来一套在非可靠介质上传输數位视频信号和音频信号的机制,主要用在广播电视领域。

MPEG-2的第二部分即视频部分和MPEG-1类似,但是它提供对隔行扫描视频显示模式的支持(隔行扫描广泛应用在广播电视领域)。MPEG-2视频并没有对低位元速率(小于1Mbps)进行优化,在3Mbit/s及以上位元速率情况下,MPEG-2明显优于MPEG-1。MPEG-2向后兼容,也即是说,所有符合标准的MPEG-2解码器也能够正常播放MPEG-1视频流。

MPEG-2技术也应用在了HDTV传输系统中。

MPEG-2的第三部分定义了音频压缩标准。该部分改进了MPEG-1的音频压缩,支持两通道以上的音频。MPEG-2音频压缩部分也保持了向后兼容的特点。

MPEG-2的第七部分定义了不能向后兼容的音频压缩。该部分提供了更强的音频功能。通常我们所说的MPEG-2AAC指的就是这一部分。

MPEG-2视频编码概述

MPEG-2视频通常包含多个GOP(GOP = Group Of Pictures),每一个GOP包含多个帧。帧的帧类通常包括I-帧、P-帧和B-帧。其中I-帧采用帧内编码,P-帧采用前向估计,B-帧采用双向估计。

I帧图像采用帧内编码方式,即只利用了单帧图像内的空间相关性,而没有利用时间相关性。
P帧图像中可以包含帧内编码的部分,即P帧中的每一个宏块可以是前向预测,也可以是帧内编码。B帧图像采用双向时间预测,可以大大提高压缩倍数.

MPEG-2的编码码流分为六个层次。为更好地表示编码数据,MPEG-2用句法规定了一个层次性结构。
它分为六层,自上到下分别是:图像序列层、图像组(GOP)、图像、宏块条、宏块、块。

MPEG-2标准文档号码

  • ISO/IEC 13818-1:系统-描述视频和音频的同步和多路技术
  • ISO/IEC 13818-2:视频-视频压缩
  • ISO/IEC 13818-3:音频-音频压缩,包括多通道的MP3扩展。
  • ISO/IEC 13818-4:测试规范
  • ISO/IEC 13818-5:仿真软件
  • ISO/IEC 13818-6:DSM-CC(Digital Storage Media Command and Control)扩展
  • ISO/IEC 13818-7:Advanced Audio Coding (AAC)
  • ISO/IEC 13818-9:实时接口扩展
  • ISO/IEC 13818-10:DSM-CC规范
参考:
  1. http://zh.wikipedia.org/wiki/MPEG-2

–EOF–

Categories: Tech.Notes Tags: ,

Extjs Tree通过递归删除子节点

June 24th, 2008 No comments

Extjs Tree通过递归删除子节点信息:

function removeChildrenRecursively(node) {
    if (!node) return;
    while (node.hasChildNodes()) {
        removeChildrenRecursively(node.firstChild);
        node.removeChild(node.firstChild);
    }
}

参考: http://www.realcoding.net/article/view/4557

Categories: Tech.Notes Tags: ,

javascript对时间格式化

June 17th, 2008 No comments

JavaScript通过原型函数的封装对時間格式化函數:

<script>
    Date.prototype.format = function(format)
    {
        var o = {
            "M+" : this.getMonth()+1, //month
            "d+" : this.getDate(),    //day
            "h+" : this.getHours(),   //hour
            "m+" : this.getMinutes(), //minute
            "s+" : this.getSeconds(), //second
            "q+" : Math.floor((this.getMonth()+3)/3), //quarter
            "S" : this.getMilliseconds() //millisecond
        }
        if(/(y+)/.test(format)) {
            format=format.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
        }

        for(var k in o) {
            if(new RegExp("("+ k +")").test(format)) {
                format = format.replace(RegExp.$1, RegExp.$1.length==1 ? o[k] : ("00"+ o[k]).substr((""+ o[k]).length));
            }
        }
        return format;
    }

    showtime = new Date().format("yyyy-MM-dd hh:mm:ss");

    alert(showtime);
</script>

参考: http://www.javaeye.com/topic/183162

Categories: Tech.Notes Tags:

vim-tips

June 14th, 2008 No comments

1   注释

a 单行注释:

0 行首
插入注释符

b 多行注释:

:m,ns/^/#/g
命令(:)从当前行(m)开始到(,)当前行的第n行(n),把行首标志(^)全部(g)替换(s) 成#(#)。
当前行可用 (.)表示。
#部分可以换成你自己想要注释符

如: java: // 可以转化为\/\/
    :m,ns/^/\/\//g

c 块注释一:

0 跳到行首
C-v 可视块模式
jjj 下移3行(即打算在这3行价注释)
I 进入插入模式(实际上是shift+i)
# 注释

再ESC一下,半秒过后就发现Visual Block的头部都出现#了!

d 块注释二:

Shift V 选中要修改的行,然后按::
:s/^/#/g

在用vi工作的时候用正则表达式,也是一件愉快的事。

另外,把选中行的前面#删除::

    :s/^#//g

Categories: Tech.Notes Tags: ,

django REMOTE_ADDR on nginx

June 14th, 2008 No comments

1   现象

  1. Django 取得客户端IP,在本地测试良好,但是放到服务器上报错, 报错信息:

    Request Method:     POST
    Request URL:        http://www.b0rder.com/blog/8/comment/
    Exception Type:     KeyError
    Exception Value:    'REMOTE_ADDR'

错误代码:

remoteIP = request.META['REMOTE_ADDR']
  1. 服务器采用 nginx fastcgi 方式.

1.1   分析原因

  1. 报错信息KeyError,说明服务器中没有 ‘REMOTE_ADDR’, 但是我在服务器中通过 Django 自带的服务器运行正常显示:

    python manage.py runserver 7000
  2. 原因可能是 nginx 配置的问题。Google了一圈发现没有把fastcgi转换过来:

    fastcgi_param REMOTE_ADDR $remote_addr;
    fastcgi_param SERVER_PROTOCOL $server_protocol;
    fastcgi_param SERVER_PORT $server_port;
    fastcgi_param SERVER_NAME $server_name;

1.2   解决

  1. 可以通过 nginx 的 include 简单处理:

    include /etc/nginx/fcgi.conf

1.3   我的nginx配置文件

server {
    listen 80;
    server_name www.b0rder.com b0rder.com;
    location ^~ /static  {
        alias /home/border/project/blog-app/media/;
        }
    location ^~ /media  {
        alias /home/border/lib/django/django/contrib/admin/media/;
        }
    location ^~ /books  {
        alias /home/border/books/;
        autoindex on;
        }
    location / {
        fastcgi_pass 127.0.0.1:9999;
        fastcgi_param PATH_INFO $fastcgi_script_name;
        fastcgi_param REQUEST_METHOD $request_method;
        fastcgi_param QUERY_STRING $query_string;
        fastcgi_param CONTENT_TYPE $content_type;
        fastcgi_param CONTENT_LENGTH $content_length;
        fastcgi_pass_header Authorization;
        fastcgi_param REMOTE_ADDR $remote_addr;
        fastcgi_param SERVER_PROTOCOL $server_protocol;
        fastcgi_param SERVER_PORT $server_port;
        fastcgi_param SERVER_NAME $server_name;
        fastcgi_intercept_errors off;
        }
    access_log  /home/border/log/access.b0rder.log;
    error_log  /home/border/log/error.b0rder.log;
    }

1.4   感谢

  1. 感谢 Vingel (http://www.vingel.com/) 的友情支持。

–EOF–

Categories: Tech.Notes Tags: ,