<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    from : http://www.cnblogs.com/chagel/archive/2009/02/01/1381820.html   附評論

    最近在論壇閑逛,先后參與了兩題算法趣味題目。

    1. 題目1是要求算一任意長度字符串中不同的字符以及它的個數。
    2. 題目2是把一段字符串用“右起豎排”的古文格式輸出。

    題目難度不大,都是針對字符串的操作,邏輯比較簡單,靈活在對不同語言、語法的掌握程度。(原文分別在:12。)

    看了大家用C++、C#、Java等語言的實現,總感覺牛刀殺雞太麻煩,有興趣的朋友可以自己寫寫看或者直接看原文的網友回復。我最近一段時間Python寫的比較多,讀到這些題目時候,就有一種躍躍欲試的沖動。因為我知道用Perl,Python,Ruby等動態語言來做這類題目,會是非常理想的。后來我做了這兩道題目,結果也令人滿意,代碼之簡潔保持在所有答案的前列。

    先看第一題Python解答:

    dic = {}
    for s in "abcdefgabc":
    dic[s] = 1 if s not in dic else (dic[s]+1)
    print '\n'.join('%s,%s' % (k, v) for k, v in dic.items())

    輸出結果:

    a,2
    c,2
    b,2
    e,1
    d,1
    g,1
    f,1

    Python的四行代碼分別做了dictionary的聲明,賦值,字符串的遍歷,以及高效拼接。

    如果還沒有看出它的簡潔和強大的話,請看第二題的解法:

    def main(offset=6):
        string = u'靜夜思 李白床前明月光,疑似地上霜。舉頭望明月,低頭思故鄉。090131'
    a = [[' ']*offset for row in xrange(offset)]
    for i in xrange(offset):
    for j in xrange(offset):
    a[i][j] = string[j + i*offset]
    b = [[r[col] for r in a[::-1]] for col in xrange(len(a[0]))]
        print '\n'.join([u'┊'.join(unicode(c) for c in row)for row in b])

    輸出結果:

    0┊低┊舉┊疑┊床┊靜
    9┊頭┊頭┊似┊前┊夜
    0┊思┊望┊地┊明┊思
    1┊故┊明┊上┊月┊
    3┊鄉┊月┊霜┊光┊李
    1┊。┊,┊。┊,┊白

    這題如果用C#等實現,代碼要在20行以上。下面我簡單介紹一下這幾行代碼:

    1. 第3行,在Python里面二維“數組”通過嵌套list來實現,這里初始化一個6行6列的二維數組;
    2. 第7行,我們把“矩陣”順時針旋轉了90度(行列置換,并且對置換后的行首尾對調-這里的::-1就是用來置換一個list的trick);
    3. 最后一行,我們把數組里的每行中元素,每行之間分別用兩個不同字符拼接起來。join方法以及for..in..語句在python中是相當常見的用法。

    通過這兩題,我們看到Python在處理字符串時候的十分靈活方便,雖然一種語言的好壞不應完全靠是否簡潔來衡量,但對于我個人而言,Python是目前我用過的最好的語言。而且對于趣味題來說,這不就是我們解題的趣味所在嗎?

    Tag標簽: python
    Posted on 2009-02-01 07:01 Chagel 閱讀(1328) 評論(14)  編輯 收藏 網摘

    Feedback

    #1樓    回復  引用  查看    

    2009-02-01 09:50 by Jeffrey Zhao      
    從CSDN的趣味題學C# 3.0
    http://www.cnblogs.com/JeffreyZhao/archive/2009/02/01/1381867.html

    #3樓    回復  引用  查看    

    2009-02-01 10:24 by JimLiu      
    老趙的代碼不錯,我改進下
    第二個
    static void Count(string message) {
    message
    .GroupBy(c => c)
    .ToList()
    .ForEach(p => Console.WriteLine("{0}, {1}", p.Key, p.Count()));
    }

    這樣似乎更爽一些,呵呵

    #4樓    回復  引用  查看    

    2009-02-01 10:26 by Jeffrey Zhao      
    @JimLiu
    那個select的確可以省,我是習慣于先搞出數據來,然后添加行為,而不是在行為里繼續計算

    #5樓    回復  引用  查看    

    2009-02-01 10:34 by JimLiu      
    @Jeffrey Zhao
    呵呵,是因為先select了好重復用吧,習慣問題,我的喜歡就根據題目變化。

    #5樓    回復  引用    

    2009-02-01 11:59 by young5335 [未注冊用戶]
    a="abcdefgabc"
    myset=set(a)
    for s in myset:
    print(str(a.count(s))+" "+s)

    2 a
    2 c
    2 b
    1 e
    1 d
    1 g
    1 f

    #6樓    回復  引用    

    2009-02-01 13:24 by young5335 [未注冊用戶]
    import math
    colSize=6
    string="靜夜思 李白床前明月光,疑似地上霜。舉頭望明月,低頭思故鄉。0901311"
    iLen=math.ceil(len(string)/colSize)
    l=list(reversed(([string[i*colSize:i*colSize+colSize].ljust(colSize,' ') for i in range(0,iLen)])))
    for i in range(colSize):
    for j in range(iLen):
    print(l[j][i],end=" ")
    print()

    python語法我真的快忘光光了.

    #7樓    回復  引用    

    2009-02-01 13:28 by young5335 [未注冊用戶]
    要改成跟樓主一樣的分隔符,把end="┊"

    #8樓    回復  引用    

    2009-02-01 13:44 by young5335 [未注冊用戶]
    PHP的:
    $a="abcdefgabc";
    $result=count_chars($a,1);
    array_walk($result,create_function('$v,$k','echo chr($k)." ".$v."<br/>";'));

    a 2
    b 2
    c 2
    d 1
    e 1
    f 1
    g 1

    #9樓    回復  引用  查看    

    2009-02-02 00:00 by Icebird      
    JavaScript:

    var s = "hello";
    var arr = s.split('');
    var o = {};
    var c;
    for (var i = 0; i < arr.length; i++)
    {
    o[arr[i]] = (o[arr[i]] ? o[arr[i]] : 0) + 1;
    }

    var result = "";
    for (var p in o)
    {
    result += p + ", " + o[p] + "\r\n";
    }

    alert(result);

    #10樓    回復  引用    

    2009-02-02 10:22 by 賴勇浩 [未注冊用戶]
    >>> from collections import defaultdict
    >>> adict = defaultdict(int)
    >>> for s in "abcdefgabc":
    ... adict[s] += 1
    ...
    >>> print '\n'.join('%s,%s' % (k, v) for k, v in adict.iteritems())
    a,2
    c,2
    b,2
    e,1
    d,1
    g,1
    f,1

    #11樓    回復  引用    

    2009-02-02 11:21 by young5335 [未注冊用戶]
    a="abcdefgabc"
    b={}
    a.each_char { |x|b.store(x,a.count(x)) }
    b.each {|k,v| puts k+" "+v.to_s}

    #12樓    回復  引用    

    2009-02-02 15:18 by hehehe [未注冊用戶]
    試試Groovy:

    ('abcdefgabc' as List).groupBy{it}.each{k, v -> println "$k, ${v.size()}"}

    #13樓    回復  引用    

    2009-02-02 15:37 by hehehe [未注冊用戶]
    試試Groovy(第二題):

    def a = '床前明月光 疑似地上霜 舉頭望明月 低頭思故鄉'.tokenize(' ')

    5.times{row ->
    println a.collect{it[row]}.reverse().join('|')
    }


    低|舉|疑|床
    頭|頭|似|前
    思|望|地|明
    故|明|上|月
    鄉|月|霜|光

    #14樓    回復  引用    

    2009-02-02 16:04 by zealtea [未注冊用戶]
    txt = u"靜夜思 李白床前明月光,疑似地上霜。舉頭望明月,低頭思故鄉。"
    offset = 6

    a =[i[::-1] for i in zip(*[txt[i:i+offset] for i in range(0, len(txt), offset)])]

    for i in a:
    print "|".join(i)
    posted @ 2009-02-04 10:45 小馬歌 閱讀(269) | 評論 (0)編輯 收藏
     
    from : http://www.cnblogs.com/slfyeye/articles/1098890.html

    Linux是GNU/Linux的縮寫,通常指各種Linux發行版的通稱。
    常見的Linux廠家主要有Redhat/Novell等。

    Redhat有兩大Linux產品系列,其一是免費的Fedora Core系列
    主要用于桌面版本,提供了較多新特性的支持。
    另外一個產品系列是收費的Enterprise系列,這個系列分成:AS/ES/WS等分支。

    Advanced Server,縮寫即AS。AS在標準Linux內核的基礎上,
    做了性能上的增強,并提高了可靠性,集成了眾多常見服務器的驅動程序。
    可輕松識別IBM/DELL/HP等常見機架式服務器的磁盤陣列卡等設備。

    AS主要版本2.x/3.x/4.x,也就是我們所說的AS3/AS4
    每一個版本還有若干個升級,例如最早推出的AS4后,遇到了一些更新
    此時就會發布AS4 Update1,以后還會陸續有AS4 Update2/Update3等出現
    簡稱AS4u1/AS4u2/AS4u3等。這和微軟的發布形式也是非常類似的,
    微軟的Windows NT4 從SP1出到SP6,Windows2000從SP1出到SP4。。。。

    AS這些Update版本所包含的主要程序包版本都有一定差別,最好不要混用
    否則很容易出現問題。Prima和Plesk的安裝包,對于各種發行版都有了針對性的設計
    在下載頁面上,通常都會標識出來,支持哪些版本和哪些update的系統。

    ES,是AS的精簡版本。他與常見的AS系列的區別是,AS支持到4路以上CPU,
    而ES只能支持兩路CPU。AS和ES在大多數程序包上并無區別,
    只在內核等少數軟件包上有差異。
    AS和ES的售價差別比較大,通常ES用在隨服務器一同購買的OEM版本中
    例如購買DELL服務器,搭配的Linux會是ES系列。
    如果要搭配AS系列,則需要多花數千元。

    WS,是ES的進一步簡化版,主要針對企業內部的桌面辦公市場,國內較少采用。

    Redhat的Fedora Core Linux和Enterprise Linux,都需要遵循GNU協議
    即需要發布自己的源代碼。
    所以,對于免費的Fedora Core Linux,從Redhat網站上可以直接下載ISO刻盤,
    還能下載到SRPM的ISO,即程序包源碼光盤。
    對于收費的Enterprise Linux系列,是一款商業產品,所以網站上不能下載到ISO文件,
    需要購買正式授權方可。
    由于Enterprise Linux也需要遵循GNU協議,故必須發布源代碼。
    所以在Redhat的網站上,可以獲得AS/ES/WS系列的SRPM源碼ISO文件。
    這些文件可以被自由的下載,修改代碼,重新編譯使用。

    一個名為Community Enterprise Operating System的項目誕生了。
    他的縮寫既是CentOS。CentOS社區將Redhat的網站上的所有源代碼下載下來,
    進行重新編譯。重新編譯后,由于AS/ES/WS是商業產品,
    必須將所有Redhat的Logo和標識改成自己的CentOS標識。
    比如將AS4原版的SRPM源碼編譯后,就成為了CentOS 4.0。
    AS4Update1的源碼編譯后,就成為了CentOS4.1。
    AS4Update2的源碼編譯后,就成為了CentOS4.2。
    同理,CentOS的3.x/4.x都對應著相應的版本。

    所以我們說,CentOS就是Redhat的AS/ES/WS的免費版本。
    使用CentOS,可以獲得和AS/ES相同的性能和感受。
    CentOS除了提供標準的編號1~4或者1~5的若干張ISO以外,
    還提供了最小化1CD的Server光盤。用Server光盤安裝好的系統,
    就是一個最小化的Linux內核加上常用的httpd/mysql等包
    不包含Xwindows桌面等對于服務器無用的軟件。

    Prima、Plesk、Virtuozzo和都可以安裝在CentOS上。

    學習CentOS的好地方:http://www.centospub.com/make.html

    posted @ 2009-02-04 10:42 小馬歌 閱讀(1151) | 評論 (0)編輯 收藏
     

    from: http://www.cnbeta.com/articles/52977.htm
    獨特的開發模式造就了今天百家爭鳴的Linux,各個發行版的名字都代表哪些含義呢?下面是一些常用的版本,感興趣的朋友一起來看:
    1-Ubuntu 這或許是今天最常見的一個Linux發行版了,Ubuntu是一個南非的民族觀念,著眼于人們之間的忠誠和聯系。該詞來自于祖魯語和科薩語。大意是“人道待人”(對他人仁慈)。另一種翻譯是:“天下共享的信念,連接起每個人”。

    2-PCLinuxOS
    三十種Linux發行版的名稱含義

    很明顯它的名稱是PC+Linux+Operating System組合在一起,擁有類似Windows的圖形用戶界面,方便用戶從Windows轉向Linux。

    3-openSUSE

    openSUSE由AMD和Novell共同發起,SUSE是德語“Software-und System-Entwicklung”的縮寫(software and system development)。另有一說是為了紀念德國計算機工先驅Konrad Zuse。

    4-Fedora

    Fedora由Red Hat發起,正是Red Hat標志中人物所戴的那頂帽子。

    5-Mandriva
     三十種Linux發行版的名稱含義

    在以前稱為Mandrake,并由MandrakeSoft公司進行維護。當MandrakeSoft輸掉了與Hearst Corporation爭奪Mandrake名稱的官司,并收購了Connectiva后,名稱變為了Mandriva。


    6-Sabayon
    三十種Linux發行版的名稱含義

    一種意大利甜點,也叫Zabaglion,用蛋黃、糖等原料烹飪而成。
    三十種Linux發行版的名稱含義


    7-Debian

    這個名字是Ian Murdock在1998年取的,由當初是女朋友現在是妻子的Debra和他的名字混合而來。


    8-Damn Small Linux
    三十種Linux發行版的名稱含義

    像它的名字所說那樣,這個Linux發行版體積只有50MB。


    9-MEPIS
    三十種Linux發行版的名稱含義

    根據創始人Warren Woodford所說,這個名字最初沒有任何含義,只是由于朋友在Skype上誤聽得來的名字。

    10-CentOS
    三十種Linux發行版的名稱含義

    CentOS基于Red Had Enterprise Linux(RHEL),代表Community Enterprise Operationg System。

    11-Dreamlinux
    三十種Linux發行版的名稱含義

    這是一個巴西的Linux發行版,基于Debian,外觀類似蘋果的Mac OS X,名字就像介紹中說的那樣。

    12-Puppy Linux
    三十種Linux發行版的名稱含義

    一種小型的Live CD系統,目標是簡單易用,吉祥物是墨西哥小狗吉娃娃。
    三十種Linux發行版的名稱含義


    13-Kubuntu

    KDE + Ubuntu的產物

    14-Zenwalk
    三十種Linux發行版的名稱含義

    有禪意的名字,不過根據創始人JP Guillemin所說,這個名字是從發音和含義兩個方面模仿Neststep操作系統所起。

    15-Slackware

     
    創始人是Patrick Volkerding,最初是個人項目,這個名字借用自Church of the SubGenius中的術語 "Slack"。

    16-Knoppix

    著名的Live CD發行版,基于Dedian,創始人是Klaus Knopper并以此命名。

    17-Gentoo
    三十種Linux發行版的名稱含義

    Gentoo是一種體型小巧的企鵝,據說是企鵝中游泳速度最快的一種。

    18-Slax
    三十種Linux發行版的名稱含義

    一種基于Slackware的live CD發行版,它的名稱并沒有特別含義。

    19-Sidux

    基于Debian尚不穩定,代號“Sid”的一支,名稱來自玩具總動員中的角色Sid Phillips。

    20-Ubuntu Studio
    三十種Linux發行版的名稱含義

    Ubuntu的派生,以多媒體應用為主。

    21-Xubuntu
    三十種Linux發行版的名稱含義

    XFCE + Ubuntu的產物

    22-Foresight
    三十種Linux發行版的名稱含義

    Foresight使用Conary作為包管理器,據稱,不像大多數發行版一年兩次升級那樣,它采用滾動升級的方式。

    23-Red Hat

    下面創始人之一的Bob Young為您解釋其中含義:


     

    24-OpenGEU
    三十種Linux發行版的名稱含義

    OpenGEU最初稱為Geubuntu,使用Gnome和Enlightenment作為桌面管理器。

    25-Elive


     

    從圖標中也可以看出這同樣是一款采用Enlightenment作為窗口管理器的發行版,它是基于Debian的Live Cd。

    26-Freespire
    三十種Linux發行版的名稱含義

    微軟2千萬美元買下了“Lindows”這個名字后,Lindows更名為Linspire,Freespire是基于Linspire的源碼的Live CD版本。

    27-Fluxbuntu
    三十種Linux發行版的名稱含義

    又是Ubuntu的派生版,采用Fluxbox作為窗口管理器。

    28-Xandors

    X代表X Windows系統,Andros是希臘的島名。

    29-TinyME

    是PCLinuxOS的一個輕量級版本,所以稱為Tiny。

    30-gOS
     三十種Linux發行版的名稱含義

    同樣也是一個基于Ubuntu的版本,以集成了眾多Google程序而聞名。不過這里的“g”并不是代表Goolge,也不是Green,而是代表它背后的Good OS LLC公司。

    關于更詳細的信息請參考:hehe2.net/linux-general/etymology-of-a-linux-distro/

    posted @ 2009-02-04 10:35 小馬歌 閱讀(178) | 評論 (0)編輯 收藏
     
    from:http://hi.baidu.com/di6yuansu/blog/item/87c11c2473cb322cd50742d6.html

    1、HTTP協議本身是無狀態的。
       我們上網都要靠HTTP協議傳遞信息。比如我們在瀏覽器里鍵入:www.bokee.com這個網址并回車,你會發現網址會變成:http://www.bokee.com,其原因就是瀏覽的網頁是基于http協議的。http協議無法記錄用戶經常上哪些網站,有什么愛好,也無法記錄用戶的ID帳號和密碼。這就是所謂的HTTP協議無狀態。HTTP協議本身是無狀態的,這與HTTP協議本來的目的是相符的,客戶端只需要簡單的向服務器請求下載某些文件,無論是客戶端還是服務器都沒有必要紀錄彼此過去的行為,每一次請求之間都是獨立的,好比一個顧客和一個自動售貨機或者一個普通的(非會員制)大賣場之間的關系一樣,你認得它們,它們則肯定認不得你。

    2、怎樣理解cookie和session?
       由于cookie和session關系密切,這里我們一并介紹。
       打個比方:在河南時,我常到一家熟食店買饞嘴鴨,該店老板為了促進銷售,特發布“每購滿10只即可免費贈送一只”的優惠措施。除了家里有什么紅白喜事要饗客之外,應該不會有人一次性購買10只烤鴨吧?所以老板得想個法子來記錄顧客的消費數量,這里總共有三種方案:
       Ⅰ、老板記住每一個顧客的消費數量,等到顧客消費滿10只的時候自動奉送一只。這好比HTTP協議本身是有狀態的,可以記住顧客的活動行為。但遺憾的是,出于種種考慮http協議本身是不能有狀態的,老板自個也沒有這么超常的記憶力,故這種方案行不通!
       Ⅱ、老板發給顧客一張積分卡,上面記錄著消費的數量,一般還有個有效期限。每次買烤鴨時,如果顧客出示這張卡片,老板就知道這位顧客曾經光顧過小店。這種做法就是在客戶端保持狀態,好比是cookie技術。打開(windows系統)C:\Documents and Settings\用戶名\Cookies,你會發現一些*.txt格式的小文件,這就是你瀏覽某些網站,它們發給你的“積分卡”(cookies)。
       Ⅲ、老板發給顧客一張會員卡,除了卡號之外什么信息也不紀錄,每次買烤鴨時,如果顧客出示該卡片,則老板搬出店里的劃名冊,找到你的卡號并加1個積分。這種做法就是在服務器端保持狀態。
    好比是session技術。
         cookie和session最大的區別在于: cookie是把積分卡發給顧客,上面記錄了顧客所有的消費信息。Session則是把只有卡號(session id)的積分卡發給顧客,自家記錄了顧客所有的消費信息。Cookie是保存在客戶端的;session是保存在服務器端,而session id則是保存在客戶端,通常也是一個cookie小文件,由于這個小文件除了session id(好比卡號)外什么也沒有,因此比cookie安全多了。

    3、cookie和session有什么用?
       常見的用法,比如在有些網站下載東西需要會員先登陸。http協議本身是無狀態的,無法得知顧客是否已經登陸,怎么辦呢?cookie和session就可以知道。再比如網上購物,購物車怎么知道顧客挑選過哪些商品呢?cookie和session也可以記錄。總而言之,cookie和session就是能夠記錄顧客狀態的技術,盡管二者屬于不同的技術,但只要cookie能做到的,session也能做到!

    COOKIE攻略

     

    1、什么是cookie?
    0Cookie技術是一個非常有爭議的技術,自經誕生它就成了廣大網絡用戶和Web開發人員的一個爭論焦點。有一些網絡用戶,甚至包括一些資深的Web專家也對它的產生和推廣感到不滿,這倒不是因為Cookie技術的功能太弱或別的技術性能上的原因,而僅僅是因為他們覺得Cookie的使用,對網絡用戶的隱私構成了危害。因為Cookie是由Web服務器保存在用戶瀏覽器上的小文本文件,它包含有關用戶的信息(如身份識別號碼、密碼、用戶在Web站點上購物的方式或用戶訪問該站點的次數)。
        那么Cookie技術究竟怎樣呢?是否真的給網絡用戶帶來了個人隱私的危害呢?還是讓我們看了下面的內容,再做回答吧。
          在WEB技術發展史上,Cookie技術的出現是一個重大的變革。最先是Netscape在它的Netscape Navigator 瀏覽器中引入了Cookie技術,從那時起,World Wide Web 協會就開始支持Cookie標準。以后又經過微軟的大力推廣(因為微軟的IIS Web服務器所采用的ASP技術很大程度的使用了Cookie技術),即在微軟的Internet Explorer瀏覽器中完全支持Cookie技術。到現在,絕大多數的瀏覽器都支持Cookie技術,或者至少兼容Cookie技術的使用。
          按照Netscape官方文檔中的定義,Cookie是在HTTP協議下,服務器或腳本可以維護客戶工作站上信息的一種方式。Cookie是由Web服務器保存在用戶瀏覽器上的小文件,它可以包含有關用戶的信息(如身份識別號碼、密碼、用戶在Web站點購物的方式或用戶訪問該站點的次數)。無論何時用戶鏈接到服務器,Web站點都可以訪問Cookie信息。
       如果你使用的是windows系統,那么請打開C:\Documents and Settings\用戶名\Cookies,你會發現該目錄下有好多*.txt格式的小文件。那就是cookie文件。當然,在該目錄下你也可能什么都發現不了,那時因為你新裝了系統或者從未瀏覽過因特網,也或者你的瀏覽器禁用了cookie。否則該目錄下總會有點東西的。
         通俗地講,瀏覽器用一個或多個限定的文件來支持Cookie。這些文件在使用Windows操作系統的機器上叫做Cookie文件,在Macintosh機器上叫做magic Cookie 文件,這些文件被網站用來在上面存儲Cookie數據。網站可以在這些Cookie文件中插入信息,這樣對有些網絡用戶就有些副作用。有些用戶認為這造成了對個人隱私的侵犯,更糟的是,有些人認為Cookie是對個人空間的侵占,而且會對用戶的計算機帶來安全性的危害。
         目前有些Cookie是臨時的,另一些則是持續的。臨時的Cookie只在瀏覽器上保存一段規定的時間,一旦超過規定的時間該Cookie就會被系統清除。例如在PHP中Cookie被用來跟蹤用戶進程直到用戶離開網站。持續的Cookie則保存在用戶的Cookie文件中,下一次用戶返回時,仍然可以對它進行調用。
         在Cookie文件中保存Cookie,一些用戶會過分地認為這將帶來很大的問題。主要是有些用戶擔心Cookie會跟蹤用戶網上沖浪的習慣,譬如用戶喜愛到那些類型的站點、愛從事些什么活動等。害怕這種個人信息一旦落入一些別有用心的家伙手中,那么個人也就可能成為一大堆廣告垃圾的對象,甚至遭到意外的損害。不過,這種擔心壓根兒不會發生,因為網站以外的用戶是無法跨過網站來獲得Cookie信息的。所以想以這種目的來應用Cookie是不可能的。不過,由于一些用戶錯誤的理解以及“以訛傳訛”,一些瀏覽器開發商別無選擇,只好作出相適的響應(例如Netscape Navigator4.0和Internet Explorer3.0都提供了屏蔽Cookie的選項)。 個人認為,無風不起浪,如果網站程序員沒有嚴謹思路的話,cookie確實也存在些許安全問題,不過這些瑕疵并不足以掩蓋cookie的優秀品質,大多數人還是非常樂意使用它的。
         對Cookie技術期待了這么久的結果是,迫使許多瀏覽器開發商在它們的瀏覽器中提供了對Cookie的靈活性控制功能。例如,目前的兩大主流瀏覽器Netscape Navigator 和 Internet Explorer是這樣處理Cookie的:Netscape Navigator4.0不但可以接受Cookie進行警告,而且還可以屏蔽掉Cookie;InternetExplorer3.0也可以屏蔽Cookie,但在Internet Explorer4.0中就只能進行接受警告而沒有提供屏蔽選項,不過在Internet Explorer4.0之后的更新版本中又加入了屏蔽Cookie的功能選項。
         此外,很多最新的技術甚至已經可以在不能屏蔽Cookie的瀏覽器上進行Cookie的屏蔽了。例如,可以通過將Cookie文件設置成不同的類型來限制Cookie的使用。但是,非常不幸地是,要是你想完全屏蔽Cookie的話,肯定會因此拒絕許多的站點頁面。因為當今已經有許多Web站點開發人員愛上了Cookie技術的強大功能,例如Session對象的使用就離不開Cookie的支持。


    2、Cookie工作原理?
        當客戶訪問某個基于PHP技術的網站時,在PHP中可以使用setcookie函數生成一個cookie,系統經處理把這個cookie發送到客戶端并保存在C:\Documents and Settings\用戶名\Cookies目錄下。cookie是 HTTP標頭的一部分, 因此setcookie函數必須在任何內容送到瀏覽器之前調用。這種限制與header()函數一樣(如需了解head()函數,請自行查閱)。當客戶再次訪問該網站時,瀏覽器會自動把C:\Documents and Settings\用戶名\Cookies目錄下與該站點對應的cookie發送到服務器,服務器則把從客戶端傳來的cookie將自動地轉化成一個PHP變量。在PHP5中,客戶端發來的cookie將被轉換成全局變量。你可以通過$_COOKIE[‘xxx’]讀取。

         盡管今天仍有一些網絡用戶對于Cookie的爭論樂此不倦,但是對于絕大多數的網絡用戶來說還是傾向于接受Cookie的。因此,我們盡可以放心地使用Cookie技術來開發我們的WEB頁面。

    3、Cookie常見函數
    ● SetCookie 函數創建了一個Cookie,并且把它附加在HTTP頭的后面。必須注意的一點是:Cookie是HTTP協議頭的一部分,用于瀏覽器和服務器之間傳遞信息,所以必須在任何屬于HTML文件本身的內容輸出之前調用SetCookie函數,調用該函數前即使有空格、空白行都不行。如果setCookie()認了第二,就沒有哪個元素敢認第一。使用setcookie()函數的前提是客戶瀏覽器支持cookie,如果客戶將之禁用的話,setcookie()也就英雄無用武之地了。
       int SetCookie(string name, string value, int expire, string path, string domain, int secure,bool httponly);  
    參數說明:
       name;設置cookie變量的名稱。
       value;設置cookie的值。
       expire;設置cookie過期時間。如果要把cookie保存為瀏覽器進程,即瀏覽器關閉后就失效。那么可以直接把expiretime設為0。Eg:setcookie(“name”,”value”,0)。該參數不設置的話,關閉瀏覽器也能結束一個cookie。
        path:表示web服務器上的目錄,默認為被調用頁面所在目錄. 這里還有一點要說明的,比如你的站點有幾個不同的目錄(比如一個購物目錄,一個論壇目錄),那么如果只用不帶路徑的Cookie的話,在一個目錄下的頁面里設的Cookie在另一個目錄的頁面里是看不到的,也就是說,Cookie是面向路徑的。實際上,即使沒有指定路徑,WEB服務器會自動傳遞當前的路徑給瀏覽器的,指定路徑會強制服務器使用設置的路徑。解決這個問題的辦法是在調用SetCookie時加上路徑和域名,域名的格式可以是“http://www.phpuser.com/”,也可是“.phpuser.com”。 SetCookie函數里表示value的部分,在傳遞時會自動被encode,也就是說,如果value的值是“test value”在傳遞時就變成了“test%20value”,跟URL的方法一樣。當然,對于程序來說這是透明的,因為在PHP接收Cookie的值時會自動將其decode。

        domain:cookie可以使用的域名,默認為被調用頁面的域名。這個域名必須包含兩個".",所以如果你指定你的頂級域名,你必須用".mydomain.com" 。設定域名后,必須采用該域名訪問網站cookie才有效。如果你使用多個域名訪問該頁,那么這個地方可以為空或者訪問這個cookie的域名都是一個域下面的。
        secure:如果設為"1",表示cookie只能被用戶的瀏覽器認為是安全的服務器所記住。
        除了name之外所有的參數都是可選的。value,path,domain三個參數可以用空字符串""代換,表示沒有設置;expire 和 secure兩個參數是數值型的,可以用0表示。expire參數是一個標準的Unix時間標記,可以用time()或mktime()函數取得,以秒為單位。secure參數表示這個Cookie是否通過加密的HTTPS協議在網絡上傳輸。
        httponly:如果設為1,則表示cookie只能被http協議所使用,任何腳本語言,比如javascrīpt是不能獲取PHP所創建的cookie的,這就有效削弱了來自XSS的攻擊。(注意了:這是PHP5才有的選項,咱也沒有用過。看了官方手冊嘗試著翻譯的,如有疑問,請參考官方手冊。)
       當前設置的Cookie不是立即生效的,而是要等到下一個頁面或刷新后才能看到.這是由于在設置的這個頁面里Cookie由服務器傳遞給客戶瀏覽器,在下一個頁面或刷新后瀏覽器才能把Cookie從客戶的機器里取出傳回服務器的原因。

    小道消息

    16歲德國學生通過cookie破解Hotmail
        德國16歲學生Adriaan Graas對于網絡安全以及Web開發很有興趣,他還發現了Hotmail破解之道。在一周多之后的今天,微軟還未修復該漏洞。
        這名小黑客的想法很簡單,當用戶登陸Hotmail時,系統將會生成一個cookie方便下次登陸。由于該cookie并未綁定IP,因此黑客可以假冒這些cookie并用于登陸,甚至不需要知道受害人的密碼甚至email地址。通過XSS黑客可以插入一段javascrīpt代碼,利用log scrīpt將cookie發送到某個web服務器,腳本可以通過PHP,ASP,CGI等語言編寫。

    Cookie應用案例:
    ●創建一個cookie:
    SetCookie()
    ●創建cookie數組:
    其一:
    SetCookie("CookieArray[]", "Value 1");
    SetCookie("CookieArray[]", "Value 2");
    其二:
    SetCookie("CookieArray[0]", "Value 1");
    SetCookie("CookieArray[1]", "Value 2");
    ● 接收和處理Cookie

    PHP對Cookie的接收和處理的支持非常好,是完全自動的,跟GET,POST變量的原則一樣,特別簡單。
    比如設置一個名為MyCookier的Cookie,PHP會自動從WEB服務器接收的HTTP頭里把它分析出來,并形成一個可直接使用的全局變量,名為$_COOKIE[‘MyCookie’],這個變量的值就是Cookie的值。數組同樣適用。
    分別舉例如下:(假設這些都在以前的頁面里設置過了,并且仍然有效)
    echo $_COOKIE[‘MyCookie’];
    取出cookie數組的例子:
    <?php
    // 創建一個cookie數組
    setcookie("cookie[three]", "cookiethree");
    setcookie("cookie[two]", "cookietwo");
    setcookie("cookie[one]", "cookieone");
    // 頁面刷新之后,用foreach提取cookie數組。
    if (isset($_COOKIE['cookie'])) {
    foreach ($_COOKIE['cookie'] as $name => $value) {
       echo "$name : $value <br />\n";
    }
    }
    ?&gt;
    就這么簡單。
    刪除Cookie
        要刪除一個已經存在的Cookie,有兩個辦法:
    1、調用只帶有name參數的SetCookie,那么名為這個name的Cookie將被從關系戶機上刪掉;
    setcookie(“MyCookie”); //刪除MyCookie。
    2、設置Cookie的失效時間為time()或time()-1//time()減多少沒有關系啦,只要是過期時間就行//,那么這個Cookie在這個頁面的瀏覽完之后就被刪除了(其實是失效了)。例如:
        setcookie(“MyCookie”,”Value”,time()-1); //刪除MyCookie。
    要注意的是,當一個Cookie被刪除時,它的值在當前頁在仍然有效的。
        如果要把cookie保存為瀏覽器進程,即瀏覽器關閉后就失效。那么可以直接把expiretime設為0。例如:setcookie(“name”,”value”,0)。該參數不設置的話,關閉瀏覽器也能結束一個cookie。

    Cookie注意事項
    1、SetCookie()之前不能有任何html輸出,它認了第二,沒有哪個元素敢認第一,就是空格,空白行都不行。
    2、SetCookie()后,你在當前頁調用echo $_COOKIE["name"]不會有輸出。必須刷新或到下一個頁面才可以看到Cookie值。原因很簡單。SetCookie()執行之后,往客戶端發送一個cookie,你不刷新或瀏覽下一個頁面,客戶端怎么把cookie給你送回去呀?瀏覽器創建了一個Cookie后,對于每一個針對該網站的請求,都會在Header中帶著這個Cookie;不過,對于其他網站的請求Cookie是絕對不會跟著發送的。而且瀏覽器會這樣一直發送,直到Cookie過期為止。
    3、使用Cookie的限制。一個瀏覽器能創建的Cookie數量最多為30個,并且每個不能超過4KB,每個WEB站點能設置的Cookie總數不能超過20個。 (這是書上看到的說法,應該是一個web站點能創建的Cookie不能超過30個吧,要不然,我機子里的cookie少說也上百了,請達人指教!)
    4、Cookie是保存在客戶端的,用戶禁用了Cookie,你的Cookie自然也就沒作用啦!現在的瀏覽器,每當咱發送一個Cookie給客戶端,他就像看門狗一樣給攔截住了,并詢問用戶是否允許Cookie進門。天,用戶又不是專家,有幾個人知道啥叫Cookie呀?搞不好都當病毒拒之門外了。

    posted @ 2009-02-02 16:16 小馬歌 閱讀(281) | 評論 (0)編輯 收藏
     

    from:http://hi.baidu.com/wangzengfang/blog/item/c9f97b7b34c6caf00bd18724.html
    下面的文章可供參考,但我遇到了幾百兆的數量庫,幾次用此方法都失敗,原因是編輯器不能支持這么大的文本文件的編輯,另存為UTF8格式后,再次導入都不成功。

    怎么辦呢?程序員還是靠程序吧。

    從數據庫中取出中文字符串來,用函數一看是UTF-8格式的,所有不能再轉換為UTF-8格式的了,那怎么辦呢?仔細想想,原來的網頁顯示中文是可行的,這時實際上是在GBK,GB2312編碼下的。那我把字符串取出后轉換成GBK的,即UTF-8=>BGK,果然可以顯示了。注意這時網頁中所有的編碼都是UTF-8的了,應該跟一般的UTF-8的網頁一樣可以插入到數據庫里了。但是插入記錄還是亂碼,于是把set names utf8再加上。竟然成功了。

    但有個問題:為何字段格式是latin1,卻可以gbk顯示出來,但檢測卻是utf-8編碼,卻在utf-8下顯示不出來,必須轉換成bgk才可以顯示出來?找到一篇強文!http://hi.baidu.com/wangzengfang/blog/item/8563a8f9b56bd25d252df2d7.html


    相信 MySQL 的編碼對很多人來說 … 一直是個相當令人頭痛的問題 … 今天所要做的介紹是如何把數據庫的數據, 由 latin1 轉成 utf8..

    一般 .. MySQL 裝起來后(用 rpm 安裝) ,系統的默認編碼是 latin1.

    而很多人在安裝一些網頁的系統時,如 wordpress、LifeType、phpBB … 等等,都會選擇 utf8 。

    這時 … 系統一樣可以正常運作 … 只是當用 phpmyadmin 進入管理數據庫時,就會發現 .. 怎么中文字的部分都變成了歪七扭八 ..

    或者一些鬼畫符的文字。如:凡事先å¾?工作講起

    此現象就是 utf8 的文字以 latin1形式儲存,phpmyadmin 以 utf8 的數據讀取方式讀取 … 讀出來的數據就是這種鬼畫符…><。

    若要解決 phpmyadmin 讀出的鬼畫符 … 有兩個方法:

    1. 進入 phpmyadmin 內一個名為 libraries 的子目錄 .. 編輯 select_lang.lib.php. 找到 $mysql_charset_map 這一段下方 ..

    ‘utf-8′ => ‘utf8′,把它改成‘utf-8′ => ‘latin1′,

    然后存盤 … 這時候就可以發現原先的鬼畫符 … 這時候又都正常了.

    2. 把數據庫的編碼轉成 utf8 …

    步驟:

    a. 把數據庫 dump 出來

    mysqldump -u xxx -p database > database.sql –default-character-set=latin1

    這時候 dump 出來的 database.sql 是 latin1 的文件格式,然而是 utf8 的文字數據,因此這時若用 vi 開檔看它 …

    還是會發現中文字是鬼畫符 … 這時不要被眼前的假象所騙 … 以為自己做錯 .. 幾接著做下一步驟。

    b. 把 dump 出來的 database.sql 下載回去 .. 用 emEditor或者editplus等支持保存文件時可選擇文件存儲格式的編輯器把 database.sql 打開,

    它可以正常識別 utf8 的文字 ..用字符串替換的功能,把 “latin1” 都替換成 “utf8” ,之后直接另存新檔 .. 這時把文件類型設定儲存成 UTF-8。

    c. 再把 database-utf8.sql 上傳到 server .. 這時我們用 vi 開啟它 .. 就可以看見是正常的中文字 .. 這就表示檔案沒問題啰。

    d. 把檔案匯入數據庫

    mysql database < database-utf8.sql -u xxx -p --default-character-set=utf8

    注意你的database名稱,如果你想把數據導入到另外一個數據庫中時,因為你想保留原來的數據庫中的數據。那你應該先自己建立一個空的數據庫。這條命令并不能在數據庫不存在的情況下建立數據庫。

    如果數據量不是很大 … 那么很快就可以完成這個步驟 .. 這時候若沒有錯誤訊息出現 .. 那么恭喜你 ..

    你已經完成了數據庫轉換的工作了。如果有錯誤訊息出現 .. 主要有兩個情形 ..

    1. 文件文件內的中文字,用 vi 看是亂碼 ..文件檔的格式不是 utf-8。

    2. 匯入的時候漏掉指定采用 utf8 的數據編碼匯入。

    以上的作業是在 數據庫系統都是處于 latin1 的環境底下,也就是沒有在 my.cnf 指定 default-character-set=utf8。

    posted @ 2009-01-24 10:56 小馬歌 閱讀(3378) | 評論 (0)編輯 收藏
     
    from:http://hi.baidu.com/wszxg8866/blog/item/023e3e32f6ada3ff1b4cff34.html

    mysql+php產生亂碼原因:
    1. mysql數據庫默認的編碼是utf8,如果這種編碼與你的PHP網頁不一致,可能就會造成MYSQL亂碼.
    2. MYSQL中創建表時會讓你選擇一種編碼,如果這種編碼與你的網頁編碼不一致,也可能造成MYSQL亂碼.
    3. MYSQL創建表時添加字段是可以選擇編碼的,如果這種編碼與你的網頁編碼不一致,也可能造成MYSQL亂碼.
    4. 用戶提交頁面的編碼與顯示數據的頁面編碼不一致,就肯定會造成PHP頁面亂碼.
    5. 如用戶輸入資料的頁面是big5碼, 顯示用戶輸入的頁面卻是gb2312,這種100%會造成PHP頁面亂碼.
    6. PHP頁面字符集不正確.
    7. PHP連接MYSQL數據庫語句指定的編碼不正確.
    注意:
            很多人都懷疑mysql版本不一致會導致亂碼,相信看了本說明你就不會這樣認為了.
              平時你在某些網站看到的文字可能有幾種編碼, 如你看到一個繁體字,它有可能是big5編碼,也有 可能是utf-8編碼的,更有可能是gb碼的,沒錯,也就是說有簡體編碼的繁體字,也有繁體編碼的簡體字,一定要了解這一點.
    如果你是做一個簡體編碼的網頁,編碼定為GB2312,如果有香港和臺灣地區的訪客提交繁體的信息,就可能會造成亂碼,解決方法:
    • 將網站編碼設為 utf-8,這樣可以兼容世界上所有字符,
    • 如果網站已經運作了好久,已有很多舊數據,不能再更改簡體中文的設定,那么建議將頁面的編碼設為 GBK, GBK與GB2312的區別就在于:GBK能比GB2312顯示更多的字符,要顯示簡體碼的繁體字,就只能用GBK. 

    •          使用mysql+php產生亂碼的原因都了解得很清楚了,那么解決就不困難了.

      mysql+php產生亂碼的解決辦法:

    1. 如果安裝mysql的編碼已不能更改,很多朋友是購買虛擬主機建立網站,無權更改MYSQL的安裝編碼,這一關我們可以跳過,因為只要后面的步聚正確,一樣能解決亂碼問題
    2. 修改數據庫編碼,如果是數據庫編碼不正確,可以在phpmyadmin 執行如下命令:

      ALTER DATABASE 'test' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
      以上命令就是將test數據庫的編碼設為utf8.
    3. 修改表的編碼:

      ALTER TABLE 'category' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
      以上命令就是將一個表category的編碼改為utf8.
    4. 修改字段的編碼:

      ALTER TABLE 'test' CHANGE 'dd' 'dd' VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
      以上命令就是將test表中 dd的字段編碼改為utf8.
    5. 如果是這種情況容易解決,只需檢查下頁面,修改源文件的charset即可.
    6. 這種情況也是修改頁面charset即可.
    7. 在連接數據庫的語句中.
                              mysql_connect('localhost','user','password');
                              mysql_select_db('my_db');
                              mysql_query("set names utf8;");     //select 數據庫之后加多這一句

                              為了避免PHP頁面亂碼的發生,PHP頁面開始第一句
                              header("content-type:text/html; charset=utf-8");
                              //強行指定頁面的編碼,以避免亂碼
    posted @ 2009-01-24 10:44 小馬歌 閱讀(142) | 評論 (0)編輯 收藏
     
    from:http://hi.baidu.com/jackywdx/blog/item/c60ce9d4af063105a18bb7fb.html

    mb_convert_encoding這個函數是用來轉換編碼的。原來一直對程序編碼這一概念不理解,不過現在好像有點開竅了。
    不過英文一般不會存在編碼問題,只有中文數據才會有這個問題。比如你用Zend Studio或Editplus寫程序時,用的是gbk編碼,如果數據需要入數據庫,而數據庫的編碼為utf8時,這時就要把數據進行編碼轉換,不然進到數據庫就會變成亂碼。

    mb_convert_encoding的用法見官方:
    http://cn.php.net/manual/zh/function.mb-convert-encoding.php

    做一個GBK To UTF-8
    < ?php
    header("content-Type: text/html; charset=Utf-8");
    echo mb_convert_encoding("妳係我的友仔", "UTF-8", "GBK");
    ?>

    再來個GB2312 To Big5
    < ?php
    header("content-Type: text/html; charset=big5");
    echo mb_convert_encoding("你是我的朋友", "big5", "GB2312");
    ?>
    不過要使用上面的函數需要安裝但是需要先enable mbstring 擴展庫。

    PHP中的另外一個函數iconv也是用來轉換字符串編碼的,與上函數功能相似。

    下面還有一些詳細的例子:
    iconv — Convert string to requested character encoding
    (PHP 4 >= 4.0.5, PHP 5)
    mb_convert_encoding — Convert character encoding
    (PHP 4 >= 4.0.6, PHP 5)

    用法:
    string mb_convert_encoding ( string str, string to_encoding [, mixed from_encoding] )
    需要先enable mbstring 擴展庫,在 php.ini里將; extension=php_mbstring.dll 前面的 ; 去掉
    mb_convert_encoding 可以指定多種輸入編碼,它會根據內容自動識別,但是執行效率比iconv差太多;


    string iconv ( string in_charset, string out_charset, string str )
    注意:第二個參數,除了可以指定要轉化到的編碼以外,還可以增加兩個后綴://TRANSLIT 和 //IGNORE,其中 //TRANSLIT 會自動將不能直接轉化的字符變成一個或多個近似的字符,//IGNORE 會忽略掉不能轉化的字符,而默認效果是從第一個非法字符截斷。
    Returns the converted string or FALSE on failure.


    使用:

    發現iconv在轉換字符”—”到gb2312時會出錯,如果沒有ignore參數,所有該字符后面的字符串都無法被保存。不管怎么樣,這個”—”都無法轉換成功,無法輸出。 另外mb_convert_encoding沒有這個bug.

    一般情況下用 iconv,只有當遇到無法確定原編碼是何種編碼,或者iconv轉化后無法正常顯示時才用mb_convert_encoding 函數.

    from_encoding is specified by character code name before conversion. it can be array or string - comma separated enumerated list. If it is not specified, the internal encoding will be used.
    /* Auto detect encoding from JIS, eucjp-win, sjis-win, then convert str to UCS-2LE */
    $str = mb_convert_encoding($str, “UCS-2LE”, “JIS, eucjp-win, sjis-win”);
    /* “auto” is expanded to “ASCII,JIS,UTF-8,EUC-JP,SJIS” */
    $str = mb_convert_encoding($str, “EUC-JP”, “auto”);

    例子:
    $content = iconv(”GBK”, “UTF-8″, $content);
    $content = mb_convert_encoding($content, “UTF-8″, “GBK”);
    posted @ 2009-01-24 10:43 小馬歌 閱讀(647) | 評論 (0)編輯 收藏
     

    安裝MySQL
    groupadd mysql
    useradd -g mysql mysql
    tar -zxvf mysql-5.0.45.tar.gz
    cd mysql-5.0.45
    ./configure --prefix=/server/mysql
    make
    make install
    /server/mysql/bin/mysql_install_db   --user=mysql   --force
    cp support-files/my-medium.cnf /etc/my.cnf
    cp support-files/mysql.server /etc/rc.d/init.d/mysqld
    chmod 700 /etc/rc.d/init.d/m
    chkconfig --add mysqld
    cd /server/mysql
    chown -R mysql var
    chgrp -R mysql .
    /server/mysql/bin/mysqld_safe --user=mysql &
    /server/mysql/bin/mysqladmin -u root password '7766506'
    /server/mysql/bin/mysql -u root -p

    安裝Apache
    tar -zvxf httpd-2.2.4.tar.gz
    cd httpd-2.2.4
    ./configure --prefix=/server/httpd\
    --enable-rewrite=shared\
    --enable-speling=shared\
    --enable-module=shared\
    --enable-track-vars\
    --with-config-file-path=/server/httpd/conf\
    --enable-so\
    --enable-mods-shared=most
    make
    make install
    /server/httpd/bin/apachectl start


    安裝GD庫(GIF,PNG,JPEG)
    a.安裝jpeg
    tar -zvxf jpegsrc.v6b.tar.gz
    cd jpeg-6b
    mkdir /usr/local/lib/bin
    mkdir /usr/local/lib/lib
    mkdir /usr/local/lib/include
    mkdir /usr/local/lib/man
    mkdir /usr/local/lib/man/man1
    ./configure --prefix=/usr/local/lib/ --enable-shared --enable-static
    make
    make install

    b.安裝libpng
    tar -zvxf libpng-1.2.20.tar.gz
    cd libpng-1.2.20
    cp scripts/makefile.linux makefile
    make test
    make install

    c.安裝freetype
    tar -zvxf freetype-2.3.5.tar.gz
    cd freetype-2.3.5
    ./configure --prefix=/usr/local/lib/
    make
    make install

    d.安裝zlib
    tar -zxvf zlib-1.2.3.tar.gz
    cd zlib.1.2.3
    ./configure --prefix=/usr/local/lib/
    make
    make install

    e.安裝GD庫
    tar -zvxf gd-2.0.34.tar.gz
    mkdir -p /usr/local/lib/gd
    cd gd-2.0.34
    ./configure --prefix=/usr/local/lib/
    --with-jpeg=/usr/local/lib/
    --with-png=/usr/local/lib/
    --with-zlib=/usr/local/lib/
    --with-freetype=/usr/local/lib/
    make
    make install


    安裝php5
    a.安裝libxml
    tar -zxf libxml2-2.6.11.tar.gz
    cd libxml2-2.6.11
    ./configure --prefix=/usr/local/lib/
    make
    make install


    c.安裝php5
    tar -zvxf php-5.2.4.tar.gz
    cd php-5.2.4
    ./configure
    --prefix=/server/php
    --with-apxs2=/server/httpd/bin/apxs
    --with-mysql=/server/mysql/
    --with-config-file-path=/server/php/lib/php.ini(此格式可省略)
    --with-libxml-dir=/usr/local/lib/
    --with-gd=/usr/local/lib/
    --with-jpeg-dir=/usr/local/lib/
    --with-zlib-dir=/usr/local/lib/
    --with-png=/usr/local/lib/
    --with-freetype-dir=/usr/local/lib/
    --enable-mbstring --enable-sockets
    make
    make install
    cp php.ini-dist /usr/local/php/lib/php.ini
    vi /server/php/lib/php.ini
    vi /server/httpd/conf/httpd.conf

    posted @ 2009-01-22 12:54 小馬歌 閱讀(615) | 評論 (1)編輯 收藏
     

     現在國內主流的MP4機器,都宣稱可以直接播放RMVB和FLV。 我比較關心FLV,就是YOUTUBE、土豆、優酷上的視頻格式。

    不過,FLV也分FLV1和FLV4二種格式。(二者的文件后綴名都是FLV,但在電腦上用KMPLAYER播放時,FLV4的文件會有提示)

    FLV1主要在歐美和中國的視頻網站流行,特點是體積小,在線播放流暢,但清晰度低。

    而FLV4是近年在日、韓視頻網站開始流行的新格式,特點是解析度普遍在400*300以上,同等畫面尺寸下,要比FLV1清晰得多,色彩飽和度也特別濃郁。缺點是,文件比較大,在線播放經常停頓。

    我從日韓視頻網站上搜集、下載了不少日韓歌星MV的FLV視頻,格式當然是FLV4的。 很想知道,國內的MP4是否能直接播放FLV4的格式?

    懇請有知道的朋友能指點一下

    問題補充:不好意思,我不是籠統地指MP4是否支持FLV,而是特指FLV4格式,因為我知道是有幾款MP4支持FLV1。

    據說,二種FLV的視頻編碼格式不同,FLV1的視頻編碼格式是Sorenson H.263或H.264,而FLV4則是ON2 VP6 。

    FLV4在線視頻片段觀賞:
    http://tclon2.com/index.htm


    MC目前還辦不到,我見過FLV4格式,是比較清楚。
    你可以用MC轉成MP4(H.264+AAC),再修改后綴為FLV,FLASH播放器可以直接調用播放,效果同樣非常好,不比On2VP6+MP3差.

    On2 VP6-S 高清視頻
    On2 VP6-S編碼器是Adobe Flash Player的新伙伴,專為播放高清內容而設。比較H.264 (AVC)及其他同類技術,為 Adobe® Flash® Player 而設的On2 VP6-S能以較低的數據傳輸率及處理器利用率,輸出一流的高清影像。

    壓制flv4視頻參考地址:http://sk.sosg.net/post/45.htm
    On2 VP6和Sorenson Spark 視頻編解碼器比較:http://hi.baidu.com/jinzhou_shi/blog/item/0b249beffbde2c32adafd501.html
    土豆網為網絡視頻選用On2 VP6技術,有效節省帶寬成本:http://www.eetchina.com/ART_8800558976_621496_NT_ae7228dc.HTM

    posted @ 2009-01-19 14:51 小馬歌 閱讀(8748) | 評論 (4)編輯 收藏
     
    手機專用視頻格式 3GP
      3GP概述
      3GP是一種3G流媒體的視頻編碼格式,主要是為了配合3G網絡的高傳輸速度而開發的,也是目前手機中最為常見的一種視頻格式。
      目前,市面上一些安裝有Realplay播放器的智能手機可直接播放后綴為rm的文件,這樣一來,在智能手機中欣賞一些rm格式的短片自然不是什么難事。然而,智能手機畢竟是少數,大部分手機并不支持rm格式的短片,若要在這些手機上實現短片播放則必須采用一種名為3GP的視頻格式。目前有許多具備攝像功能的手機,拍出來的短片文件其實都是以3GP為后綴的,如諾基亞6230、摩托羅拉V600、阿爾卡特OT756等。下文將介紹如何制作適合手機播放的3GP文件。
      在目前上市的一些智能手機或者支持視頻拍攝的手機中我們往往能看到所謂支持3GPP格式圖象,那么什么是3GPP格式呢?簡單的說,該格式是“第三代合作伙伴項目”(3GPP)制定的一種多媒體標準,使用戶能使用手機享受高質量的視頻、音頻等多媒體內容。其核心由包括高級音頻編碼 (AAC)、自適應多速率 (AMR) 和MPEG-4 和 H.263 視頻編碼解碼器等組成,目前大部分支持視頻拍攝的手機都支持3GPP格式的視頻播放。
      轉換工具是關鍵
      在整個制作過程中,首先要下載將通常格式的視頻文件轉為3GP的工具,在這里記者推薦諾基亞的NOKIA multimedia converter Pro V2.0,這是諾基亞專門編寫的壓制工具,可以把AVI、MPG等格式的視頻文件直接轉換成手機上能看的3GP文件。
      下載后按步驟安裝。安裝完畢后雙擊文件MMConverterPro.exe即可打開軟件主界面。
      在界面的中上方,有Video和Audio兩個按鍵,點擊后可分別進入各自的界面。其中的Video界面是本文的主題,使用者可以在這里將各種格式的視頻文件轉換為適于手機播放的3GP。至于Audio,顧名思義是制作音樂的界面,使用者在此可將電腦常用的mp3文件轉為適合手機彩信發送和存儲的AMR格式。同時,通過這個方法也可以制作AMR格式的真人鈴聲。
      除了諾基亞專用的轉換工具以外推薦的一款通用的轉換工具:Xilisoft Video Converter 這款軟件優點:可以在DVD、VCD、SVCD、MOV、RM、AVI、MPEG、WMV、3GP、MP4等格式間相互轉換,你可以指定視頻和音頻編碼器、設置各項輸出參數,其重要之處在于:可以從視頻文件轉換出任意流行的音頻文件,諸如MP2、MP3、AC3、RA、M4A等。此工具支持多線程,可以同時進行多個文件的轉換,所有的轉換過程都非常簡明快捷。
      轉換軟件操作簡單
      Windows Moive Maker制作的短片格式為WMV,需要再用WMV to AVI MPEG VCD SVCD DVD Converter將其轉為AVI或MPG格式,轉換方法可參照工具附帶的說明書,相當簡便。隨即進入最后步驟,制作3GP格式的手機短片。
      1、在NOKIA multimedia converter Pro V2.0的主界面中選擇File→Open→選擇截取好的短片。
      2、打開短片后,界面中間原本字體為灰色的convert按鍵會變為黑色,點擊convert,鍵入文件名、選好存放路徑,按下“保存”鍵即可。
      3、轉換成功后,你可以點擊右面界面的播放鍵來預覽制作完成的3GP影片了,此時你還會發現現在的文件比原來的要小得多。
      3GP是一個多媒體儲存格式, 由3GPP所定義并為3G手機所使用. 它是一個簡化的MPEG-4 Part 14 (MP4) 版本. 3GP版本的檔案附檔名為 .3gp 或 .3g2
      3GP是以MPEG-4 or H.263格式儲存影像串流(video streams),并以AMR-NB or AAC-LC 格式儲存聲音串流(audio streams)。3GP檔案永遠為big-endian,儲存以及轉換從最高位元開始(the most significant bytes first)。3GP亦定義影像的大小以及帶寬, 所以內容可以正確的縮至手機螢幕顯示的大小。
      透過合適的多媒體播放軟件,3GP檔案亦可以在個人電腦上觀看。支援3GP格式的多媒體播放軟件計有:Media Player Classic、MPlayer、QuickTime、RealPlayer、VLC Player、Xine及Zoom Player。
      3GP影像檔案可使用3GP Video Converter 或使用 MPEG Streamclip 和QuickTime Alternative 并用的方式,以轉換至多種其他格式,大多數有3G功能的電話已支援這種格式, 甚至在擷取影像時就是使用此種格式。在PC螢幕顯示的品質與在手機螢幕顯示的品質類似. 通常保全攝影機會使用此種格式, 以便可在一小塊區域顯示注腳。這也是為何手機使用3GP格式的原因。
      簡單編輯電影片斷
      雖然相比一些常見的視頻文件,3GP所占的內存非常小,但由于手機內存限制,長時間、大容量的電影并不適合通常的手機播放。所以在選取影片時制作者要特別留意,如果是常見的4-5分鐘長短的MTV(音樂電視)短片大可放心壓縮;如果要截取電影的片斷則需要借助其他工具,如Windows Moive Maker進行簡單編輯。
      1、打開Windows Moive Maker,選擇文件→導入→在電腦中尋找需要剪切的影片→雙擊打開。
      2、此時軟件會讀取影片信息,時間依影片大小而定,在進度條達到100%時即可,軟件界面的中間會顯示“剪輯1”。
      3、點選“剪輯1”,此時在軟件界面的右方會顯示影片播放信息,將下方的滑塊移至你想剪輯片斷的開始處,點選界面頂部工具欄中的“剪輯”,選擇“分割”,此時會生成“剪輯1(1)”文件。
      4、點選“剪輯1(1)”,將滑塊移至你想剪輯片斷的結尾處,再此處點選界面頂部工具欄中的“剪輯”、“分割”,此時將生成“剪輯1(2)”。
      5、經過兩次分割后的“剪輯1(1)”即為你所想要截取的影片,在“剪輯1(1)”上選擇“添加到情節提要”,最后選擇文件→保存電影。
      在現時市面上提供手機畫像的電話所使用的標準,有以下兩個:
      3GPP(GSM手機使用的標準)
      3GPP2(CDMA手機使用的標準)
      兩者都是基于相同的編碼標準:影像方面采用MPEG-4及H.263,而聲音則采用AAC或AMR標準。
      推薦一個專業的壓縮3GP格式的軟件,
      軟件名稱:Allok Video to 3GP Converter
      大小:4951KB
      軟件簡介:
      Allok 公司出品的專為手機 3GP 視頻設計的媒體轉換器。此軟件使用 H263/MPEG4/XviD 這三種編解碼器,你的手機至少支持其中之一吧?
      轉換時的輸入格式目前支持幾乎所有主流的音頻視頻格式:*.avi;*.mpg;*.divx;*.div;*.xvid;*.mpeg;*.wmv;*.asf;*.asx;*.mpe;*.m1v;*.m2v;*.dat;*.mp4;*.m4v;*.dv;*.dif;*.mjpg;*.mjpeg;*.mov;*.qt;*.rm;*.rmvb;*.3gp;*.3g2;*.h261;*.h264;*.yuv;*.raw;*.flv;*.swf;*.vob;*.mkv;*.ogm;
      可以將它們轉換為:
      3GP + AMR 格式(*.3gp)、3GP + AAC 格式(*.3gp)、3GP2 + AAC 格式(*.3g2)、MPEG-4 視頻格式(*.mp4)、AVI 視頻格式 (*.avi)、DivX 視頻格式(*.avi)
      特色功能:
      支持視頻分割,幫助您去粗取精,可以只保留你最喜愛的片段;
      允許導入外掛的各種字幕文件、支持所有的主流字幕文件格式。
      特別推薦各位朋友使用這個軟件壓縮你手機適合的手機電影,過幾天我再寫一個此軟件詳細的使用教程。請各位朋友耐心等待!
      專業網站
      可以去下面幾個網站下載3gp手機電影:
      http://www.Sky3gp.com http://www.anwang.net http://www.3la3la.com http://www.fuwabbs.cn http://www.hao3gp.com http://www.3gp2.com http://www.513gp.com http://www.523gp.cn
    ASF
      ASF 是 Advanced Streaming format 的縮寫,由字面(高級流格式)意思就應該看出這個格式的用處了吧。說穿了 ASF 就是 MICROSOFT 為了和現在的 Real player 競爭而發展出來的一種可以直接在網上觀看視頻節目的文件壓縮格式!由于它使用了 MPEG4 的壓縮算法,所以壓縮率和圖像的質量都很不錯。因為 ASF 是以一個可以在網上即時觀賞的視頻“流”格式存在的,所以它的圖像質量比 VCD 差一點點并不出奇,但比同是視頻“流”格式的 RAM 格式要好。不過如果你不考慮在網上傳播,選最好的質量來壓縮文件的話,其生成的視頻文件比 VCD (MPEG1)好是一點也不奇怪的,但這樣的話,就失去了 ASF 本來的發展初衷,還不如干脆用 N AVI 或者 DIVX 。但微軟的“子第”就是有它特有的優勢,最明顯的是各類軟件對它的支持方面就無人能敵。
    n AVI
      n AVI 是 newAVI 的縮寫,是一個名為 ShadowRealm 的地下組織發展起來的一種新視頻格式。它是由 Microsoft ASF 壓縮算法的修改而來的(并不是想象中的 AVI),視頻格式追求的無非是壓縮率和圖像質量,所以 NAVI 為了追求這個目標,改善了原始的 ASF 格式的一些不足,讓 NAVI 可以擁有更高的幀率(frame rate)。當然,這是犧牲 ASF 的視頻流特性作為代價的。概括來說, NAVI 就是一種去掉視頻流特性的改良型 ASF 格式!再簡單點就是---非網絡版本的 ASF !
    AVI
      AVI 是 Audio Video Interleave 的縮寫,這個看來也不用我多解釋了,這個微軟由 WIN3.1 時代就發表的舊視頻格式已經為我們服務了好幾個年頭了。如果這個都不認識,我看你還是別往下看了,這個東西的好處嘛,無非是兼容好、調用方便、圖像質量好,但缺點我想也是人所共知的:尺寸大!就是因為這點,我們現在才可以看到由 MPEG1 的誕生到現在 MPEG4 的出臺。
    MPEG
      MPEG 是 Motion Picture Experts Group 的縮寫,它包括了 MPEG-1, MPEG-2 和 MPEG-4 (注意,沒有MPEG-3,大家熟悉的MP3 只是 MPEG Layeur 3)。MPEG-1相信是大家接觸得最多的了,因為它被廣泛的應用在 VCD 的制作和一些視頻片段下載的網絡應用上面,可以說 99% 的 VCD 都是用 MPEG1 格式壓縮的,(注意 VCD2.0 并不是說明 VCD 是用 MPEG-2 壓縮的)使用 MPEG-1 的壓縮算法,可以把一部 120 分鐘長的電影(未視頻文件)壓縮到 1.2 GB 左右大小。MPEG-2 則是應用在 DVD 的制作(壓縮)方面,同時在一些 HDTV(高清晰電視廣播)和一些高要求視頻編輯、處理上面也有相當的應用面。使用 MPEG-2 的壓縮算法壓縮一部 120 分鐘長的電影(未視頻文件)可以到壓縮到 4 到 8 GB 的大小(當然,其圖像質量等性能方面的指標 MPEG-1 是沒得比的)。MPEG-4 是一種新的壓縮算法,使用這種算法的 ASF 格式可以把一部 120 分鐘長的電影(未視頻文件)壓縮到 300M 左右的視頻流,可供在網上觀看。其它的 DIVX 格式也可以壓縮到 600M 左右,但其圖像質量比 ASF 要好很多。
    DIVX
      DIVX 視頻編碼技術可以說是一種對 DVD 造成威脅的新生視頻壓縮格式(有人說它是 DVD 殺手),它由 Microsoft mpeg4v3 修改而來,使用 MPEG4 壓縮算法。同時它也可以說是為了打破 ASF 的種種協定而發展出來的。而使用這種據說是美國禁止出口的編碼技術 --- MPEG4 壓縮一部 DVD 只需要 2 張 CDROM!這樣就意味著,你不需要買 DVD ROM 也可以得到和它差不多的視頻質量了,而這一切只需要你有 CDROM 哦!況且播放這種編碼,對機器的要求也不高,CPU 只要是 300MHZ 以上(不管你是PII,CELERON,PIII,AMDK6/2,AMDK6III,AMDATHALON,CYRIXx86)在配上 64 兆的內存和一個 8兆 顯存的顯卡就可以流暢的播放了。這絕對是一個了不起的技術,前途不可限量!
    QuickTime
      QuickTime(MOV)是 Apple(蘋果)公司創立的一種視頻格式,在很長的一段時間里,它都是只在蘋果公司的 MAC 機上存在。后來才發展到支持 WINDOWS 平臺的,但平心而論,它無論是在本地播放還是作為視頻流格式在網上傳播,都是一種優良的視頻編碼格式。到目前為止,它共有 4 個版本,其中以 4.0 版本的壓縮率最好!
    REAL VIDEO
      REAL VIDEO (RA、RAM)格式由一開始就是定位就是在視頻流應用方面的,也可以說是視頻流技術的始創者。它可以在用 56K MODEM 撥號上網的條件實現不間斷的視頻播放,當然,其圖像質量和 MPEG2、DIVX 等比是不敢恭維的啦。畢竟要實現在網上傳輸不間斷的視頻是需要很大的頻寬的,這方面 ASF 的它的有力競爭者!
    RMVB
      所謂RMVB格式,是在流媒體的RM影片格式上升級延伸而來。VB即VBR,是Variable Bit Rate(可改變之比特率)的英文縮寫。我們在播放以往常見的RM格式電影時,可以在播放器左下角看到225Kbps字樣,這就是比特率。影片的靜止畫面和運動畫面對壓縮采樣率的要求是不同的,如果始終保持固定的比特率,會對影片質量造成浪費。
      而RMVB則打破了原先RM格式那種平均壓縮采樣的方式,在保證平均壓縮比的基礎上,設定了一般為平均采樣率兩倍的最大采樣率值。將較高的比特率用于復雜的動態畫面(歌舞、飛車、戰爭等),而在靜態畫面中則靈活地轉為較低的采樣率,合理地利用了比特率資源,使RMVB在犧牲少部分你察覺不到的影片質量情況下最大限度地壓縮了影片的大小,最終擁有了近乎完美的接近于DVD品質的視聽效果,如圖1所示的就是RMVB格式的《圣斗士冥王篇》。可謂體積與清晰度“魚與熊掌兼得”,其發展前景不容小覷。
      相較DVDrip而言,RMVB的優勢不言而喻。首先在保證影片整體視聽效果的前提下,RMVB的個頭只有300~450MB左右(以90分鐘的標準電影計算),而DVDrip卻需要700MB甚至更多;其次RMVB的字幕為內嵌字幕,不像DVDrip那樣要安裝調試字幕外掛軟件,有時還會出現亂碼;更重要的是RMVB的影音播放只需一次性安裝完解碼器,以后無論影像還是音效都無需另行調試。而DVDrip卻視頻、音頻解碼一大堆,設置不當還會造成音畫不同步、花屏失聲等等毛病。
    本地影像視頻
      ●AVI格式:它的英文全稱為Audio Video 文件后綴名:*.avi
      Interleaved,即音頻視頻交錯格式。它于1992年被Microsoft公司推出,隨Windows3.1一起被人們所認識和熟知。所謂“音頻視頻交錯”,就是可以將視頻和音頻交織在一起進行同步播放。這種視頻格式的優點是圖像質量好,可以跨多個平臺使用,其缺點是體積過于龐大,而且更加糟糕的是壓縮標準不統一,最普遍的現象就是高版本Windows媒體播放器播放不了采用早期編碼編輯的AVI格式視頻,而低版本Windows媒體播放器又播放不了采用最新編碼編輯的AVI格式視頻,所以我們在進行一些AVI格式的視頻播放時常會出現由于視頻編碼問題而造成的視頻不能播放或即使能夠播放,但存在不能調節播放進度和播放時只有聲音沒有圖像等一些莫名其妙的問題,如果用戶在進行AVI格式的視頻播放時遇到了這些問題,可以通過下載相應的解碼器來解決。
      ●nAVI格式:nAVI是newAVI的縮寫,是一個名為ShadowRealm的地下組織發展起來的一種新視頻格式(與我們上面所說的AVI格式沒有太大聯系)。它是由Microsoft
      ASF壓縮算法的修改而來的,但是又與下面介紹的網絡影像視頻中的ASF視頻格式有所區別,它以犧牲原有ASF視頻文件視頻“流”特性為代價而通過增加幀率來大幅提高ASF視頻文件的清晰度。
      ●DV-AVI格式:DV的英文全稱是Digital Video
      Format,是由索尼、松下、JVC等多家廠商聯合提出的一種家用數字視頻格式。目前非常流行的數碼攝像機就是使用這種格式記錄視頻數據的。它可以通過電腦的IEEE
      1394端口傳輸視頻數據到電腦,也可以將電腦中編輯好的的視頻數據回錄到數碼攝像機中。這種視頻格式的文件擴展名一般是.avi,所以也叫DV-AVI格式。
      ●MPEG格式:它的英文全稱為Moving Picture Expert
      Group,即運動圖像專家組格式,家里常看的VCD、SVCD、DVD就是這種格式。MPEG文件格式是運動圖像壓縮算法的國際標準,它采用了有損壓縮方法減少運動圖像中的冗余信息,說的更加明白一點就是MPEG的壓縮方法依據是相鄰兩幅畫面絕大多數是相同的,把后續圖像中和前面圖像有冗余的部分去除,從而達到壓縮的目的(其最大壓縮比可達到200:1)。目前MPEG格式有三個壓縮標準,分別是MPEG-1、MPEG-2、和MPEG-4,另外,MPEG-7與MPEG-21仍處在研發階段。
      MPEG-1:制定于1992年,它是針對1.5Mbps以下數據傳輸率的數字存儲媒體運動圖像及其伴音編碼而設計的國際標準。也就是我們通常所見到的VCD制作格式。使用MPEG-1的壓縮算法,可以把一部120分鐘長的電影壓縮到1.2GB左右大小。這種視頻格式的文件擴展名包括.mpg、.mlv、.mpe、.mpeg及VCD光盤中的.dat文件等。
      MPEG-2:制定于1994年,設計目標為高級工業標準的圖像質量以及更高的傳輸率。這種格式主要應用在DVD/SVCD的制作(壓縮)方面,同時在一些HDTV(高清晰電視廣播)和一些高要求視頻編輯、處理上面也有相當的應用。使用MPEG-2的壓縮算法,可以把一部120分鐘長的電影壓縮到4到8GB的大小。這種視頻格式的文件擴展名包括.mpg、.mpe、.mpeg、.m2v及DVD光盤上的.vob文件等。
      MPEG-4:制定于1998年,MPEG-4是為了播放流式媒體的高質量視頻而專門設計的,它可利用很窄的帶度,通過幀重建技術,壓縮和傳輸數據,以求使用最少的數據獲得最佳的圖像質量。目前MPEG-4最有吸引力的地方在于它能夠保存接近于DVD畫質的小體積視頻文件。另外,這種文件格式還包含了以前MPEG壓縮標準所不具備的比特率的可伸縮性、動畫精靈、交互性甚至版權保護等一些特殊功能。這種視頻格式的文件擴展名包括.asf、.mov和DivX ,AVI等。
      小提示:細心的用戶一定注意到了,這中間怎么沒有MPEG-3編碼?實際上,大家熟悉的MP3就是采用的MPEG-3(MPEG
      Layeur3)編碼。
      ●DivX格式:這是由MPEG-4衍生出的另一種視頻編碼(壓縮)標準,也即我們通常所說的DVDrip格式,它采用了MPEG4的壓縮算法同時又綜合了MPEG-4與MP3各方面的技術,說白了就是使用DivX壓縮技術對DVD盤片的視頻圖像進行高質量壓縮,同時用MP3或AC3對音頻進行壓縮,然后再將視頻與音頻合成并加上相應的外掛字幕文件而形成的視頻格式。其畫質直逼DVD并且體積只有DVD的數分之一。這種編碼對機器的要求也不高,所以DivX視頻編碼技術可以說是一種對DVD造成威脅最大的新生視頻壓縮格式,號稱DVD殺手或DVD終結者。
      ●MOV格式:美國Apple公司開發的一種視頻格式,默認的播放器是蘋果的QuickTimePlayer。具有較高的壓縮比率和較完美的視頻清晰度等特點,但是其最大的特點還是跨平臺性,即不僅能支持MacOS,同樣也能支持Windows系列。
    網絡影像視頻
      ●ASF格式:它的英文全稱為Advanced Streaming format,它是微軟為了和現在的Real
      Player競爭而推出的一種視頻格式,用戶可以直接使用Windows自帶的Windows Media
      Player對其進行播放。由于它使用了MPEG-4的壓縮算法,所以壓縮率和圖像的質量都很不錯(高壓縮率有利于視頻流的傳輸,但圖像質量肯定會的損失,所以有時候ASF格式的畫面質量不如VCD是正常的)。
      ●WMV格式:它的英文全稱為Windows Media
      Video,也是微軟推出的一種采用獨立編碼方式并且可以直接在網上實時觀看視頻節目的文件壓縮格式。WMV格式的主要優點包括:本地或網絡回放、可擴充的媒體類型、部件下載、可伸縮的媒體類型、流的優先級化、多語言支持、環境獨立性、豐富的流間關系以及擴展性等。
      ●RM格式:Real Networks公司所制定的音頻視頻壓縮規范稱為Real
      Media,用戶可以使用RealPlayer或RealOne
      Player對符合RealMedia技術規范的網絡音頻/視頻資源進行實況轉播并且RealMedia可以根據不同的網絡傳輸速率制定出不同的壓縮比率,從而實現在低速率的網絡上進行影像數據實時傳送和播放。這種格式的另一個特點是用戶使用RealPlayer或RealOne
      Player播放器可以在不下載音頻/視頻內容的條件下實現在線播放。另外,RM作為目前主流網絡視頻格式,它還可以通過其Real
      Server服務器將其它格式的視頻轉換成RM視頻并由Real
      Server服務器負責對外發布和播放。RM和ASF格式可以說各有千秋,通常RM視頻更柔和一些,而ASF視頻則相對清晰一些。
      ●RMVB格式:這是一種由RM視頻格式升級延伸出的新視頻格式,它的先進之處在于RMVB視頻格式打破了原先RM格式那種平均壓縮采樣的方式,在保證平均壓縮比的基礎上合理利用比特率資源,就是說靜止和動作場面少的畫面場景采用較低的編碼速率,這樣可以留出更多的帶寬空間,而這些帶寬會在出現快速運動的畫面場景時被利用。這樣在保證了靜止畫面質量的前提下,大幅地提高了運動圖像的畫面質量,從而圖像質量和文件大小之間就達到了微妙的平衡。另外,相對于DVDrip格式,RMVB視頻也是有著較明顯的優勢,一部大小為700MB左右的DVD影片,如果將其轉錄成同樣視聽品質的RMVB格式,其個頭最多也就400MB左右。不僅如此,這種視頻格式還具有內置字幕和無需外掛插件支持等獨特優點。要想播放這種視頻格式,可以使用RealOnePlayer2.0或RealPlayer8.0加RealVideo9.0以上版本的解碼器形式進行播放。
      ●FLV視頻格式
      FLV 是FLASH VIDEO的簡稱,FLV流媒體格式是一種新的視頻格式,全稱為Flash Video。由于它形成的文件極小、加載速度極快,使得網絡觀看視頻文件成為可能,它的出現有效地解決了視頻文件導入Flash后,使導出的SWF文件體積龐大,不能在網絡上很好的使用等缺點。
      目前各在線視頻網站均采用此視頻格式。如新浪播客、56、土豆、酷6、youtube等,無一例外。FLV已經成為當前視頻文件的主流格式。
      FLV就是隨著Flash MX的推出發展而來的視頻格式,目前被眾多新一代視頻分享網站所采用,是目前增長最快、最為廣泛的視頻傳播格式。是在sorenson 公司的壓縮算法的基礎上開發出來的。FLV格式不僅可以輕松的導入Flash 中,速度極快,并且能其到保護版權的作用,并且可以不通過本地的微軟或者REAL播放器播放視頻。
      常見的視頻編碼:
      1、Microsoft RLE
      一種8位的編碼方式,只能支持到256色。壓縮動畫或者是計算機合成的圖像等具有大面積色塊的素材可以使用它來編碼,是一種無損壓縮方案。
      2、Microsoft Video 1
      用于對模擬視頻進行壓縮,是一種有損壓縮方案,最高僅達到256色,它的品質就可想而知,一般還是不要使用它來編碼AVI。
      3、Microsoft H.261和H.263 Video Codec
      用于視頻會議的Codec,其中H.261適用于ISDN、DDN線路,H.263適用于局域網,不過一般機器上這種Codec是用來播放的,不能用于編碼。
      4、Intel Indeo Video R3.2
      所有的Windows版本都能用Indeo video 3.2播放AVI編碼。它壓縮率比Cinepak大,但需要回放的計算機要比Cinepak的快。
      5、Intel Indeo Video 4和5
      常見的有4.5和5.10兩種,質量比Cinepak和R3.2要好,可以適應不同帶寬的網絡,但必須有相應的解碼插件才能順利地將下載作品進行播放。適合于裝了Intel公司MMX以上CPU的機器,回放效果優秀。如果一定要用AVI的話,推薦使用5.10,在效果幾乎一樣的情況下,它有更快的編碼速度和更高的壓縮比。
      6、Intel IYUV Codec
      使用該方法所得圖像質量極好,因為此方式是將普通的RGB色彩模式變為更加緊湊的YUV色彩模式。如果你想將AVI壓縮成MPEG-1的話,用它得到的效果比較理想,只是它的生成的文件太大了
      7、Microsoft MPEG-4 Video codec
      常見的有1.0、2.0、3.0三種版本,當然是基于MPEG-4技術的,其中3.0并不能用于AVI的編碼,只能用于生成支持“視頻流”技術的ASF文件。
      8、DivX- MPEG-4 Low-Motion/Fast-Motion
      實際與Microsoft MPEG-4 Video code是相當的東西,只是Low-Motion采用的固定碼率,Fast-Motion采用的是動態碼率,后者壓縮成的AVI幾乎只是前者的一半大,但質量要差一些。Low-Motion適用于轉換DVD以保證較好的畫質,Fast-Motion用于轉換VCD以體現MPEG-4短小精悍的優勢。
      9 、DivX 3.11/4.12/5.0
      實際上就是DivX,原來DivX是為了打破Microsoft的ASF規格而開發的,現在開發組搖身一變成了Divxnetworks公司,所以不斷推出新的版本,最大的特點就是在編碼程序中加入了1-pass和2-pass的設置,2-pass相當于兩次編碼,以最大限度地在網絡帶寬與視覺效果中取得平衡。
    posted @ 2009-01-19 13:04 小馬歌 閱讀(465) | 評論 (0)編輯 收藏
    僅列出標題
    共95頁: First 上一頁 73 74 75 76 77 78 79 80 81 下一頁 Last 
     
    主站蜘蛛池模板: 中文字幕亚洲免费无线观看日本| 亚洲欧洲精品成人久久曰| 亚洲一级毛片免费在线观看| 亚洲日韩中文字幕天堂不卡| 国产一卡二卡≡卡四卡免费乱码| 精品国产免费人成网站| 亚洲春色另类小说| 日韩亚洲精品福利| 久久精品人成免费| 福利片免费一区二区三区| 久久亚洲美女精品国产精品| 国产成人精品免费视频大全五级 | 亚洲人成电影在线观看网| 国产一级大片免费看| 91视频免费网址| 边摸边吃奶边做爽免费视频99| 91亚洲国产在人线播放午夜| 国产精品久久久久影院免费| 6080午夜一级毛片免费看6080夜福利| 日本亚洲中午字幕乱码| 亚洲精品视频在线观看免费| 免费人成在线观看视频播放| 91手机看片国产永久免费| 亚洲日韩在线观看免费视频| 亚洲成A人片在线播放器| 亚洲AV无码专区亚洲AV伊甸园| 在线视频免费国产成人| 亚洲精品免费在线| 两个人看的www免费视频| 久久水蜜桃亚洲AV无码精品| 亚洲成人福利网站| 婷婷精品国产亚洲AV麻豆不片| 亚洲M码 欧洲S码SSS222| 女人18毛片水真多免费播放| 永久免费视频网站在线观看| 在线观看免费视频一区| 日本亚洲中午字幕乱码| 亚洲精品V天堂中文字幕| 亚洲成人免费电影| 亚洲精品不卡视频| 亚洲人成网站在线播放影院在线|