Friday, July 21, 2017

每天來一點 Deep Learning(目錄)

每天來一點 Deep Learning(目錄)

2017/06/13



(一):今天就開始

(二):學哪些

(三):Python  

(四):Mathematics 

(五):Signal Processing

(六):ANN  

(七):Sigmoid

(八):Programming  

(九):Function 

(一0):Encapsulation

(一一):Statistics  

(一二):Filter

(一三):Training 

每天來一點 Deep Learning(一三):Training

每天來一點 Deep Learning(一三):Training

2017/07/21

有影像處理的基礎,對於學習 Deep Learning 是好事。

然而,有時它反而限制了你的想法。

-----

在我剛開始看 LeNet 的論文時,概念上還很模糊。

第一層有六個卷積核 (convolutional kernel),可以濾出六個方向的線條。

然後也有權重的概念。

六個 filters 的參數要如何下呢?除了常見的 Gx, Gy 之外,其他的 filters 要去哪裡找?

做完 convolution,要如何調整結果的權重?用 BP 嗎?

-----

以上的困惑,持續了很久,最後,到社團問一下,完全不是我原來想的。

正確的答案是:

六個卷積核的參數,一開始是隨機指定初值(這點也有討論的空間),經過 BP 之後,慢慢會訓練出 filters 裡面的權重。Gx, Gy 等等,訓練成功後就會長出該有的長相。

以上是竅門所在,看論文自學的人,通常會陷入這個「陷阱」裡面,有了社團的「動量」,就可以輕易地跳出來。

跑步(八六):15圈

跑步(八六):15圈

2017/07/21

熱身2,跑(5*3)。

-----

該朝20圈邁進了!

Tuesday, July 18, 2017

捐書(三三):法國文學

捐書(三三):法國文學

2011/06/10

法國土司
法國文學的故事
法國近代文學史
法國當代文學
莫泊桑短篇全集(之一)
莫泊桑短篇全集(之一)
莫泊桑短篇全集(之一)
莫泊桑短篇全集(之一)

-----

如果不是當初捐書出去的時候把書名記下,也許我一輩子都不再記得讀過這些書。

當初讀的時候,自然是因為想讀。

真的嗎?也許是因為時間太多。

現在時間不多,自然也不大讀「閒書」。

最近有點放鬆,也有點疲乏。

回顧一下。

跑步(八五):15圈

跑步(八五):15圈

2017/07/14

熱身2,跑(5*3)。

-----

??!

Thursday, July 13, 2017

AI從頭學(目錄)

AI從頭學(目錄)

2016/12/08

1. AI從頭學

2. LeNet實作團(目錄)
3. DRL實作團(目錄)
4. Lab DRL(目錄)
5. 每天來一點 Deep Learning(目錄)

6. Cloud(目錄)


AI從頭學(一):文獻回顧

AI從頭學(二):Popular Deep Learning Software Tools

AI從頭學(三):Popular Deep Learning Hardware Tools

AI從頭學(四):AD and LeNet

AI從頭學(五):AD and Python

AI從頭學(六):The Net

AI從頭學(七):AD and Python from Jason

AI從頭學(八):The Net from Mark

AI從頭學(九):Back Propagation

AI從頭學(一0):Automatic Differentiation

AI從頭學(一一):A Glance at Deep Learning

AI從頭學(一二):LeNet

AI從頭學(一三):LeNet - F6

AI從頭學(一四):Recommender

AI從頭學(一五):Deep Learning,How?

AI從頭學(一六):Deep Learning,What?

AI從頭學(一七):Shallow Learning 

AI從頭學(一八):Convolutional Neural Network

AI從頭學(一九):Recurrent Neural Network

AI從頭學(二0):Deep Learning,Hot 

AI從頭學(二一):A Glance at Deep Reinforcement Learning 

AI從頭學(二二):Azure Machine Learning - Clustering

AI從頭學(二三):CNN - Kernel Training

AI從頭學(二四):CNN - Kernel Visualizing

AI從頭學(二五):ZFNet

AI從頭學(二六):Aja Huang

AI從頭學(二七):AlexNet

AI從頭學(二八):Network in Network 

AI從頭學(二九):GoogLeNet

AI從頭學(三0):Conv1

-----

FB社團:台灣「人工智慧」社團

FB社團:AI 

DRL實作團(目錄)

