Posted on

初探OSMF的plugs-in開發

這篇文章是我看完下面的網頁後,所寫的中文心得:
http://osmf.org/dev/osmf/OtherPDFs/osmf_plugin_dev_guide.pdf

建立一個plug-in的方式

1. 建立一個PluginInfo物件,並且寫一個下面的函數讓OSMF去取得PluginInfo的物件

public function get pluginInfo():PluginInfo
{
	return _pluginInfo;
}

2. 建立一個物件繼承PluginInfo,然後建立一個Vector.執行super(items)

public function HelloWorldPluginInfo()
{
	var items:Vector.<mediaFactoryItem> = new Vector.<mediaFactoryItem>();
	// Create the MediaFactoryItem and add to our list of items.
	var item:MediaFactoryItem = new MediaFactoryItem
	("com.example.helloworld", canHandleResourceFunction, mediaElementCreationFunction);
	items.push(item);
	// Pass the list to the base class.
	super(items);
}

ps: 在建立MediaFactoryItem時會傳入三個參數
第一個參數是一串string,這個MediaFactoryItem的id
第二個參數是一個函數,當有任何資源被指定給MediaFactory.createMediaElement時,這函數會被呼叫,
傳入被指定的資源,回傳一個布林值代表是否要呼叫第三個參數所傳入的函數

private function canHandleResourceFunction(resource:MediaResourceBase):Boolean

第三個參數也是一個函數,當有任何資源被指定給MediaFactory.createMediaElement且第二個參數傳回的值為true時會被呼叫
不會傳入東西,然後要傳回一個MediaElement

private function mediaElementCreationFunction():MediaElement

那建立plugin的方式有兩種:
1. 靜態建立(把plugin用includes進src裡或加進lib庫裡的方式去呼叫)

mediaFactory.loadPlugin(new PluginInfoResource(new HelloWorldPluginInfo()));

2. 動態建立(把plugin用載入swf檔的方式去呼叫)

mediaFactory.loadPlugin(new URLResource("http://example.com/HelloWorldPlugin.swf"));

下載osmf的資料夾裡面有一個sample,裡面有許多plugin的範例
可以研究其使用方式

Plug-in 種類有三種

1. Standard Plug-in (必須指定為 MediaFactoryItemType.STANDARD)
	用來建立與回傳單一 MediaElement
	Standard Plug-in 有兩種子類型,客製化的與 OSMF 內建的 Plug-in


2. Proxy Plug-in (必須指定為 MediaFactoryItemType.PROXY)
	必須回傳一個空的 ProxyElement 或子類物件
	用來代理其他已經建立好的 Element

	可以讓開發者以非侵入的方式改變 MediaElement 的行為
	譬如一個 Proxy Plug-in 可以關閉任何 VideoElement Seeking 功能而不需要改變 Player 程式

	Proxy Plug-in 會產生一個空的 ProxyElement
	MediaFactory 在前一個 MediaElement 回傳之前,將 MediaElement 注入到 ProxyElement
	因為 ProxyElement 與 MediaElement 具有相同的介面
	Player 程式可以與之互動而不需要知道它是 ProxyElement
	所有個方法與屬性呼叫都會從代理的 MediaElement 返回,除非 ProxyElement 想要修改行為


3. Reference Plug-in
	Plug-in 會取得一或多個 MediaElement 參考進行操作
	大多數情況 Ref. Plug-in 也會產生一個自己的 MediaElement

	譬如 Reference Plug-in 封裝 SWF 壓在 VideoElement 上並取得該參考
	然後 SWF Overlay 可以控制 VideoElement
	或者封裝某些追蹤的邏輯,監聽 VideoElement 並送出報告

	建立 Reference Plug-in 必須要提供 PluginInfo.mediaElementCreationNotificationFunction 方法
	每次當 MediaFactory 建立 MediaElement 時候都會呼叫該方法
Posted on

OSMF簡介

OSMF是一個開源且免費的Action Script框架,用以建置多媒體播放器。

現今的播放器很多時候不止是播放器,它們可能需要連接至CDN、呈現廣告、補捉使用者事件給伺服器分析、在使用者介面上提供社交功能等…。每個功能可能都會需要該方面的專業人士去專門開發,而OSMF就是為了解決這個狀況,降低開發成本而產生的,在OSMF裡,開發人員所開發的播放器,可以透過一套標準的API,與第三方所開發的plug-in功能整合。

簡單來說,可能今天我的播放器想要與聊天功能整合、或特定事件引發特定廣告,我們可以用OSMF所提供的標準API去開發相關功能,第三方程式不需要關心播放器相關議題,只需透過OSMF所提供的API來做,以提高程式的重用性。

OSMF的開發核心思想是『hooks』,每一個插件都是可被動態加載的功能,可被宣告為動態或靜態載入。靜態載入是指編譯時就被編譯進去、而動態載入則是在播放時再動態載入SWF插件。

Plug-ins分成可視與非可視的元件,可視元件可在載入swf時覆蓋原本的使用者介面(或一個暫停按鈕),非可視元件可將使用者操作紀錄和分析資料傳送給分析伺服器。

在OSMF裡,plug-in是declarative(宣告性)的。plug-in的功能是經由OSMF的API去做宣告,framework只負責檢查插件的功能,然後建立插件與媒體播放器之間的關係。plug-in無法直接存取任何播放器的內容,而OSMF則是扮演著plug-in和media player之間的溝通者。這可以確定播放器和插件之間的溝通是有標準化的。

MediaFactory是處理media和plug-in之間的溝通者,開發player的developer用MediaFactory去載入plug-in並產生MediaElements。雖然我們也可以直接創建MediaElements,但使用MediaFactory產生的MediaElements可讓我們用載入的插件影響原來的輸出結果。

Posted on

OSMF相關資源

介紹

  1. OSMF第一步
  2. Open Source Media Framework中文介紹
  3. 開源媒體框架(OSMF)的介紹和概況:上 [譯]
  4. Open Source Media Framework – Plug-in Developer’s Guide
  5. Open Source Media Framework Developer’s Guide

簡報

  1. Almer Blank – OSMF Slides and Code from FITC SF
  2. David Hassoun – 360 Flex Going Deep with OSMF
  3. OSMF Presentation

教學

  1. DZone – Open Source Media Framework Building Simple Custom Video Players
  2. ADC – Tag Search – OSMF