DSM-CC 小註解

網路上不容易找到把 DSM-CC 講清楚的網站, 雖然官網或許講得很詳細, 但是如果有人想在 3 分鐘內知道這個名詞的屬性, 應該不能靠官網. 

DSM-CC 全名是 Digital Storage of Media Command and Control Protocol , 功用在於提供互動電視的下載機制.

如果要和 MPEG TS (transport stream) 一起傳輸, 就必須將 DSM-CC 的 message 包裝成 private section. 這種 DSM-CC section 和 TS 的 private section 相容, 因此可以在廣播碼流中夾帶 DSM-CC 的訊息. MPEG2 TS 夾帶 DSM-CC 訊息的格式請參考 [1].

DSM-CC 必須將一個可執行的程式, 切割成小段 (data pipe), 加入同步訊息 (data stream), 打包進 bit stream (multi-protocol encapsulation). 由於廣播的特性在於不知道使用者何時開機, 換台,…等等, 所以這些 DSM-CC 的服務 (service domain) 都必須週期性地出現在 TS 碼流當中. 這種特性稱為 Carousel (旋轉木馬), 亦即每隔一段時間就會再出現.    

像是 MPEG video 都有 GOP (group of picture), DSM-CC 的內容也分成 group. 於是有 group 外的 DSI (download server Initiate) 存放參考資訊, 以 group 形式出現的 DII (download info indication) 和 DDB (download data block).

如果是 object carousel, DSM-CC 的 service domain 分為三種 object: service gateway, directory, file. 看起來很複雜, 其實就是 service 的根目錄 (root), 文件夾 (folder), 和檔案 (file). 也就是傳過來的應用程式要放在哪裡的意思. 此時 DSI 負責存 service gateway info.

當收完 object carousel 之後, service 存放位置應該都已經確定了. 此時 data carousel 會將真正的 data (如應用程式) 放在 DDB 中傳輸 (以 group 出現).

對一個 STB 軟體來說, TS demuxer 解析了 PAT, PMT, 自然可以找到 data stream. DSM-CC 再負責從中間組合出應用程式. 這裡有個 trade-off 就是一次要組合幾個 module (object 或是 data) 才好? 如果看到一個 module 就收一個, 可能同時要收一大堆 module, 結果把記憶體弄爆! 一次如果只處理一個 module, 可想而知那個旋轉木馬不知道要繞幾圈才能把所需要的 module 都收齊, 速度一定其慢無比了.  

[Note]

1. http://www.360doc.com/content/10/0224/11/59579_16643719.shtml

2. 中文論文: 數位視訊廣播多媒體家用平台之DSM-CC軟體設計與實現

Android 執行應用程式的方式

Android 執行應用程式的方式大概有三種, 直接從 Native Service Binder 呼叫 HAL Library, 或是透過 Native Service / Daemon 來呼叫. 如果只用一張圖表示, 它長成下面這樣.

其中 Native Serice Binder 若直接呼叫 HAL Library, 相當於 Application 用 Binder IPC 呼叫 Run-time Service.

Application Framework 和 Library 這兩層包括的東西, 還是直接看標準版的 Android System Architecture 圖最容易了解, 再次貼在後面.

Android Function Call:

Android System Architecture:

[note]

1. IPC = Inter-Process Communication.

2. JNI = Java Native Interface

OpenGL on Win7 64bits

在 Windows 上使用 OpenGL 的函式庫需要幾樣東西, 我假設大家都裝了免費的 Visual Studio Express 2010 版, 那麼:

1. glut.h  放在 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include\gl

2. glut.lib 和 glut32.lb 放在 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib

3. glut.dll 和 glut32.dll 放在 c:\windows\system32

不過如果是 64 bits 的作業系統, glut32 要放到 C:\Windows\SysWOW64 裡面. 不然程式寫好也會說不能啟動, 因為找不到 glut32.dll.

什麼是 glut 呢? 它是 OpenGL Utility Toolkit 的縮寫, 即使版本比較舊也都可以用. 至於 sysWOW64 的意思是 Windows-on-Windows 64bit , 可以讓 64 bits Windows 執行 32 bits 的程式. 這也就是為什麼 Glut32.dll 要放到這個目錄的原因.

[ref]

1. Microsoft Visual Studio 2008安裝 GLUT for Windows7 64bit

2. andyhuabing的专栏

3. WIKI: GLUT

4. 補充說明 SysWoW64 目錄

 

十三號星期五之網站整修心得

本年度的第一個黑色星期五 (2012/1/13), 我發現我網站的文章變成不能修改了! 凡是貼出去的東西, 變成起手無回的狀態, 只要發表出來, 一個標點都改不了. 這也就罷了, 連想貼的圖也貼不出來.

上網 Google 了一下, 有人說改這裡, 有人說改那裡. 試了一下都沒有效果. 根據我的判斷, 應該是 wordpress 到 SQL 這中間出了問題. 在 wordpress 已經完成的動作, 再去 phpMyAdmin 裡面匯出 .sql 來看, 其實都沒有修改到. 所以, 我就再度重灌了.

這其中我又犯了幾次錯, 差點改不好, 所以特別寫下來給大家參考.

1. 重新安裝 apache 2.5.10 之後, 必須先到 phpMyAdmin 裡面去新增一個 wordpress (或是其他 blog 的名字), 裡面可以全空的. 這樣進到 wordpress 去跑 wp-pconfig.php 時, 才不會說沒有權限. 連 database 都不存在當然沒有權限了. 如果 wordpress 已經存在了, 當然就沒問題.

2. 新增的 wordpress 需要把以前備份的 .sql 匯入, 這樣網站才能恢復, 光是把整個目錄 copy 起來是沒有用的, 因為 apache 已經重新來過. 先前我一時不察, 在備份網站時, 把 mysql, test, phpmyadmin 這三個預設的資料庫和 wordpress 一起備份了. 等到要匯入的時候, phpMyAdmin 就抱怨 mysql 已經存在, 故不允許匯入!

把現有的 mysql 先殺掉嗎? 很抱歉, 每個資料庫都殺得掉, 就是 mysql 只能清空, 卻不能刪除. 幸好 .sql 本身就是一個文字檔, 只要到 .sql 裡面, 把多餘的資料庫 delete 掉就好了. 它的格式很清楚, 可以很容易辨識. 這樣匯入就可以成功了.

它的表頭是這樣, 一直砍到資料庫: 'wordpress' 就成啦!


— 資料庫: `mysql`

CREATE DATABASE `mysql` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `mysql`;

— ——————————————————–

3. 網站剛改好時, 進入管理員就看得到畫面. 從 URL 進去首頁卻是一片空白. 看了一下控制台, 才發現 theme 沒有跟著搬過來. 雖然 wordpress 自己說會用預設主題代替, 但是其實不行. 這邊只要把原先的主題搬家過來就好.

4. 最後就是補上基本的防護配備, 大家應該不會想讓每個人都看得到 phpMyAdmin 這一樣, 或是可以執行 wp-config.php 吧. 那就改一改吧! 至於不需要搬過來的東西和不必要的更新, 我就先不管了. 原先不能更新文章的 bug  一定就在某次的更新之中. 這次重灌又浪費了我不少時間, 改好之後連總統都選出來了…

我的 O2droid

話說我以前對 Android 沒什麼好感, 每次和 Android 發生關連不是 source tree 因此不穩, 開機變慢; 就是老闆要我去跟催 Android 的開發進度. 總之不會和好事發生連結. 

不過自從我加入號稱以 Android 為核心技術的 Skyviia 之後, 完全就和 Android 畫上了 “>" 符號 – 大於符號是說除了 Android 還有別的事要做啦!

當然, 隨著 Android 4.0 手機 Samsung Glaxary Nexus 上市, 我們的任務隨著艱鉅起來. 為了深入了解敵情, 我連手機都改成 O2droid 啦!

什麼是 O2droid 呢?就是把 Samsung Omnia II 從 WM 6.5 作業系統灌成 Android, O2 + Android = O2droid, 這個名詞可能是這幾位仁兄發明的 –

Samsung I8000 Omnia II Android development. 網路上的資訊一大堆, 到底要灌哪一版才能把 i8000 變成 Android 呢?(甚至還有人說不能灌呢!) 我覺得最最簡單的就是好啊網發表的這篇文章: 

2011/8/2 在夠快網盤發佈的 3G ISO 版 (3G至尊版ISO.rar309.01MB)適用於內建 8GB 以上 SD 卡的型號. 

或是 1.7G 極速版 (1.7G极速版ISO.rar477.26MB) 適用於內建 2GB 的機種. 

在台灣買到的 i8000 應該都是 8GB 的, 新加坡賣的才有 16GB. 當然檔案愈大, 裡面的內容就愈多. 3GB 版裡面有憤怒鳥和水果忍者, 1.7GB 版就只有後者. 再說到 1.7GB 和 3.0GB 版都可以設為繁體中文, 但是 1.7GB 就是抓不到中華電信的 APN, 所以也上不了網. 

什麼是 ISO 版呢?就是把做好的 Android 鏡像存起來, 解開 rar 檔後, 就會看到一個 ISO 文件. 此時只要在 My Storage 裡面執行 Haret.exe 等著它安裝好就行了, Froyo 2.2 版水果優格就會取代原來的 “窗戶移動" (Wiindows Mobile). 不過它並沒有真正把 WM 6.5 取代掉, 只要拔掉電池, 或是 reboot 就會變回窗戶移動啦!

除了 ISO 版之外, 外面流傳的還有 ghost 版 (GHO). 另外就是 O2droid beta1, beta2, beta3 版. O2droid 系統因為是一版一版長上來的, 所以直接灌 beta3 還是要先 format SD 卡, 做出 FAT32, EXT4 等分區, 老實說有點麻煩. 因此我覺得ISO 版還是比較實用. 只是它肥了一點.

最初我把 1.7GB 版放進 8GB SD 後, 又把 3GB 版本 ISO 放進來. 結果一執行 Haret.exe 就發生 Kernel Panic. 我直覺地把 1.7GB 搬走就 OK 了. 另外執行 Haret.exe 時, 有時會看到一些 error message, 像是 expected 4096 got 0, 這個是 SD 卡讀寫不正常, 重新 check disk 後, ISO 重新拷貝過就會好. 

對了!變身 Android 之後, 手機變慢了不少. 不過 angry bird 可以玩, APK 也比 WM 6.5 豐富, 感覺滿好玩的. 下次可能真的買一支 Android 手機來試試吧!

SONY DSC