DRL實作團(目錄)

2017/05/04

DRL實作團 - 參加辦法與會員編號



DRL實作團0001:Active object localization with deep reinforcement learning

DRL實作團0002:Active Object Localization

DRL實作團0003:Detecting Events and Key Actors

DRL實作團0004:Support Vector Machine

DRL實作團0005:Paceline

DRL實作團0006:GPU

DRL實作團0007:CNN

DRL實作團0008:SVM

DRL實作團0009:SMO

DRL實作團0010:SSOR 

每天來一點 Deep Learning(一二):Filter

每天來一點 Deep Learning(一二):Filter

2017/07/13

CNN 跟傳統的 MLP 最大的不同點是 CNN 要處理影像。
影像最基本的元素之一是線條,各種方向的線條。
這時,需要 edge filters。

1x1,無法濾出線條。

-----

2x2,沒有中心點。

1 1
-1 -1

-----

1 + 1
+ + +
-1 + -1

-----

我們有理由相信,下面的 Gx filter 是由上面的方式得來。

1 2 1
0 0 0
-1 -2 -1

平坦的圖形,經過 Gx,會變為 0。有坡度差,則可以顯示為上坡或下坡。

接下來的 graph pairs,上方的圖經過 Gx 的 convolution,變成下方的圖。水平線就被濾出來了。這些例子,要想成一塊很大的圖只取 7x7。

-----

1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1

0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0

-----

1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1
2 2 2 2 2 2 2
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1

0 0 0 0 0 0 0
0 0 0 0 0 0 0
-4 -4 -4 -4 -4 -4 -4
0 0 0 0 0 0 0
4 4 4 4 4 4 4
0 0 0 0 0 0 0
0 0 0 0 0 0 0

-----

1 1 1 1 1 1 1
1 1 1 1 1 1 1
2 2 2 2 2 2 2
2 2 2 2 2 2 2
2 2 2 2 2 2 2
1 1 1 1 1 1 1
1 1 1 1 1 1 1

0 0 0 0 0 0 0
-4 -4 -4 -4 -4 -4 -4
-4 -4 -4 -4 -4 -4 -4
0 0 0 0 0 0 0
4 4 4 4 4 4 4
4 4 4 4 4 4 4
0 0 0 0 0 0 0

-----

1 1 1 1 1 1 1
2 2 2 2 2 2 2
2 2 2 2 2 2 2
2 2 2 2 2 2 2
2 2 2 2 2 2 2
2 2 2 2 2 2 2
1 1 1 1 1 1 1

-4 -4 -4 -4 -4 -4 -4
-4 -4 -4 -4 -4 -4 -4
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
4 4 4 4 4 4 4
4 4 4 4 4 4 4

跑步(八四):15圈

跑步(八四):15圈

2017/07/11

熱身2,跑(5*3)。

-----

熱啊!

Thursday, July 06, 2017

每天來一點 Deep Learning(一一):Statistics

每天來一點 Deep Learning(一一):Statistics

2017/07/06

之前修過統計。

前幾年寫論文時,為了分析數據,又研究了一下 ANOVA。

最近則是看 Deep Learning 與 SVM 時,遇到一堆統計。

為什麼呢?

ML、DL 這些演算法,從小數據導出一個模型,然後用在大數據(或者真實世界的無窮數據)上。

我想這就是統計的本質吧:用數學來解釋資料,希望能以小博大。只是 DL 的函數超複雜就是。

所以,在每天來一點 Deep Learning 之前,我們是不是應該每天來一點統計呢?

跑步(八三):15圈

跑步(八三):15圈

2017/07/06

熱身2,跑(5*3)。

-----

早點起床(七點),跑步就不會太熱!

跑步(八二):15圈

跑步(八二):15圈

2017/07/04

熱身2,跑(5*3)。

-----

過熱,跑到第三 round 縮缸。

Monday, July 03, 2017

Cloud(目錄)

Cloud(目錄)

2017/06/27




Cloud(一):CDN

Cloud(二):HLS

Cloud(三):HLS lab 

Cloud(三):HLS lab

Cloud(三):HLS lab

2017/07/03

前言:

因應工作上的需要,找了些 HLS 的相關資料 [1]-[10],預備在 nginx 上實現 [11]-[13]。長期規劃,則是結合 CDN [14], [15]。

-----

Summary:

以下分為五節介紹 HLS 在 nginx 上的實現。 

1. HLS (.m3u8, .ts), [1]-[8]

2. ffmpeg (Elastic Transcoder), [2], [4], [9], [15]

3. video.js (player), [7], [8]

4. nginx (Web Server), [9]-[13]

5. CDN, [3], [5], [14], [15]

-----

1. HLS (.m3u8, .ts), [1]-[8]

HTTP Live Streaming (HLS) 是蘋果推出的通訊協定。由字面上看,主要就是透過 HTTP 的協定,以串流的方式直播影音資料。

最簡單的認知,就是把影音串流重新編碼成 H.264 的視訊格式與 AAC 的音訊格式,然後切成一片一片的 MPEG-TS 檔(副檔名為 .ts),這些檔的名單是一個 .m3u8 的文字檔。用戶端首先從伺服器下載 .m3u8,然後根據 .ts 檔,一一下載播放。伺服器端會不斷地更新 .m3u8 以及 .ts 的檔案。

透過 HTTP 則是因為這樣可以避開大多數企業的防火牆,只要網頁瀏覽器就可以執行播放的功能。

-----

圖1.1是 HLS 在伺服器端的流程。

左上是 AAC 的音訊編碼,左下是 H.264 的視訊編碼。右上則是把這兩者整合成 HLS 的格式,然後準備切片。

圖1.2的分片策略是重點。首先是 isKeyFrame,這個「應該」指的是 MPEG 格式裡的 I frames [16]。因為它要避免解碼失敗。

ts_muxer_。先確定要不要寫入一個新檔,寫入新檔後,就更新影片名單。然後再準備一個新文件。

圖1.3則是一個 TSMuxer 的類別,以及相關函式的宣告。 



Fig. 1.1. HLS pipeline [6].



Fig. 1.2. 分片策略 [6].



Fig. 1.3. TSMuxer [6].

-----

圖2.1則是 .m3u8 的中文解說。

首先看到圖2.2a,設定為每個 .ts 檔最多4秒。
#EXT-X-TARGETDURATION:4

共有5個檔,所以延遲時間大約是20秒。
4秒後再去抓,4460已經播出,名單也就更新到4461~4465。
如果沒有更新,則再過2秒再去抓 .m3u8。

圖2.2c,Twitch 的延遲時間約為30秒。
圖2.2d,livehouse.in 的延遲時間約為18秒。



Fig. 2.1. M3U [6].



Fig. 2.1a. An M3U file [8].



Fig. 2.1b. An M3U file (updated) [8].



Fig. 2.1c. An M3U file from Twitch [8].



Fig. 2.1d. An M3U file from livehouse.in [8].

-----

2. ffmpeg (Elastic Transcoder), [2], [4], [9], [15]

要生成 .ts 與 .m3u8,一般使用的是 ffmpeg [2], [4], [9]。如果是在 AWS 上,可以採用 Elastic Transcoder [15]。

到首頁下載後,解壓縮,編譯,即可執行。
https://www.ffmpeg.org/ 

另外這是說明文件。
https://www.ffmpeg.org/ffmpeg-formats.html

圖3.1可以看到,參數設定選擇 libx264 跟 libfaac 的視訊與音訊程式庫。
圖3.2,輸入可以選擇檔案或 UDP 協定得到的流媒體。可用 ffplay 播放。
圖3.3,也可用來下載,把 .m3u8 存成影音檔。
圖3.4,可在 nginx 上執行。




Fig. 3.1. An example for ffmpeg [2].



Fig. 3.2. An example for ffmpeg [2].



Fig. 3.3. An example for ffmpeg [4].



Fig. 3.4. ffmpeg+nginx [9].

-----

3. video.js (player), [7], [8]

要在網頁上播放的話,可以選擇 video.js。

首先是說明文件。
http://docs.videojs.com/ 

接下來是操作程序。有三種下載方式。圖4.1是 CDN 的下載頁面。
http://videojs.com/getting-started/ 

此連結示範播放器。
http://videojs.github.io/videojs-contrib-hls/ 

最新版的程式。
https://github.com/videojs/videojs-contrib-hls 
https://github.com/videojs/videojs-contrib-hls/releases/tag/v5.7.0

圖4.2,到此頁面下載 cideojs-contrib-hls 的 plugin。
http://videojs.com/plugins/

圖4.3是一小段在網頁上使用 video.js 的範例碼。
圖4.4是更多的使用示範。

最後是 hls.js,video.js 之外的另一選擇。
https://github.com/dailymotion/hls.js/tree/master



Fig. 4.1. Acquiring Video.js [7].



Fig. 4.2. HLS plugin [7].



Fig. 4.3. Codes for Video.js and HLS [7].



Fig. 4.4. More codes for Video.js and HLS [7].

-----

4. nginx (Web Server), [9]-[13]

nginx 是目前相當流行的網頁伺服器 [9]-[13]。

說明文件。
http://nginx.org/en/docs/ 

下載。
http://nginx.org/download/nginx-1.10.0.tar.gz 

下載 HLS 的套件。
http://nginx.org/en/docs/http/ngx_http_hls_module.html

nginx 的主要功能有:HTTP server, core worker process architecture, SPDY, SSL termination, authentication, bandwidth management, reverse proxy options for HTTP, TCP, and Mail(參考圖5.1)。

至於 nginx plus 則有更進階的 load balancing and application delivery。要跟原廠取得 license 才能使用。進階版只提供 bin 格式,沒有原始碼可以修改。

圖5.2a是 Nginx Plus 在 AWS 上使用的架構圖。參考圖5.2b,使用前應有 VPC、EC2、ELB、Auto Scaling 與 Route 53 的基本知識。



Fig. 5.1. Advantages of Nginx Plus, p. 9 [12].



Fig. 5.2a. Nginx Plus at AWS, p. 3 [13].



Fig. 5.2b. Nginx Plus at AWS, p. 4 [13].

-----

5. CDN, [3], [5], [14], [15]

有關 CDN,在之前的文章已有介紹,在 Azure 上是 Blob Storages + CDN,在 AWS 上則是 S3 + CloudFront [14], [15]。

CDN 跟  HLS 最主要的關係,是切片後的影音檔可以透過 CDN 發佈,減少主伺服器的負擔,並加快使用者方的存取速度,以達成較好的體驗 [3], [5]。

-----

結論:

「總而言之,HLS 的設計搭上 CDN 基礎設施的愈趨完備,使得它成為目前多媒體串流服務的主流選項。以現在服務的品質及規模來看,這個組合會流行好一陣子。」 [5]。

-----

References

[1] 【梅森手扎】 Streaming 通訊協定 RTP RTCP RTSP RTMP HLS 介紹
http://mesonwu.blogspot.tw/2015/10/streaming-rtp-rtcp-rtsp-rtmp-hls.html

[2] Albert 的筆記本 HLS (HTTP Live streams) 介紹
http://albert-oma.blogspot.tw/2016/02/hls-http-live-streams.html

[3] Bits of Thoughts - nkbit_com 黃瓜切片 HTTP Live Streaming 原理簡介
http://blog.nkbit.com/2011/11/http-live-streaming.html

[4] HLS (Http live Streaming) 下載 @ 眼中的世界 隨意窩 Xuite日誌
http://blog.xuite.net/frida/eye/423464272-HLS+%28Http+live+Streaming%29+%E4%B8%8B%E8%BC%89

[5] HLS+CDN巧妙的串流技術組合 iThome
http://www.ithome.com.tw/voice/95294

[6] HTTP Live Streaming直播(iOS直播)技术分析与实现 - haibindev - 博客园
http://www.cnblogs.com/haibindev/archive/2013/01/30/2880764.html

[7] 使用 Video.js 在不同裝置上播放 HLS (HTTP Live Streaming) 串流影片 (mp4...等也可) @ 小雕雕的家   痞客邦 PIXNET
http://sweeteason.pixnet.net/blog/post/42655502-%E4%BD%BF%E7%94%A8-video.js-%E5%9C%A8%E4%B8%8D%E5%90%8C%E8%A3%9D%E7%BD%AE%E4%B8%8A%E6%92%AD%E6%94%BE-hls-%28http-live-stre

[8] 直播協議 hls 筆記 ? Huli's Blog
http://huli.logdown.com/posts/1142411-livestreamming-hls-note

[9] 架設 Nginx + HLS - 大隻熊的部落格 - udn部落格
http://blog.udn.com/mhwu1/12507493

[10] 筆記:使用 nginx 搭建一個 HLS(HTTP Live Streaming) & Rtmp 直播服務器 奈特的魔法科研
https://nat.moe/technologies/yinfb/973/

[11] 2013_Mastering Nginx

[12] 2016_Nginx, from beginner to Pro

[13] nginx-plus-on-the-aws-cloud
https://s3.amazonaws.com/quickstart-reference/nginx/plus/latest/doc/nginx-plus-on-the-aws-cloud.pdf

[14] Cloud(一):CDN
http://hemingwang.blogspot.tw/2017/06/cloudcdn.html
 
[15] Cloud(二):HLS
http://hemingwang.blogspot.tw/2017/06/cloudhls.html
 
[16] 視訊壓縮圖像類型 - 維基百科,自由的百科全書
https://zh.wikipedia.org/wiki/%E8%A6%96%E8%A8%8A%E5%A3%93%E7%B8%AE%E5%9C%96%E5%83%8F%E9%A1%9E%E5%9E%8B

每天來一點 Deep Learning(一0):Encapsulation

每天來一點 Deep Learning(一0):Encapsulation

2017/07/03

OO(物件導向)有很多不錯的特性,由於上次講的是程序導向的 function,所以 OO 可以先講封裝。

較早,Pascal 的發明人說過:Algorithms + Data Structures = Programs。

用很不嚴謹的說法,我們可以說:(Algorithms + Data Structures) = Objects。

封裝讓程式裡面的函式與資料結合的更緊密,也方便「繼承」。

還有一個不是那麼明顯,但非常重要的,杜絕了罪惡的淵藪,「全域變數」的濫用。

跑步(八一):15圈

跑步(八一):15圈

2017/07/01

熱身2,跑(5*3)。

-----

新菜單,習慣了...

天氣熱,熱身完就穿鞋跑了!

Thursday, June 29, 2017

Cloud(二):HLS

Cloud(二):HLS

2017/06/29

前言:

HLS 是近年廣受歡迎的影音協定。AWS 是預設的平台,先研究一下。

Summary:

本文以在 AWS 上實現 HLS 的串流影音為目標,找了相關資料 [1]-[15]。

最主要的有 Elastic Transcoder [2],可以用來轉換影音格式,以及把檔案切割成小塊的 .ts 檔,再透過 CloudFront [8]-[10] 這個 CDN service 發佈出去。

搭配 Elastic Transcoder 之外,主要有 S3/CloudFront [8]-[10](資料儲存、發佈),以及 SNS [11] 與 SQS [12]。

底下將一一介紹。

-----

TOC

1. Overview

2. Setting up your Python environment 
2.1. AWS SDK
2.2. S3
2.3. SNS
2.4. SQS
2.5. CloudFront

3. Elastic Transcoder

-----

1. Overview

圖1.1a是 AWS 主要服務的架構圖。

在沒有太多資訊的前提下,觀察這張圖,就可以獲得一些重要資訊了!

首先,有方塊、圓桶、跟雲三大類。雲,最重要的是 S3,其次是 CloudFront,這個其實就是 Azure 的 Blob Storage/CDN [15]。方塊的 EC2 是運算中心。RDS 是關連式資料庫,也是企業很重要的一環,但不在本文範圍內。

HLS,全名為 HTTP Live Streaming,方便用來傳遞影音資料到手機或桌機等,參考圖1.1b。


Fig. 1.1a. Overview of some of AWS services, p. 8 [7].



Fig. 1.1b. HTTP Live Streaming (HLS), p. 111 [2].

-----

圖1.2a是 Amazon 的資料中心。EC2、S3 位於某個資料中心。圖1.2b的藍點則是 edge nodes,你可以使用 CloudFront 這個功能讓你的資料可以透過這些輔助的資料伺服器發佈,CDN 的概念,請參考 [15]。



Fig. 1.2a. Amazon Global Infrastructure, p. 2 [4].



Fig. 1.2b. AWS regions and edge locations, p. 9 [7].

-----

圖1.3a將 AWS 上的服務分成幾大類,分別是 計算與網路、儲存與內容遞送、資料庫、配置與管理、分析、應用服務六大類。圖1.3b則將服務分為管理、計算、網路、儲存、監控五大類。

這些服務,後續有機會將一一介紹,本文會簡介 S3/CloudFront 與 SNS/SQS 這四項服務。



Fig. 1.3a. AWS console, p. 347 [4].



Fig. 1.3b. AWS Reference Architecture, p. 4 [4].

-----

2. Setting up your Python environment

在 [2] 裡面提供了四種語言作為開發工具,分別有 Java、Ruby、PHP、與 Python,本文選用 Python,參考圖2.1a。

圖2.1a為使用 Elastic Transcoder 實現 HLS 的指南與起步。

圖2.1b與2.1c可以找到兩段範例的程式碼。



Fig. 2.1a. Setting up your Python environment, p. 123 [2].



Fig. 2.1b. The HlsJobCreationSample.py file, p. 135 [2].



Fig. 2.1c. The script JobStatusNotificationSample.py, p. 137 [2].

-----

2.1. AWS SDK

圖2.2a是 SDK 的相關資訊,欲詳細使用 Python,則可參考 [14]。



Fig. 2.2a. AWS SDKs, p. 47 [1].

-----

2.2. S3

S3 全名是 Simple Storage Service,參考圖2.2b。它可以對應到 Azure 的 Blob Storage,最主要是存放一些不會經常改變的資料,如影音資料等,參考 [15]。稍後會有更多一點的簡介。



Fig. 2.2b. S3, p. 36 [1].

-----

2.3. SNS

SNS 全名是 Simple Notification Service,參考圖2.2c。

它是個發佈訊息的應用,如圖2.2d。

Publisher 將訊息以 Topic 區分,發佈到 SNS 上。Subscriber 則依之前訂閱的 Topic 接收訊息。Subscriber 可以是網頁伺服器或email位址或是SQS,參考圖2.2e。那 Publisher 是什麼呢?Elastic Transcoder 「應該」是一個。



Fig. 2.2c. SNS, p. 35 [1].



Fig. 2.2d. SNS, p. 1 [11].



Fig. 2.2e. SNS, p. 1 [11].

-----

2.4. SQS

SQS 全名是 Simple Queue Service,參考圖2.2f。

Queue 中文翻成佇列,圖2.2g是原廠文件提供的架構圖。這個圖不大容易理解,但文件有提到 queue 有 standard 跟 FIFO 兩種。然後還有 polling。

配合圖2.2h,就能稍微瞭解整個過程。首先有個亂數產生器,產生資料丟到佇列1,然後工作伺服器從裡面抓資料,處理完後再丟到佇列2。

SQS,大致上就是個非同步的資料存放處,你可以依你需求在各種服務中傳遞資料。



Fig. 2.2f. SQS, p. 38 [1].



Fig. 2.2g. SQS, p. 3 [12].



Fig. 2.2h. SQS, p. 135 [13].

-----

2.5. CloudFront

CloudFront 其實就是 CDN,參考圖2.3a與 [15]。

基本上,CloudFront 跟 S3 是一組的,S3 是本體,CloudFront 放分身,你離哪個分身比較近,那個分身就應機說法。

一個 account 下面最多有100個 buckets(圖2.3c),每個 bucket 可以存放「無限」個 objects,每個 object 大小則從 1 byte 到 5T(圖2.3b)。

關於 S3/CloudFront,有更多的參考資料(圖2.4),後續有機會再說明。



Fig. 2.3a. CloudFront, p.139 [5].



Fig. 2.3b. S3/CloudFront, p. 17 [7].



Fig. 2.3c. Bucket, p. 134 [3].



Fig. 2.3d. S3/CloudFront, p. 18 [7].



Fig. 2.4a. CDN service from AWS – CloudFront, p. 7 [6].



Fig. 2.4b. Global (Content) Delivery, p. v [7].



Fig. 2.4c. Storing Data with Amazon S3, p. xi [8].

-----

3. Elastic Transcoder

要執行,Elastic Transcoder 有四個主要的部分(圖3.1),分別是 Pipeline、Preset、Job、Notification。

Pipeline 也是一種 queue,但不是 SQS。你建一個 pipeline,然後可以開一堆 jobs 丟進去,然後一個一個處理(平行處理?),一個 job 一次就處理一個檔,但可以轉成多種格式。Preset 是一些設定,然後 notification 是讓你掌握進度。

咦,印出來的資料很多,沒幾句就講完了?

嗯,消化完,精華就是上面幾句話而已了。真有機會到 AWS 上做,再來發表心得了!



Fig. 3.1a. Getting Started with Elastic Transcoder, p. 4 [2].



