在 OpenGL ES 2.0 tutorial for iOS 6 and Xcode 4.5.2 ﹣Part 1 中已經試過了最簡易實現的步驟,接著繼續加入 Shader 的使用。Shader 使用像 C 語言一樣的 GLSL 語言,主要有2種 Shaders,Vertex Shader 和 Fragment Shader,各自有各自的作用。讓我們加入 Shader!
建立一個空白檔案,取名為 SimpleVertex.glsl
2013年1月9日 星期三
2013年1月5日 星期六
OpenGL ES 2.0 tutorial for iOS 6 and Xcode 4.5.2 ﹣Part 1
原本的 tutorial 來自 OpenGL ES 2.0 for iPhone Tutorial,因為在它的實驗裡不是使用 iOS 6 和 Xcode 4.5.2 的版本,所以實際在執行時,遇到了一些問題,導致無法看到正確的結果。就如同我常告訴自己一樣,有不了解的東西時,一定是有觀念不懂,才看不到問題的所在,就像在實驗這個 tutorial 時,從不能執行到最後做出來後,才知道是個簡單的觀念。
實驗開始!參考 OpenGL ES 2.0 for iPhone Tutorial ,首先會遇到找不到 window-based Application 的問題,在 Xcode 4.5.2 已經拿掉,必須改用 Empty Application。
實驗開始!參考 OpenGL ES 2.0 for iPhone Tutorial ,首先會遇到找不到 window-based Application 的問題,在 Xcode 4.5.2 已經拿掉,必須改用 Empty Application。
標籤:
Multimedia,
OpenGLES,
Programming,
Xcode
2012年12月10日 星期一
FFmpeg tutorial on Mac OS X - tutorial03
這個 tutorial03 花了我不少時間,而且現在還有 Audio 的問題還沒有解決,因為過程中有很多地方需要注意,所以就先紀錄下來。
在前兩個 tutorials ( FFmpeg tutorial on Mac OS X - tutorial01, FFmpeg tutorial on Mac OS X - tutorial02 ) 中,我使用的編譯方式是,在終端機裡以 Configure 和 Make 的方式來進行編譯,需要額外的函式庫就加入它們來使用。但是在 tutorial03 中,卻一直沒辦法用同樣的方式,產生可用的執行檔。這裡說“可用的”是代表我的確已經編譯成功了,但是執行時會發生 crash 的現象,讓我找問題找了很久。
在 tutorial03 的練習中,主要是加入了 Audio,我使用的程式碼在 Linux 平台上已經驗證過(見 FFmpeg tutorial practice - tutorial03 ),也聽得到 Audio 的播放,但是在 Mac OS X 平台上,就是沒有辦法聽到!
在前兩個 tutorials ( FFmpeg tutorial on Mac OS X - tutorial01, FFmpeg tutorial on Mac OS X - tutorial02 ) 中,我使用的編譯方式是,在終端機裡以 Configure 和 Make 的方式來進行編譯,需要額外的函式庫就加入它們來使用。但是在 tutorial03 中,卻一直沒辦法用同樣的方式,產生可用的執行檔。這裡說“可用的”是代表我的確已經編譯成功了,但是執行時會發生 crash 的現象,讓我找問題找了很久。
在 tutorial03 的練習中,主要是加入了 Audio,我使用的程式碼在 Linux 平台上已經驗證過(見 FFmpeg tutorial practice - tutorial03 ),也聽得到 Audio 的播放,但是在 Mac OS X 平台上,就是沒有辦法聽到!
標籤:
FFmpeg,
Multimedia,
OS X
2012年12月4日 星期二
FFmpeg tutorial on Mac OS X - tutorial02
練習過 tutorial01 on Mac OS (見 FFmpeg tutorial on Mac OS X - tutorial01) 之後,接著我們繼續來實作 FFmpeg tutorial02 on Mac OS。如果還記得在 Linux 平台的 FFmpeg tutorial02 (見 FFmpeg tutorial practice - tutorial02),它需要加入第三方的函式庫 SDL,同樣地,我們也要準備給 Mac OS 用,所以去下載原始碼,然後編譯吧!編譯完之後,再設定 tutorial02 的 Makefile,就像在 Linux 平台做的事一樣。記得一樣要加入 Mac OS 所需要的函式庫!以下是我用的 Makefile
標籤:
FFmpeg,
Multimedia,
OS X
2012年12月3日 星期一
FFmpeg tutorial on Mac OS X - tutorial01
之前已試過在 Linux 的平台上練習 FFmpeg tutorial (見 FFmpeg tutorial practice - tutorial01),接著我想在 Mac OS X 上也做一樣的事。理論上,需要修改的地方應該不多,只是細節要怎麼處理就需要花一點時間試。當我把程式碼從 Linux 平台上放到 Mac OS 的平台上時,一樣先從 tutorial01 開始;當然,我們需要 Mac 版的 FFmpeg,所以需要在 Mac OS 平台上編譯出它的函式庫來用。我算是 Mac OS 平台上的新手,大約一年多的使用經驗,在 Linux 平台上知道怎麼做的事,到 Mac OS 平台上卻不一定知道怎麼處理。不過沒關係,花點時間找一下就可以了。
首先我遇到的是新增函式庫的問題,我使用的 Linux 平台是 Ubuntu,如果少了某某函式庫,可以用很多方式去安裝新的函式庫,Ubuntu 的軟體中心(Ubuntu Software Center)也做的不錯,可以很容易管理你的軟體安裝結果;但在 Mac OS 平台上,是用不同的方式做的,目前我用的是 MacPorts 來管理,因為在編譯 FFmpeg 時,遇到有缺少函式庫的問題,所以我用了 MacPorts 去新增了需要的函式庫。(MacPorts 的使用方法,在這裡就不說了,利用 Google 可以找到很多的說明。)
首先我遇到的是新增函式庫的問題,我使用的 Linux 平台是 Ubuntu,如果少了某某函式庫,可以用很多方式去安裝新的函式庫,Ubuntu 的軟體中心(Ubuntu Software Center)也做的不錯,可以很容易管理你的軟體安裝結果;但在 Mac OS 平台上,是用不同的方式做的,目前我用的是 MacPorts 來管理,因為在編譯 FFmpeg 時,遇到有缺少函式庫的問題,所以我用了 MacPorts 去新增了需要的函式庫。(MacPorts 的使用方法,在這裡就不說了,利用 Google 可以找到很多的說明。)
標籤:
FFmpeg,
Multimedia,
OS X
2012年11月30日 星期五
如何使用 MP4SetTrackESConfiguration
在使用 MP4v2 製作 .mp4 檔案時,如果你要使用的 Audio 編碼格式是 AAC,那麼你就需要使用 MP4SetTrackESConfiguration 這個函式來設定解碼需要的資料。在網路上看到的例子都是以 FAAC 編碼為居多,大多都可以參考需要的設定,設定 MP4SetTrackESConfiguration 的方式,都是先利用 FAAC 裡的 faacEncGetDecoderSpecificInfo 得到想要的資料,再傳給 MP4SetTrackESConfiguration
像這樣
faacEncGetDecoderSpecificInfo(hEnc, &Config, &ConfigLen);
MP4SetTrackESConfiguration(hFile, AudioTrack, Config, ConfigLen);
這是剛好你用的是 FAAC library,但如果你用的是別的 library 該怎麼辦呢?
像這樣
faacEncGetDecoderSpecificInfo(hEnc, &Config, &ConfigLen);
MP4SetTrackESConfiguration(hFile, AudioTrack, Config, ConfigLen);
這是剛好你用的是 FAAC library,但如果你用的是別的 library 該怎麼辦呢?
標籤:
Audio,
Linux,
Multimedia
2012年11月26日 星期一
MP4v2 - 製作MP4檔案格式
從接觸電腦以來,對於影片的檔案格式的區分,就只有依它的副檔名來判斷,.avi 就說它是 .avi 的影片檔,.rm 就只知道它是用 real player 播放的 .rm 檔案,.mp4 就說它是 .mp4 影片檔。不然,也是只有在用某一種播放器時,知道需要對映什麼樣的副檔名,才能看到影片的內容,像大學時很流行的PowerDVD,要看電影用它就對了,也只知道要去打開 .dat 的檔案才能看到。其它像是編碼格式,H.264、MPEG 、MP3等,那時真的不了解它們的意義是什麼?就算修了多媒體影像的課,對於那時的我來說,都只是見樹不見林的階段,一點都不知道全貌是什麼。一直到了需要自己把影片檔案,從頭到尾生出來之後,才真正了解影像聲音的編碼到底在做什麼,它為什麼一定播放器支援才能播放,為什麼沒有解碼器不能看。
一般我們所說的影片檔案格式,像 .mp4 、.avi 、.mkv 、.wmv...,它們都是“容器”,也就是說,它是用來放影像和聲音的,而影像是用什麼編碼的,或聲音是用什麼編碼的,那就看你怎麼搭配(當然,這是理論上的說法,最主要還是得看規格怎麼定),要符合它們所定的格式,對映的播放器才知道怎麼播。所以,有些播放器不能看,就是這個原因,因為它根本就不了解別的容器的意義。如果只是因為沒有安裝需要的解碼器,那還有機會可以看,只要為它安裝就行了,它和不了解容器規格的原因不同,它只是少了那個解碼器。
標籤:
Linux,
Multimedia
2012年11月13日 星期二
RGB to YUV(YCbCr)
比較常用 RGB 來表示顏色,很容易可以找到 RGB 的配色表。但是如果要用 YCbCr 來表示顏色該怎麼辦?本來以為也有類似的顏色表可以找,但是一直沒找到,反而找到的都是公式,如下所示
這是 RGB 轉 YUV 的公式
Y=R*0.299+G*0.587+B*0.114;
U=R*-0.169+G*-0.332+B*0.5+128;
V=R*0.5+G*-0.419+B*0.0813+128;
也有 YUV 轉 RGB 的公式
G= Y-(0.3455*(U-128)-(V-128)));
B= Y+(1.779*(U-128));
如果要用,就用 Excel 或是 Google 試算表來計算,還蠻方便的!
標籤:
Linux,
Multimedia
2012年11月1日 星期四
FFmpeg tutorial practice - tutorial04
在Tutorial04裡,主要是修改一些 Coding 方式,主要使用不同的 threads 來處理 Video 和 Audio,一方面讓程式架構較模組化,另一方面是為了之後 Video/Audio 同步之用。如果有從 Tutorial01 一直實驗上來,大概要改的東西都在前面講過了,下面就列出,我花了比較久的時間的部份。
有一段程式碼是為了結束程式所要使用的
但是因為 url_set_interrupt_cb 在 FFmpeg-1.0 中已經不再使用了,所以要改成下面的方式
有一段程式碼是為了結束程式所要使用的
// will interrupt blocking functions if we quit! url_set_interrupt_cb(decode_interrupt_cb); int decode_interrupt_cb(void) { return (global_video_state && global_video_state->quit); }
但是因為 url_set_interrupt_cb 在 FFmpeg-1.0 中已經不再使用了,所以要改成下面的方式
int decode_interrupt_cb(void *ctx) { return (global_video_state && global_video_state->quit); } static const AVIOInterruptCB int_cb = { decode_interrupt_cb, NULL }; pFormatCtx->interrupt_callback = int_cb;
標籤:
FFmpeg,
Linux,
Multimedia
2012年10月28日 星期日
FFmpeg tutorial practice - tutorial03
能夠把Video顯示在螢幕上之後,接著繼續加入Audio,也就是 Tutorial03 的目的。(如果還沒試過 Tutorial01,請先從 FFmpeg tutorial practice - tutorial01 開始練習) 播放Audio,一樣是借用SDL(Simple DirectMedia Layer),讓你能聽到聲音。主要的概念是從檔案中讀取 Audio stream 之後,把每一個 Audio 的 Packet 掫取出來 decode,把 decode 完成的資料傳給 SDL 去做播放的動作。其中,要注意 Audio 格式能不能被 decode,也就是你使用的 FFmpeg 的 libraries 是否支援你所要用的格式,如果不支援,那一定聽不到正確的聲音的。
標籤:
FFmpeg,
Linux,
Multimedia
FFmpeg tutorial practice - tutorial02
試過了 FFmpeg tutorial practice - tutorial01 之後,接著繼續 tutorial02。Tutorial02主要是要讓 Video 能顯示在螢幕上,而 Tutorial01只是讓畫面先存起來。為了能顯示在螢幕上,必須先研究一個新的東西,叫做SDL(Simple DirectMedia Layer),它是跨平台的函式庫,主要用來處理一些低層的操作,像聲音、鍵盤、滑鼠、OpenGL 3D硬體、2D video buffer等。我也是第一次接觸這個東西,不過,如果你學會如何使用第三方的函式庫的能力之後,只要有好的文件及 Sample Code,要了解是不會太難的。
標籤:
FFmpeg,
Linux,
Multimedia
2012年10月22日 星期一
FFmpeg tutorial practice - tutorial01
FFmpeg 是很有名的 Open source software,它提供了很強大的 Libraries 可以讓你使用,如果你對內部的程式有興趣的話,還可以下載它的原始碼來仔細看看。FFmpeg 網站的文件其實還算不少,但是要能讓你有個入門的說明,真的要花時間好好研究。我在其中找到了較入門且詳細的說明文件,但是它一開始就表明了文件已經過時了,一些原本在 Sample code 裡的程式碼所用的 API 可能都已經不再使用,所以要參考的人注意。也因為這樣,自己就花了一些時間,試著重新建構 Sample code,讓它可以正常編譯且運作。
原始的說明網站在這裡,有興趣的同好也可以去看看。它提供了8個 tutorial examples,這裡是第一個,也就是 tutorial01。如果一開始直接拿過來編譯,會出現警告和錯誤,這裡就是把這些問題解決的過程。
原始的說明網站在這裡,有興趣的同好也可以去看看。它提供了8個 tutorial examples,這裡是第一個,也就是 tutorial01。如果一開始直接拿過來編譯,會出現警告和錯誤,這裡就是把這些問題解決的過程。
標籤:
FFmpeg,
Linux,
Multimedia
訂閱:
文章 (Atom)