DASH 小註解

DASH 這邊是指 MPEG DASH (Dynamic Adaptive Streaming over HTTP), 也就是用 HTTP 傳輸動態碼流的意思. 聽到這個名詞不得不令人想到 Apple 的 HLS (HTTP Live Streaming), 沒錯!這兩個規格是互相競爭的. 類似的規格還有 Microsoft Smooth Streaming 和 Adobe Dynamic Streaming. 據說這類的規格 80% 長得一樣, 但 100% 不相容.

為什麼會有這種規格上的需求呢?因為在網路上傳輸影片是一個不可逆的趨勢 – 例如 VOD (video on demand) 或 streaming, 而網路環境中又很難握實際的頻寬, 所以動態傳輸當然有必要. 接著講到 HTTP, 為啥用 HTTP 呢?因為防火牆一般不會擋它. 公司要是擋了 HTTP 就不能 Google 啦!所以 HTTP 影片可以順勢穿透防火牆, 也可以善用各種 proxy 或是 cache 的設備. 兩個因素加起來, 就導致了 HTTP streaming  的興起.

為了適應不同螢幕解析度和頻寬, 在 server 當然得準被各種規格影片. 此外, 所謂的動態當然需要靠偵測結果作為依據, 每個規範的著眼點也不一樣, 大致上是用 client 的 CPU loading 或是頻寬.

Server 動態偵測 切割方式 Container CODEC
Adobe RTMP Streaming Server 假設靜態 AMF, SWF, FLV and F4V Adobe assigned
Adobe’s HTTP-based Dynamic Streaming (HDS) HTTP CPU utilization time-code MP4 V: H.264 or VP6

A: AAC or MP3

Microsoft’s

Smooth Streaming

HTTP or RTSP CPU utilization time-code MP4 V: H.264 or VC1

A: AAC or WMA

Apple’s

HTTP Live Streaming (HLS)

HTTP buffer status segment M2TS
MPEG DASH HTTP CPU or buffer MPD M2TS or MP4 open
RealNetworks’ RTSP Real Data Transport (RDT) ? ? RM or RMVB RealNetwork assigned
DiVX Plus Streaming (DPS) HTTP delay? HTML5+

segment

MKV V: H.264
A: AAC, AC3, DTS, DTS Express

DASH 看似比大公司推出的規範更有公信力, 但是也受到某些苛責. 例如 DASH 並沒有指定 video CODEC, 所以號稱支援 DASH 的 browser 也就得多才多藝, 什麼格式都得解. 製作 DASH content 的人,  也要考慮接收端是否什麼都能解?而得把各式菜色都煮好才能端出來. 不過往好處想, DASH 開放了 CODEC 和 DRM (digital rights management) 的 support.

上表中 MPEG DASH 的 MPD (Media Presentation Description) 代表一個用 XML 管理的方式. 它把各個時間片段, 各種頻寬需求的影片 URL 一次給足. 因此 client 永遠知道下一個 byte 要去哪個 URL 撈. 抓一個圖解釋如下.

IAD 小註解

LTE IAD 這個名詞剛剛才接觸到, 網路上相關訊息也很少. LTE (Long Term Evolution) 大家都知道吧, 就是 4G 通訊中打敗 WiMax 的規格. 至於 IAD 呢?基本上 Google 查不太到. 

由於 IAD 常常和 router 這個字同時出現, 所以依據網路通信的習慣, 我們可以猜出 A 代表 Access, D 代表 Device. 果不其然, IAD 就是 Integrated Access Device.

IAD 也是  router 的一種, 它不但是網路設備 (data communication) , 也可以用來打電話 (telecommmunication), 送簡訊. 這就解釋了 integrated 這個字的含意. 舉 D-link 的產品為例, 只要插上 4G SIM 卡, 就可以提供無限網路 (包括支援 WIFI phone)與 USB 周邊 (如印表機). 這樣的東西看起來滿好用的.

BML 小註解

什麼是 BML 呢?它和體檢時令人尷尬的 BMI 沒有關係, BML 全名是 Broadcast Markup Language (廣播標記語言). 它在 1999 年由日本提出來, 記載在 ARIB STD B24 標準之中. 如同它的名字顯示的, 這是 XML 的一種, 又用在數位電視廣播.

網路上相關的訊息很少, 最好的一個 link 可能是這個:New Generation TV platform API and Privacy Protection

試想, 如果電視台送過來的訊息是一個 XML file, 那麼傳輸效率還挺高的, 只要接收端的 browser 夠強, 就可以達到節省頻寬的目的.

至於在歐洲推動了很多年的 MHP (Multimedia Home Platform) 架構, 則是在接收端建好 Java 的虛擬機, 等著 run 傳過來 Java 程式 (例如用 DSM-CC), 相形之下效率就低了些. 

最近在歐洲比較紅的 HbbTV 基本上也是以 CE-HTML 做互動.未來更將改用 HTML5  取代 CE-HTML. 在那一天還沒有來臨之前, 我們先關心一下歷經市場十多年考驗的 BML 吧,它的 API 多達 229 個! 有些功能連 HTML5 都還沒有.

BML Broadcasting Extension API 包括:

• EPG API

• VOD/Broadcasting base on Home Server API

• Storage API

• Interactive/Presentation API

• Other TV set Control API

比方說, BML 還支援把節目的畫面用印表機印出來, 這樣夠炫了吧!更別說什麼連續劇預約錄影, 硬碟儲存權限保護等等了. 因此, 在上面提到的那篇文章中, 作者認為 BML + HTML5 會是最佳互動電視的解決方案.

不過, 個人以為 BML 幾乎只有日本人在用, 而 HTML5 可以無限改版擴充, 總有一天 HTML X 樣樣都會比 BML 強!