Fig. 3.1b. Elastic Transcoder has four components, p. 1 [2].



Fig. 3.1c. Pipelines, p. 1 [2].



Fig. 3.1d. Presets, p. 2 [2].



Fig. 3.1e. Jobs, p. 1 [2].



Fig. 3.1f. Notifications, p. 2 [2].



Fig. 3.2. Working with Pipelines, p. 8 [2].



Fig. 3.3. Working with Presets, p. 43 [2].



Fig. 3.4. Working with Jobs, p. 16 [2].



Fig. 3.5. API Reference, p. 138 [2].

-----

這邊摘錄一下我認為很重要的一部份,是內容保護,雖然唱片業者都知道有這個,但如果你要跟他談生意,這個能講清楚,應該會有不少幫助。

圖4.1a是整個流程,圖4.1b有英文的步驟說明,現在就來翻成中文:

1. 使用者拜訪你伺服器上的網頁,然後伺服器會在使用者的瀏覽器上放一個 cookie。

2. 使用者從你的伺服器下載一個播放器(?)。

3. 播放器會到你的 CDN 上取得主播單,有 bit rates、解析度等資料。

4. 播放器呼叫你的伺服器,被確定合法後,就取得資料解密的鑰匙。

5. 播放器選擇不同的歌單,然後從 CDN 取得相關的媒體片段。

6. 播放器用鑰匙解密媒體片段,然後播放。



Fig. 4.1a. HLS Content Protection, p. 77 [2].



Fig. 4.1b. HLS Content Protection, p. 77 [2].

-----

這邊有兩種鑰匙(圖4.2a),一種給 pipeline,一種給 job,有個觀念就可以了,真要做時,再來仔細研究。

實際要做 HLS,其實不止 Elastic Transcoder、S3/CloudFront、SNS/SQS 這幾種服務。有鑰匙,就得用到 DynamoDB。然後你得實際在 EC2 上面寫你的 application。參考圖4.2b。

最後,圖4.2c超重要的,.m3u8 的歌單跟 .ts 的媒體切片,這個最近在 HLS 實作的文章上面讀到了,欲知詳情,且聽下回分解。



Fig. 4.2a. Keys for HLS Content Protection, p. 77 [2].



Fig. 4.2b. Streaming HLS Content Protection, p. 78 [2].



Fig. 4.2c. Output Key, p. 25 [2].

-----

結論:

AWS 有很好的服務架構與手冊,相關資料也很豐富,這應該是它的領先優勢之一。

手冊其實很早之前就下載了,這次重看,發現還不算太難瞭解,也許是我消化資料的能力又上一層了。

上 AWS 之前,打算先用 nginx 跟 ffmpeg 先在 linux 上試試 HLS。


-----

References

[1] 2016_Getting Started with Amazon AWS

[2] 2016_Amazon Elastic Transcoder Developer Guide

[3] 2014_Pro Apache Hadoop

[4] 2014_Pro PowerShell for Amazon Web Services, DevOps for the AWS Cloud

[5] 2015_Mastering AWS Development, (Chapter 3: Storage Lifecycle Management, Amazon CloudFront, pp. 139-146).

[6] 2015_Mastering AWS Development, (Chapter 10: AWS Billing and Amazon CDN Service, pp. 380-407).

[7] 2013_Resilience and Reliability on AWS, (Chapter 10: Global (Content) Delivery, pp. 123-143.)

[8] 2010_Host Your Web Site In The Cloud, Amazon Web Services Made Easy, (Chapter 4: Storing Data with Amazon S3, pp. 59-97).

[9] 2015_Amazon Web Services in Action, Chapter 7: Storing your objects: S3 and Glacier, 7.6 Using S3 for static web hosting, pp. 198-201.

[10] 2010_Implementing and Developing Cloud Computing Applications, Chapter 6 : Demystifying the Cloud: A Case Study Using Amazon’s Cloud Services (AWS), 6.5 Step One: Move Static Content to S3, pp. 126-130.

[11] 2017_Amazon Simple Notification Service Developer Guide

[12] 2017_Amazon Simple Queue Service Developer Guide

[13] 2015_Implementing Cloud Design Patterns for AWS

[14] 2015_Boto3 Documentation

[15] Cloud(一):CDN
http://hemingwang.blogspot.tw/2017/06/cloudcdn.html