2013,對(duì)我來說,這是特殊的一年,因?yàn)樵谶@一年,我步入30歲了.無論如何,這都是無法被忽視的.
總的來說,2013年總共只做了3件事情:
1.脫離了這家為之奮斗多年的公司,5年,這對(duì)于職業(yè)生涯來說,不長(zhǎng)也不短;
2.開發(fā)了幾款游戲,并完善了游戲引擎.計(jì)劃中,這件事情本該在2010年做的事情,當(dāng)然,現(xiàn)實(shí)總不會(huì)如人意的;
3.開發(fā)了一款音視頻解決方案,支持P2P以及服務(wù)器中轉(zhuǎn),支持H264,AAC.
關(guān)于第一件事,我不愿多說,個(gè)中滋味,只有當(dāng)事人自己才能知道.對(duì)于這五年,如果非要做一個(gè)評(píng)價(jià),那只有一句話可以表達(dá):往事不堪回首.當(dāng)然,這么說,并非就是說這五年是一無是處,不是這樣的.任何事情都是有好的一面和不好的一面.
不好的一面是,這個(gè)項(xiàng)目做得并不輕松,而且也并沒有向著健康的方向發(fā)展,各種原因,我只能說,現(xiàn)實(shí)并不是那么單純和純粹的.
好的一面是,我有了一個(gè)長(zhǎng)足的提高和提升,這正是我想要的.很高興的一點(diǎn)是,我很好的認(rèn)清了一個(gè)人.失敗并不是一件壞事情,在失敗中,我們能夠得到許多的教訓(xùn)和經(jīng)驗(yàn),所以失敗要趁早.失敗,也并不可怕,可怕的永遠(yuǎn)都是爬不起來.失敗了,就要爬起來,吸取教訓(xùn),再來.否則,再多的失敗也是沒有意義的.
關(guān)于第二件事,這個(gè)游戲引擎是一個(gè)2D的游戲引擎,當(dāng)初是基于HGE改的,然后吧,我這人看的引擎又頗多,所以其中雜糅了許多其他游戲引擎的東西.比如Ogre3d,CEGUI,popCap,GameBryo...每個(gè)引擎都有好的和不好的東西,而有的時(shí)候,好的東西又不是合適的.所以,這一過程是糾結(jié)而又痛苦的.
我當(dāng)初用了一個(gè)月的時(shí)間作出了引擎的雛形,并用它開發(fā)了一個(gè)連連看.其時(shí),引擎并不是完善的,發(fā)生了一些不愉快的事情,整個(gè)進(jìn)程就停滯了下來.今年初,我研讀并重構(gòu)了之前手下人拿引擎開發(fā)的游戲,對(duì)引擎進(jìn)行了一個(gè)補(bǔ)足和改進(jìn).這時(shí)候,游戲引擎才算是一個(gè)完整的游戲引擎.
任何一個(gè)游戲引擎和框架,如果沒有經(jīng)歷過一兩個(gè)應(yīng)用程序開發(fā)的考驗(yàn),它就不是一個(gè)好東西,它不過是一個(gè)空中樓閣,站不住腳的.不論是引擎也好,應(yīng)用程序也好,它們只有在應(yīng)用當(dāng)中才能發(fā)現(xiàn)自己的不足,才能找尋到改進(jìn)的動(dòng)力.像GameBryo,cocos2d,它們都是一個(gè)游戲的開發(fā)產(chǎn)物,它們更為討好開發(fā)者,盡管如此,他們也還是有需要改進(jìn)的余地.
現(xiàn)在的游戲引擎,跨平臺(tái)也變成了考量的一個(gè)標(biāo)準(zhǔn).后面,引擎的跨平臺(tái)也是要做的一件事情.當(dāng)然,這需要需求來推動(dòng),如果有這個(gè)必要的話,我就會(huì)做這個(gè)事情了.
關(guān)于第三件事,前不久有人問我的職業(yè)是什么.我說我是:互聯(lián)網(wǎng)娛樂開發(fā)者.就是因?yàn)槲覔胶土艘幌乱粢曨l的領(lǐng)域,在此之前,我會(huì)說我是:網(wǎng)絡(luò)游戲開發(fā)者.當(dāng)然,我對(duì)這一領(lǐng)域的關(guān)注也不是從今年開始的,很早,至少四五年前,我就開始在讀libjingle的源代碼,去年開始在讀webrtc的代碼.雖說,這是一場(chǎng)沒太大信心的戰(zhàn),但是,至少我是有所準(zhǔn)備的.
最開始,我在和編解碼器在較勁.
最開始支持的視頻編解碼器是:DivX和xvid.但是顯然他們是不適用的,后來發(fā)現(xiàn)H264是行業(yè)標(biāo)準(zhǔn).H264可以說是xvid升級(jí)版,在高壓縮率下能夠很好的保證畫面質(zhì)量,所以H264不成行業(yè)標(biāo)準(zhǔn),舍我其誰.
音頻編碼器最開始只支持iLBC,但是音頻又區(qū)分為:語音和音樂.這樣兩種質(zhì)量水平.像iLBC和Speex都是這樣的語音級(jí)別的編解碼器,也就打打電話聊聊天就可以了,如果你想要聽音樂,唱K,抱歉,他們的質(zhì)量就不行了.這時(shí)候就需要AAC這樣的編碼了.
最終確立的標(biāo)準(zhǔn)音視頻編碼是:H264+AAC.為了達(dá)到一個(gè)合適的碼流,比如音頻,我總共聽了好幾百組的錄音,最終確定了其參數(shù).視頻我都不知道我折騰了多久.我是發(fā)揚(yáng)了愚公移山的精神,最終總算是把這一塊給搞定了.
搞定了編解碼器,這還不算完,這還只是一個(gè)開始而已,網(wǎng)絡(luò)傳輸這一塊的水更深,折騰了好幾個(gè)月,首先支持了基于UDP協(xié)議的RTP/RTCP協(xié)議,然后還要做重傳啊.總之還是發(fā)揚(yáng)的愚公移山的精神,把能夠試的方法都試遍了,這樣做有一個(gè)好處,好的不好的都清楚明白了,之后最終要怎么做,就可以做到了然于胸了.不過,這一塊還沒結(jié)束,我覺得是遠(yuǎn)遠(yuǎn)沒有結(jié)束,之后要走的路還很長(zhǎng).
在這里要感謝Google,他們開源了webrtc,這是一個(gè)巨大的寶庫.它使得音視頻這一塊的門檻降低了下來,雖然這樣說,不過它實(shí)在是太復(fù)雜了,要把webrtc給吃透也并非輕易之舉.所幸我花費(fèi)了好幾年的時(shí)間讀libjingle,故而webrtc讀起來也就相對(duì)輕松許多了,可是這塊領(lǐng)域?qū)嵲谑翘罅?要吃透它還是需要很長(zhǎng)時(shí)間.而且,我也暫時(shí)沒有打算要完全的把webrtc應(yīng)用到項(xiàng)目中,因?yàn)閣ebrtc是重型的,而我的項(xiàng)目本身是輕量級(jí)的,只需要取其精華就夠了.
做這一塊,最大的收獲是,我更為深刻的理解了TCP和UDP.有段時(shí)間,我試著用TCP傳輸,雖說最后的結(jié)果是:這條路是行不通的.但是這次嘗試中,我發(fā)現(xiàn)了我TCP服務(wù)器底層的好幾個(gè)隱藏已久的bug,只有在高負(fù)荷下才會(huì)出現(xiàn)的bug.另外還有一個(gè)深刻的覺悟,UDP想要不丟包,那是癡人說夢(mèng).準(zhǔn)確的說,互聯(lián)網(wǎng)通訊想要不丟包,那是不可能的.
2014年,我還有很多艱難的路要走,而且人生以后的路也會(huì)有許多的艱難困苦.但是我始終信奉著:艱難困苦,玉汝于成.只要心中懷著斗志,不服輸,不氣餒,沒有什么是克服不了的.
華麗的辭藻說再多也是沒用的,我這人也不是那么喜歡說花哨話,因?yàn)槲疑钪?話說得再漂亮,也不能為我的人生改變什么,也不能幫我解決任何問題,唯有腳踏實(shí)地,勤奮努力,一步一個(gè)腳印的走下去,這才是王道.
2012和2013年,因?yàn)橐恍┦虑?我變得極度的消極.而且這種消極到現(xiàn)在都還沒有完全的根除,人的一生就這么長(zhǎng),不能夠總這樣消極下去,不經(jīng)意間,人生就到了盡頭.到死的時(shí)候,自己還因?yàn)橄麡O而一事無成,糊里糊涂的過一輩子,那絕對(duì)不是一件好的事.
2014年,我必須要做回我自己,我必須要為我這僅有的一生去寫出一份滿意的答卷.
2014年,沒啥好說的,唯有加油!