在 Word 製作文件目錄

最近在寫文件的時候, 剛好需要製作三種目錄, 包括 TOC (table of cotents), 圖形與表格的目錄 (table of figures). 雖然套用別人的樣板就沒有問題, 但是其實自己不會做這個東西. 上網查了一下, 大多數都是英文的網頁, 而且沒有 Office for Mac 的版本, 其實搞不懂關鍵何在?

雖然我也看到 Word 給我的提示, 不過那只適用於 Table of Contents, 對 Table of Figures 只能算是誤導吧?

List of Tables

No table of figures entries found.
In your document, select the words to include in the table of contents, and then on the Home tab, under Styles, click a heading style. Repeat for each heading that you want to include, and then insert the table of contents in your document. To manually create a table of contents, on the Document Elements tab, under Table of Contents, point to a style and then click the down arrow button. Click one of the styles under Manual Table of Contents, and then type the entries manually.

如果要製作 table of content, 首先要決定標題的形式, 也就是 style. 比方說最大的標題 (Heading 1) 要選 1, 次大的標題 (Heading 2) 要選 1.1, 再下一級標題 (Heading 3) 要是 1.1.1…之類的. 這邊用 mouse 的右鍵可以選到這個 style 適用的字體或是字型大小, 還可以把整份文件的同一個 style 都改成一致的格式.

最後, 在需要插入 TOC (table of contents) 的地方, 從 word 的工具列選擇 insert, 然後再選擇 index and table (索引及表格) , 就可以自動把 TOC 建出來, 而且還可以在這裡選擇表現方式, 有沒有顏色? 要不要排縮等等.

至於製作 figure 和 table 的 table, 那就需要事先告知 Word. 首先對於每個圖形或是表格, 不是光把字打上去就算了. 像是 Figure 1. System Overview 這樣是不行的, 難以寄望 word 自己就能把表給建出來. 每個說明文字要先插入一個標題 (caption). 去工具列選 insert → caption, 就可以接著選擇這是公式, 圖形或是表格. 至於標題的 style 是啥都不要緊.

同樣在需要插入 table of figure 的地方, 再去選一次 insert → index and table, 選擇 table of figure, 再從中選擇是建立 equation, figure, 還是 table 的 index 就可以了.

Node JS 小註解

Node JS 是一顆新星, 最近相當紅. 從字尾 JS 看來, 當然就是指 Java Script. Node 嘛…我也查不到, 可能是因為它有網路的背景吧!

網路上介紹 node JS 的文章已經相當多了, 切入的角度也各有不同. 但最重要的一件事是: node 是一個 Java script 的 server. 首先要有 Java script 寫好的 .js 檔, node server 才能夠去執行它.

通常我們會在瀏覽器端執行 Java script, 例如寫個表單程式之類的, 使用 Java script 會很方便. 而 Node JS 是在伺服器端運行 Java script 用的, 甚至 Node JS  本身就可以當作 web server 的平台, 拿來建立 HTTP server 之用.

從技術面來看, node JS 基於 Google V8 的 Java script engine (這也是 Chomre 在用的), 並且增加了一些內建的函式庫. 基本上我們可以找到其他一些性質相同的替代方案, 例如 common JS, RequireJS 等等. 相關訊息可以參考其他連結.

CommonJS 和 RequireJS 有什麼不同 ?

Common JS 和 node JS 都是用 synchronous module, 而  Require JS 採用 AMD (asynchronous module definition), 遇到需要的載入的模組, 才會把它叫進來.

Bridging the module gap between Node.js and browsers

Universal modules (browser, Node.js): imports and universal tests 

Synchronous module 的好處是全部的 module 已經進了 memory, 所以可以很快回應.  Node JS 只用一個 thread, 又強調 event driven. 所以反應迅速確實很重要. 當然, 如果 user 硬是寫了一個 blocking 的 Java script, 那麼 Node JS 還是會讓它卡住. 詳情可以看這裡:

Node入門  中間有一段專講 Blocking與 Non-Blocking. 

有些人的觀點是拿 node JS 和 PHP 比較. 畢竟 PHP 和 node JS 的差異很大, 直接比較並不太公平. 只能看出 node JS 的 event driven 寫起來比較省事. 另外一些人則是拿 node JS  和 AJAX 類比, 主要是討論兩者會不會都是一窩蜂? 至於在現實生活中, 這兩者倒是可以並存.

Node.jS初學者筆記(3)-用Ajax傳送資料

Node JS 真正長什麼樣子呢? 其實安裝起來就知道了. 其中有一個 node.exe 和一個 node_modules 的目錄, 好東西都在目錄裡. 支援的 module 包括 fstream. mode-uuid, request…等等. 安裝的連結在下面.

http://nodejs.org/#download

支援 node JS 的 Java script, 可以看 “Node入門" 裡面這個例子:

[圖片遺失]

這是一個 node 可以執行的  server.js, 只要安裝好 Node, 就能用 node server.js 產生一個聽 8888 port 的 HTTP server.

每當 port 8888  收到請求, call back function onRequest() 就會印出 Hello World. 如果沒有收到 port 8888 的訊號, 執行此 Javascript 只會印出 Server has started.

如果用匿名函數來寫, onRequest() 就省略不計了, 但 call back 的精神還在. 這也是 node JS 支援的語法.

總結一下, 如果我們想在 server 端處理 Java script, 使用 node JS 會是不錯的選擇. 至於在 web browser 端使用 Java script, 交給 Google V8 engine 就可以了, 不需要用到 node JS. 如果大家想學 node JS, 這幾個網址相當不錯:

Node.jS初學者筆記(1)-用GET傳送資料

為什麼選用 Node.js ?

Node JS 發明人 Ryan Dahl 自己做的簡介影片如下: