套件 | flash.media |
類別 | public final class Camera |
繼承 | Camera EventDispatcher Object |
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
Camera 實體會以橫向外觀比例來擷取視訊。在可以變更螢幕方向的裝置上 (例如行動電話),附加至攝影機的 Video 物件只會在橫向外觀方向中顯示直立的視訊。因此,行動應用程式顯示視訊時應使用橫向方向,且不應自動旋轉。
iOS 上會鏡像處理前方攝影機的視訊。Android 則不會。
在具有自動對焦攝影機的行動裝置上,會自動啟用自動對焦。如果相機不支援連續自動對焦 (許多行動裝置配備的相機不支援),便會在將 Camera 物件附加至視訊串流,以及在呼叫 setMode()
方法時將相機對焦。在桌上型電腦上,自動對焦的行為取決於攝影機驅動程式和相關設定。
在 Android 與 iOS 的 AIR 應用程式中,當 AIR 應用程式不是作用中的前景應用程式時,攝影機不會捕捉視訊。此外,當應用程式在背景時,串流連線可能會中斷。在 iOS 上,當應用程式使用 GPU 顯示模式時,無法顯示攝影機視訊。但攝影機視訊仍然可以串流至伺服器。
AIR 描述檔支援:AIR for TV 裝置不支援此功能。如需有關跨多個描述檔之 API 支援的詳細資訊,請參閱 AIR 描述檔支援。請注意,針對 AIR for TV 裝置,Camera.isSupported
為 true
但是 Camera.getCamera()
永遠傳回 null
。在行動瀏覽器中不支援攝影機存取。
如需有關擷取音效的詳細資訊,請參閱 Microphone 類別。
重要:執行階段會顯示「私用」對話方塊,讓使用者選擇要允許或拒絕對該攝影機進行存取。請確定您的應用程式視窗大小至少為 215 x 138 像素,這是顯示對話方塊所需的最小尺寸。
若要建立或參照 Camera 物件,請使用 getCamera()
方法。
詳細資訊
相關 API 元素
屬性 | 定義自 | ||
---|---|---|---|
activityLevel : Number [唯讀]
攝影機偵測的移動量。 | Camera | ||
bandwidth : int [唯讀]
目前播出視訊內容可用的最高頻寬量,以位元組為單位。 | Camera | ||
constructor : Object
類別物件的參照或是特定物件實體的建構函數。 | Object | ||
currentFPS : Number [唯讀]
攝影機捕捉資料的速率,以每秒影格數為單位。 | Camera | ||
fps : Number [唯讀]
攝影機可擷取資料的最高速率,以每秒影格數為單位。 | Camera | ||
height : int [唯讀]
目前捕捉的高度,以像素為單位。 | Camera | ||
index : int [唯讀]
在列出所有可用攝影機的 Camera.names 陣列中指定攝影機位置的索引 (從零開始)。 | Camera | ||
isSupported : Boolean [靜態] [唯讀]
如果目前的平台支援 Camera 類別,則 isSupported 屬性會設為 true,否則會設為 false。 | Camera | ||
keyFrameInterval : int [唯讀]
完整傳輸的視訊影格 (稱為「關鍵影格」) 數,而非視訊壓縮演算法所製作的漸變影格。 | Camera | ||
loopback : Boolean [唯讀]
指出攝影機所擷取用於本機檢視的視訊會如同使用 Flash Media Server 進行即時傳輸一樣進行壓縮並解壓縮 (true),或是不進行壓縮 (false)。 | Camera | ||
motionLevel : int [唯讀]
叫用 activity 事件所需要的移動量。 | Camera | ||
motionTimeout : int [唯讀]
從攝影機停止偵測移動到叫用 activity 事件之間的毫秒數。 | Camera | ||
muted : Boolean [唯讀]
Boolean 值,指出使用者已在 Flash Player「私用」對話方塊中拒絕 (true) 或允許 (false) 存取攝影機。 | Camera | ||
name : String [唯讀]
目前攝影機的名稱,它是由攝影機硬體所傳回的。 | Camera | ||
names : Array [靜態] [唯讀]
所有可用攝影機名稱的字串陣列。 | Camera | ||
permissionStatus : String [靜態] [唯讀]
判斷應用程式是否已獲得使用攝影機的權限。 | Camera | ||
position : String [唯讀]
指定裝置上裝設攝影機的一側。 | Camera | ||
quality : int [唯讀]
圖片品質的必要水準,由每個視訊影格所套用的壓縮量決定。 | Camera | ||
width : int [唯讀]
目前捕捉的寬度,以像素為單位。 | Camera |
方法 | 定義自 | ||
---|---|---|---|
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
會在 EventDispatcher 物件註冊事件偵聽程式,以便讓偵聽程式收到事件的通知。 | EventDispatcher | ||
從像素資料的矩形區域中將位元組陣列填色,並且將每個像素的無正負號整數 (32 位元未相乘的像素值) 寫入位元組陣列中。 | Camera | ||
從像素資料的矩形區域中將向量填色。 | Camera | ||
會將事件傳送到事件流程。 | EventDispatcher | ||
將最後一個影格複製到點陣圖。 | Camera | ||
[靜態]
傳回捕捉視訊的 Camera 物件的參照。 | Camera | ||
會檢查 EventDispatcher 物件是否有對特定的事件類型註冊偵聽程式。 | EventDispatcher | ||
指出物件是否有已定義的指定屬性。 | Object | ||
指出 Object 類別的實體是否位於指定為參數的物件原型鏈中。 | Object | ||
指出指定的屬性是否存在,以及是否可列舉。 | Object | ||
會從 EventDispatcher 物件移除偵聽程式。 | EventDispatcher | ||
要求應用程式的攝影機權限。 | Camera | ||
指定完整傳輸的視訊影格 (稱為「關鍵影格」),而非視訊壓縮演算法所製作的漸變影格。 | Camera | ||
會指定是否要針對攝影機的本機檢視使用壓縮的視訊串流。 | Camera | ||
設定攝影機捕捉模式為最能符合特定要求的原生模式。 | Camera | ||
指定傳送 activity 事件所需的移動量。 | Camera | ||
為迴圈作業設定動態屬性的可用性。 | Object | ||
設定每秒最大頻寬量,或目前播出視訊內容所要求的圖片品質。 | Camera | ||
傳回代表此物件的字串,根據地區特定慣例進行格式化。 | Object | ||
會傳回指定之物件的字串形式。 | Object | ||
會傳回指定之物件的基本值。 | Object | ||
檢查此 EventDispatcher 物件是否已註冊事件偵聽程式,或者此物件的任何祖系已為特定事件類型註冊事件偵聽程式。 | EventDispatcher |
事件 | 摘要 | 定義自 | ||
---|---|---|---|---|
[廣播事件] 當 Flash Player 或 AIR 應用程式取得作業系統焦點並成為作用中時傳送。 | EventDispatcher | |||
於攝影機開始或結束工作階段時傳送。 | Camera | |||
[廣播事件] 當 Flash Player 或 AIR 應用程式失去作業系統焦點並成為非作用中時傳送。 | EventDispatcher | |||
當應用程式要求權限以使用裝置上的攝影機時傳送。 | Camera | |||
會在攝影機回報其狀態時傳送。 | Camera | |||
在新相機影格經過執行階段處理且可供複製之後傳送。 | Camera |
activityLevel | 屬性 |
activityLevel:Number
[唯讀] 語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
攝影機偵測的移動量。 值範圍是從 0 (未偵測到任何移動) 到 100 (偵測到大量的移動)。 這個屬性值可幫助您判斷是否需要將設定傳遞給 setMotionLevel()
方法。
如果攝影機可以使用,卻因為未呼叫 Video.attachCamera()
方法而尚未使用,這個屬性就會設定為 -1。
如果您只要串流未壓縮的本機視訊,則只有在已經將函數指定到此事件處理常式時,才需要設定這個屬性; 否則就不必定義它。
實作
public function get activityLevel():Number
擲回值
PermissionError — 應用程式沒有使用攝影機的權限。
|
相關 API 元素
bandwidth | 屬性 |
bandwidth:int
[唯讀] 語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
目前播出視訊內容可用的最高頻寬量,以位元組為單位。 值為 0 表示內容可視需要儘量使用頻寬,以維持所要求的影格品質。
若要設定這個屬性,請使用 setQuality()
方法。
實作
public function get bandwidth():int
擲回值
PermissionError — 應用程式沒有使用攝影機的權限。
|
相關 API 元素
currentFPS | 屬性 |
currentFPS:Number
[唯讀] 語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
攝影機捕捉資料的速率,以每秒影格數為單位。 您雖然無法設定這個屬性,但可使用 setMode()
方法來設定相關的屬性— fps
—它會指定您期望攝影機捕捉資料的最高影格速率。
實作
public function get currentFPS():Number
擲回值
PermissionError — 應用程式沒有使用攝影機的權限。
|
相關 API 元素
fps | 屬性 |
fps:Number
[唯讀] 語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
攝影機可擷取資料的最高速率,以每秒影格數為單位。 可能的最高速率視攝影機功能而定,所以這個影格速率未必能夠達到。
- 若要為這個屬性設定所需的值,請使用
setMode()
方法。 - 若要判斷攝影機目前捕捉資料的速率,請使用
currentFPS
屬性。
實作
public function get fps():Number
擲回值
PermissionError — 應用程式沒有使用攝影機的權限。
|
相關 API 元素
height | 屬性 |
height:int
[唯讀] 語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
目前捕捉的高度,以像素為單位。 若要設定這個屬性的值,請使用 setMode()
方法。
實作
public function get height():int
擲回值
PermissionError — 應用程式沒有使用攝影機的權限。
|
相關 API 元素
index | 屬性 |
index:int
[唯讀] 語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
在列出所有可用攝影機的 Camera.names
陣列中指定攝影機位置的索引 (從零開始)。
實作
public function get index():int
擲回值
PermissionError — 應用程式沒有使用攝影機的權限。
|
相關 API 元素
isSupported | 屬性 |
keyFrameInterval | 屬性 |
keyFrameInterval:int
[唯讀] 語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
完整傳輸的視訊影格 (稱為「關鍵影格」) 數,而非視訊壓縮演算法所製作的漸變影格。 預設值為 15,表示每個第 15 影格是關鍵影格。 值為 1 表示每個影格都是關鍵影格。 允許的值是 1 到 300。
實作
public function get keyFrameInterval():int
擲回值
PermissionError — 應用程式沒有使用攝影機的權限。
|
相關 API 元素
loopback | 屬性 |
loopback:Boolean
[唯讀] 語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
指出攝影機所擷取用於本機檢視的視訊會如同使用 Flash Media Server 進行即時傳輸一樣進行壓縮並解壓縮 (true
),或是不進行壓縮 (false
)。 預設值是 false
。
雖然壓縮的串流在進行測試 (例如預覽視訊品質設定) 時很有用,不過其處理成本相當高。 本機檢視會經過壓縮、編輯 (像是要透過即時連線進行傳輸一樣),然後解壓縮以供本機檢視。
若要設定這個值,請使用 Camera.setLoopback()
。 若要在此屬性為 true 時,設定所使用的壓縮量,請使用 Camera.setQuality()
。
實作
public function get loopback():Boolean
擲回值
PermissionError — 應用程式沒有使用攝影機的權限。
|
相關 API 元素
motionLevel | 屬性 |
motionLevel:int
[唯讀] 語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
叫用 activity
事件所需要的移動量。 可接受的範圍值介於 0 到 100 之間。 預設值為 50。
不論 motionLevel
屬性的值為何,都能顯示視訊。 如需詳細資訊,請參閱 setMotionLevel()
。
實作
public function get motionLevel():int
擲回值
PermissionError — 應用程式沒有使用攝影機的權限。
|
相關 API 元素
motionTimeout | 屬性 |
motionTimeout:int
[唯讀] 語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
從攝影機停止偵測移動到叫用 activity
事件之間的毫秒數。 預設值為 2000 (2 秒)。
若要設定這個值,請使用 setMotionLevel()
。
實作
public function get motionTimeout():int
擲回值
PermissionError — 應用程式沒有使用攝影機的權限。
|
相關 API 元素
muted | 屬性 |
muted:Boolean
[唯讀] 語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
Boolean 值,指出使用者已在 Flash Player「私用」對話方塊中拒絕 (true
) 或允許 (false
) 存取攝影機。 當此值變更時,就會傳送 status
事件。
實作
public function get muted():Boolean
擲回值
PermissionError — 應用程式沒有使用攝影機的權限。
|
相關 API 元素
name | 屬性 |
name:String
[唯讀] 語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
目前攝影機的名稱,它是由攝影機硬體所傳回的。
實作
public function get name():String
擲回值
PermissionError — 應用程式沒有使用攝影機的權限。
|
相關 API 元素
names | 屬性 |
names:Array
[唯讀] 語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
所有可用攝影機名稱的字串陣列。存取這個陣列不會顯示「Flash Player 私用」對話方塊。這個陣列會提供每個攝影機的索引 (從零開始),以及系統上的攝影機數目 (使用 names.length
)。
呼叫 names
必須詳細檢查硬體。在大多數的情況下,您只需要使用預設的攝影機。
實作
public static function get names():Array
擲回值
PermissionError — 應用程式沒有使用攝影機的權限。
|
相關 API 元素
permissionStatus | 屬性 |
position | 屬性 |
position:String
[唯讀] 語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 3.0 |
指定裝置上裝設攝影機的一側。
使用 position
屬性,可以判斷行動裝置上的攝影機是在裝置的前方或後方。下列函數會檢查每個可用攝影機,直到找出位於所需位置的攝影機。如果沒有攝影機位於所需的位置,則會傳回預設攝影機。
function getCamera( position:String ):Camera { var camera:Camera; var cameraCount:uint = Camera.names.length; for ( var i:uint = 0; i < cameraCount; ++i ) { camera = Camera.getCamera( String(i) ); if ( camera.position == position ) return camera; } return Camera.getCamera();
在行動裝置上,攝影機位置通常是 CameraPosition.FRONT
或 CameraPosition.BACK
。如果無法判斷攝影機的位置,則位置會回報為 CameraPosition.UNKNOWN
。在桌面平台上,位置永遠是 CameraPosition.UNKNOWN
。
此屬性可能使用的有效常數值是在 CameraPosition 類別中定義
實作
public function get position():String
擲回值
PermissionError — 應用程式沒有使用攝影機的權限。
|
相關 API 元素
quality | 屬性 |
quality:int
[唯讀] 語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
圖片品質的必要水準,由每個視訊影格所套用的壓縮量決定。 從 1 (最低品質,最大壓縮) 到 100 (最高品質,未壓縮) 範圍內可接受品質的值。 預設值為 0,這表示可視需要改變圖片的品質,以避免超過可用的頻寬。
若要設定這個屬性,請使用 setQuality()
方法。
實作
public function get quality():int
擲回值
PermissionError — 應用程式沒有使用攝影機的權限。
|
相關 API 元素
width | 屬性 |
width:int
[唯讀] 語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
目前捕捉的寬度,以像素為單位。 若要為這個屬性設定所需的值,請使用 setMode()
方法。
實作
public function get width():int
擲回值
PermissionError — 應用程式沒有使用攝影機的權限。
|
相關 API 元素
copyToByteArray | () | 方法 |
public function copyToByteArray(rect:Rectangle, destination:ByteArray):void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 11.4, AIR 3.4 |
從像素資料的矩形區域中將位元組陣列填色
將每個像素的無正負號整數 (32 位元未相乘的像素值) 寫入位元組陣列中。陣列會調整成所需的位元組數目,以容納所有像素。
參數
rect:Rectangle — 位於目前 BitmapData 物件的矩形區域。
| |
destination:ByteArray — ByteArray,代表指定之矩形中的像素。
|
擲回值
PermissionError — 應用程式沒有使用攝影機的權限。
| |
TypeError — rect 為 null。
| |
TypeError — destination 為 null
|
相關 API 元素
copyToVector | () | 方法 |
public function copyToVector(rect:Rectangle, destination:Vector.<uint>):void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 11.4, AIR 3.4 |
從像素資料的矩形區域中將向量填色。
將每個像素的無正負號整數 (32 位元未相乘的像素值) 寫入向量中。向量會調整成所需的項目數目,以容納所有像素。
參數
rect:Rectangle — 位於目前 BitmapData 物件的矩形區域。
| |
destination:Vector.<uint> — Vector<uint>,代表指定之 Rectangle 中的像素。
|
擲回值
PermissionError — 應用程式沒有使用攝影機的權限。
| |
TypeError — rect 為 null。
| |
TypeError — destination 為 null
|
相關 API 元素
drawToBitmapData | () | 方法 |
public function drawToBitmapData(destination:BitmapData):void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 11.4, AIR 3.4 |
將最後一個影格複製到點陣圖。
這個方法會將最後一個影格的內容複製到 BitmapData 實體。
參數
destination:BitmapData — 要包含最後一個影格的 BitmapData 實體物件。
|
擲回值
ArgumentError — 如果 destination 太小,則為 kInvalidBitmapDataError
|
相關 API 元素
getCamera | () | 方法 |
public static function getCamera(name:String = null):Camera
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
傳回捕捉視訊的 Camera 物件的參照。 若要開始擷取視訊,您必須將 Camera 物件附加到 Video 物件 (請參閱 Video.attachCamera()
)。 若要傳輸視訊到 Flash Media Server,請呼叫 NetStream.attachCamera()
,將 Camera 物件附加到 NetStream 物件。
多次呼叫 getCamera()
方法會參考到同一個攝影機驅動程式。 因此,如果您的程式碼包含 firstCam:Camera = getCamera()
和 secondCam:Camera = getCamera()
等程式碼,則 firstCam
和 secondCam
都會參照相同的攝影機 (使用者的預設攝影機)。
在同時具有前向式和後向式攝影機的行動裝置上,您一次只能從一台攝影機補捉視訊。
一般而言,您不應該傳遞 name
參數的值,而只需使用 getCamera()
傳回預設攝影機的參照。 藉由「攝影機設定」面板 (將稍後在本節中討論),使用者可以指定要使用的預設攝影機。
您無法使用 ActionScript 設定使用者存取攝影機的允許或拒絕權限設定,但可以顯示「Adobe Flash Player 設定」攝影機設定對話方塊,讓使用者設定攝影機權限。當使用 attachCamera()
方法的 SWF 檔嘗試將 getCamera()
方法傳回的攝影機附加至 Video 或 NetStream 物件時,Flash Player 會顯示一個對話方塊,讓使用者選擇允許或拒絕存取攝影機。(請確定您的應用程式視窗大小至少為 215 x 138 像素;這是 Flash Player 顯示對話方塊時要求的最小尺寸)。 當使用者回應這個對話方塊時,Flash Player 就會在 status
事件中傳回表示使用者回應的資訊物件:Camera.Muted
表示使用者拒絕存取攝影機;Camera.Unmuted
則表示使用者允許存取攝影機。若要在不處理 status
事件的情況下,判斷使用者是否已經拒絕或允許存取攝影機,請使用 muted
屬性。
在 Flash Player 中,使用者也可以為特定網域指定永久的私用設定,方法是在某個 SWF 檔正在播放時按一下滑鼠右鍵 (Windows 和 Linux) 或 Control+按一下 (Macintosh)、選取「設定」、開啟「私用」對話方塊,然後選取「記憶」。如果使用者選擇「記憶」,Flash Player 將不再詢問使用者是否要允許或拒絕來自這個網域的 SWF 檔存取攝影機。
注意:如果使用者已在「Flash Player 設定」對話方塊中選取「記憶」拒絕存取,attachCamera()
方法便不會叫用可允許或拒絕存取攝影機的對話方塊。在這種情況下,您可以藉由使用 Security.showSettings(SecurityPanel.PRIVACY)
為使用者顯示「Flash Player 私用」面板,提示使用者變更允許或拒絕設定。
如果 getCamera()
傳回 null
,就表示其它應用程式正在使用該攝影機,或是系統未安裝攝影機。 若要判斷是否已安裝任何攝影機,請使用 names.length
屬性。 若要顯示「Flash Player 攝影機設定」面板,以便讓使用者選擇 getCamera()
所參照的攝影機,請使用 Security.showSettings(SecurityPanel.CAMERA)
。
掃描硬體尋找攝影機,需要花費一段時間。當執行階段找到至少一部攝影機後,接著在整個播放程式實體中都不會再次掃描硬體。然而,如果執行階段找不到任何攝影機,它會在每次呼叫 getCamera
時進行掃描。當攝影機存在但是停用時,這種作法有很大的幫助。如果您的 SWF 檔提供了會呼叫 getCamera
的「再試一次」按鈕,Flash Player 便能在毋需使用者重新啟動 SWF 檔的狀況下,找到該部攝影機。
參數
name:String (default = null ) — 會指定要取得的攝影機,如 names 屬性傳回的陣列所判斷的一樣。 對於大部分應用程式而言,您可以省略這個參數來取得預設攝影機。 若要為這個參數指定值,請使用 Camera.names 陣列中從零開始之索引位置的字串形式。 例如,若要指定陣列中的第三部攝影機,請使用 Camera.getCamera("2") 。
|
Camera — 如果未指定 name 參數,這個方法會傳回預設攝影機的參照。如果其它應用程式正在使用它,則會傳回第一個可用攝影機的參照。(如果安裝了多部攝影機,使用者便能在「Flash Player 攝影機設定」面板上指定預設的攝影機)。如果沒有可使用的攝影機或是未安裝,則方法會傳回 null 。
|
事件
status: — 會在攝影機回報其狀態時傳送。 在存取攝影機之前,Flash Player 會顯示「私用」對話方塊,讓使用者選擇要允許或拒絕對該攝影機進行存取。如果 code 屬性值為 "Camera.Muted" ,就表示使用者已拒絕 SWF 檔存取使用者的攝影機。如果 code 屬性的值是 "Camera.Unmuted" ,表示使用者允許 SWF 檔存取使用者的攝影機。
|
相關 API 元素
範例 ( 如何使用本範例 )
Camera.getCamera()
方法會傳回 Camera 物件的參考,如果攝影機無法使用或未安裝則傳回 null。if 陳述式會檢查是否已偵測到攝影機,以及使用者是否允許存取攝影機。如果使用者拒絕存取,muted
屬性會設定為 true
。
通常在叫用 attachCamera()
方法時,會顯示對話方塊,提示使用者允許或拒絕 Flash Player 存取攝影機。不過,如果使用者拒絕存取並選取「記憶」選項,便不會顯示對話方塊,也不會顯示提示。為了確保使用者有允許存取攝影機的選項,
myTextField
文字欄位會指示使用者按一下文字欄位,以叫用「Flash Player 設定」對話方塊。
clickHandler()
方法會呼叫 Security.showSettings()
方法,此方法會顯示「設定」對話方塊的「私用」面板。如果使用者允許存取,則會傳送
StatusEvent.STATUS
事件,而且事件的 code
屬性值會設定為 Camera.Unmuted
(Camera 物件的 mute
屬性也會設定為 false
)。
如果使用者允許存取,statusHandler()
方法 (加入以偵聽使用者設定的狀態變更) 會叫用 connectCamera()
方法。connectCamera()
方法會使用所擷取串流的寬度和高度來實體化 Video 物件。為了顯示攝影機擷取的視訊,視訊串流的參考會附加至 Video 物件,並將 Video 物件加入顯示清單中。
Timer 物件也會啟動。每秒會傳送 1 個 Timer 物件的計時器事件,而且會叫用 timerHandler()
方法。timerHandler()
方法會顯示並更新 Camera 物件的一些屬性。
注意:在這個範例中,唯一變更的屬性是 currentFPS
屬性。
package { import flash.display.Sprite; import flash.media.Camera; import flash.media.Video; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.utils.Timer; import flash.events.TimerEvent; import flash.events.StatusEvent; import flash.events.MouseEvent; import flash.system.SecurityPanel; import flash.system.Security; public class Camera_getCameraExample extends Sprite { private var myTextField:TextField; private var cam:Camera; private var t:Timer = new Timer(1000); public function Camera_getCameraExample() { myTextField = new TextField(); myTextField.x = 10; myTextField.y = 10; myTextField.background = true; myTextField.selectable = false; myTextField.autoSize = TextFieldAutoSize.LEFT; if (Camera.isSupported) { cam = Camera.getCamera(); if (!cam) { myTextField.text = "No camera is installed."; } else if (cam.muted) { myTextField.text = "To enable the use of the camera,\n" + "please click on this text field.\n" + "When the Flash Player Settings dialog appears,\n" + "make sure to select the Allow radio button\n" + "to grant access to your camera."; myTextField.addEventListener(MouseEvent.CLICK, clickHandler); }else { myTextField.text = "Connecting"; connectCamera(); } addChild(myTextField); t.addEventListener(TimerEvent.TIMER, timerHandler); }else { myTextField.text = "The Camera class is not supported on this device."; } } private function clickHandler(e:MouseEvent):void { Security.showSettings(SecurityPanel.PRIVACY); cam.addEventListener(StatusEvent.STATUS, statusHandler); myTextField.removeEventListener(MouseEvent.CLICK, clickHandler); } private function statusHandler(event:StatusEvent):void { if (event.code == "Camera.Unmuted") { connectCamera(); cam.removeEventListener(StatusEvent.STATUS, statusHandler); } } private function connectCamera():void { var vid:Video = new Video(cam.width, cam.height); vid.x = 10; vid.y = 10; vid.attachCamera(cam); addChild(vid); t.start(); } private function timerHandler(event:TimerEvent):void { myTextField.y = cam.height + 20; myTextField.text = ""; myTextField.appendText("bandwidth: " + cam.bandwidth + "\n"); myTextField.appendText("currentFPS: " + Math.round(cam.currentFPS) + "\n"); myTextField.appendText("fps: " + cam.fps + "\n"); myTextField.appendText("keyFrameInterval: " + cam.keyFrameInterval + "\n"); } } }
requestPermission | () | 方法 |
public function requestPermission():void
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 24.0 |
要求應用程式的攝影機權限。
事件
PermissionStatus: — 由使用者授與/拒絕要求的權限時傳送。
|
setKeyFrameInterval | () | 方法 |
public function setKeyFrameInterval(keyFrameInterval:int):void
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
會指定完整傳輸的視訊影格 (稱為 「關鍵影格」),而非視訊壓縮演算法所製作的漸變影格。 這個方法只適用於使用 Flash Media Server 來傳輸視訊的狀況。
Flash 視訊壓縮演算法會透過僅傳輸上一個視訊影格已變更的部分來壓縮視訊,而這些部分就會被視為漸變影格。 視訊影格可以根據上一個影格的內容進行漸變處理。 不過,關鍵影格則是完整的視訊影格,並非從先前影格漸變的影格。
若要決定如何設定 keyFrameInterval
參數的值,請同時考量使用的頻寬和視訊播放輔助功能。 例如,針對 keyFrameInterval
指定較高的值 (會以較低的頻率傳送關鍵影格),便可以減少使用的頻寬。 不過,這麼做則會增加將播放磁頭定位於該視訊之特定點所需的時間,您可能必須漸變更多先前視訊影格的漸層,才能再繼續播放視訊。
反之,如果針對 keyFrameInterval
指定較低的值 (會以較高的頻率傳送關鍵影格),則會增加使用的頻寬,因為傳輸完整視訊影格的頻率會增加,不過可減少在錄製視訊內搜尋特定視訊影格所需的時間。
參數
keyFrameInterval:int — 指定完整傳輸的視訊影格 (稱為「關鍵影格」),而非視訊壓縮演算法所製作之漸變影格的值。 值為 1 表示每個影格都是關鍵影格,值為 3 則表示每個第三影格是關鍵影格,依此類推。 允許的值從 1 到 48。
|
擲回值
PermissionError — 應用程式沒有使用攝影機的權限。
|
相關 API 元素
setLoopback | () | 方法 |
public function setLoopback(compress:Boolean = false):void
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
會指定是否要針對攝影機的本機檢視使用壓縮的視訊串流。 這個方法只適用於使用 Flash Media Server 來傳輸視訊的狀況。將 compress
設定為 true
,可讓您更精確地查看使用者即時檢視視訊的狀況。
雖然壓縮的串流在進行測試目的 (例如預覽視訊品質設定) 時很有用,不過它也具有相當大的處理成本,因為本機檢視不僅進行壓縮而已,它會進行壓縮、編輯 (像是要透過即時連線進行傳輸一樣),然後解壓縮供本機檢視。
若要設定您在將 compress
設定為 true
時所用的壓縮量,請使用 Camera.setQuality()
。
參數
compress:Boolean (default = false ) — 會指定要使用壓縮的視訊串流 (true ) 或未壓縮的串流 (false ),以便針對攝影機正在接收的視訊進行本機檢視。
|
擲回值
PermissionError — 應用程式沒有使用攝影機的權限。
|
相關 API 元素
setMode | () | 方法 |
public function setMode(width:int, height:int, fps:Number, favorArea:Boolean = true):void
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
設定攝影機捕捉模式為最能符合特定要求的原生模式。 如果攝影機沒有符合您傳送之所有參數的原生模式,執行階段會選取最能夠合成要求模式的擷取模式。 這項操作可能會牽涉到裁切影像和丟棄影格。
根據預設,執行階段會視需要丟棄影格以維持影像的大小。若要將丟棄影格的數目降到最低 (即使這會造成影像縮小),請傳遞 false
做為 favorArea
參數。
當選擇原生模式時,執行階段會儘量嘗試維持所要求的比例。例如,如果您發出 myCam.setMode(400, 400, 30)
命令,而且攝影機上可用的最大寬度和高度值為 320 和 288,執行階段就會將寬度和高度都設定為 288。執行階段會藉由將這些屬性設定為等值的方式,維持您所要求的 1:1 比例。
若要在執行階段選取最接近您所要求值的模式之後,決定指定給這些屬性的值,請使用 width
、height
和 fps
屬性。
如果您使用的是 Flash Media Server,您也可以擷取單一影格,或建立延時攝影。 如需詳細資訊,請參閱 NetStream.attachCamera()
。
參數
width:int — 要求的捕捉寬度,以像素為單位。 預設值為 160。
| |
height:int — 要求的捕捉高度,以像素為單位。 預設值為 120。
| |
fps:Number — 攝影機捕捉資料所需的速率 (以每秒的影格數為單位)。 預設值為 15。
| |
favorArea:Boolean (default = true ) — 如果攝影機不具符合指定需求的原生模式,則會指定是否要操作寬度、高度和影格速率。 預設值為 true ,表示偏好維持捕捉的大小。使用這個參數會選擇最接近 width 和 height 值的模式,即使這樣做會因為降低影格速率而對效能產生不良的影響也一樣。 若要犧牲攝影機的高度與寬度來使影格速率最大化,請傳遞 false 做為 favorArea 參數。
|
擲回值
PermissionError — 應用程式沒有使用攝影機的權限。
|
相關 API 元素
範例 ( 如何使用本範例 )
「舞台」設定為不縮放。Camera.getCamera()
方法會傳回 Camera 物件的參考,如果攝影機無法使用或未安裝則傳回 null。如果攝影機存在,則會呼叫 connectCamera()
方法。connectCamera()
方法會實體化 Video 物件。為了顯示攝影機擷取的視訊,視訊串流的參考會附加至 Video 物件,並將 Video 物件加入顯示清單中。也會設定 MouseEvent.CLICK
事件的事件偵聽程式。當使用者按一下「舞台」之後,會叫用 clickHandler()
方法。此方法會檢查所擷取視訊的寬度,並設定攝影機擷取模式的寬度、高度和每秒影格要求率。為了使這些設定生效,必須移除並重新建立 Video 物件。視訊的寬度和高度也必須設定為 Camera 物件的寬度和高度。
package { import flash.display.Sprite; import flash.media.Camera; import flash.media.Video; import flash.events.MouseEvent; import flash.display.StageScaleMode; public class Camera_setModeExample extends Sprite { private var cam:Camera; private var vid:Video; public function Camera_setModeExample() { stage.scaleMode = StageScaleMode.NO_SCALE; cam = Camera.getCamera(); if (!cam) { trace("No camera is installed."); }else { connectCamera(); } } private function connectCamera():void { vid = new Video(); vid.width = cam.width; vid.height = cam.height; vid.attachCamera(cam); addChild(vid); stage.addEventListener(MouseEvent.CLICK, clickHandler); } private function clickHandler(e:MouseEvent):void { switch (cam.width) { case 160: cam.setMode(320, 240, 10); break; case 320: cam.setMode(640, 480, 5); break; default: cam.setMode(160, 120, 15); break; } removeChild(vid); connectCamera(); } } }
setMotionLevel | () | 方法 |
public function setMotionLevel(motionLevel:int, timeout:int = 2000):void
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
會指定傳送 activity
事件所需的移動量。 或者,設定在執行階段認為活動已經停止並傳送事件之前所需經過的無活動狀態毫秒數。
注意:不論 motionLevel
參數的值為何,都能顯示視訊。 這個參數只會決定在何時和何種環境下傳送事件,而不會決定是否實際捕捉或顯示視訊
若需要完全杜絕攝影機偵測移動,請為 motionLevel
參數傳遞 100 這個值,這樣就永遠不會傳送 activity
事件 (您可能只會為了測試目的而使用這個值。例如在傳送事件時,暫時停用一般情況下會觸發的任何處理常式)。
若要判斷攝影機目前偵測的移動量,請使用 activityLevel
屬性。 移動敏感度的值會直接對應到活動的值。 完全沒有移動的活動值為 0; 而經常移動的活動值則為 100。 不移動時,活動值會小於移動敏感度的值;而移動時,活動值則經常會超過移動敏感度的值。
這個方法和 Microphone.setSilenceLevel()
的目的相似,這兩種方法都可用來指定傳送 activity
事件的時機。 然而,這些方法對發佈串流所產生的影響卻截然不同:
Microphone.setSilenceLevel()
的設計是要讓頻寬最佳化。 當音效串流被視為靜音時,就不會傳送音效資料。 會改送單一訊息,表示已開始靜音。Camera.setMotionLevel()
的設計目的是偵測移動,而且不會影響頻寬的使用。 即使視訊串流未偵測到移動,它還是會傳送視訊。
參數
motionLevel:int — 會指定傳送 activity 事件所需的移動量。 可接受的範圍值介於 0 到 100 之間。 預設值為 50。
| |
timeout:int (default = 2000 ) — 指定在執行階段認為活動已經停止並傳送 activity 事件之前,必須經過無活動狀態的毫秒數。預設值為 2000 毫秒 (2 秒)。
|
擲回值
PermissionError — 應用程式沒有使用攝影機的權限。
|
相關 API 元素
範例 ( 如何使用本範例 )
Camera.getCamera()
方法會傳回 Camera 物件的參考,如果攝影機無法使用或未安裝則傳回 null。if 陳述式會檢查是否有可用的攝影機,並在找到時叫用 connectCamera()
方法。connectCamera()
方法會使用所擷取串流的寬度和高度來實體化 Video 物件。為了顯示攝影機擷取的視訊,視訊串流的參考會附加至 Video 物件,並將 Video 物件加入顯示清單中。(通常在叫用 attachCamera()
方法時,會顯示對話方塊,提示使用者允許或拒絕 Flash Player 存取攝影機。不過,如果使用者拒絕存取並選取「記憶」選項,便不會顯示對話方塊,也不會顯示提示。為了確保使用者有允許存取攝影機的選項,請使用
system.Security.showSettings()
方法以叫用「Flash Player 設定」對話方塊)。
在叫用 activity 事件之前,setMotionLevel()
方法會將活動範圍 (移動量) 設定為五,表示最小移動。在攝影機停止偵測移動和叫用 activity 事件之間的時間設定為 1 秒 (1000 毫秒)。在無活動狀態發生的 1 秒後或活動範圍達到五之後,會傳送 ActivityEvent.ACTIVITY
事件並叫用 activityHandler()
方法。如果事件是由活動範圍觸發,activating
屬性會設定為 true
,而且會啟動 Timer 物件。每秒會傳送 1 個 Timer object’ 的計時器事件,而且會叫用 timerHandler()
方法以顯示目前的活動範圍。(儘管等於或大於五的範圍會觸發計時器,但顯示的目前活動範圍可能是較小的數字)。
package { import flash.display.Sprite; import flash.media.Camera; import flash.media.Video; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.utils.Timer; import flash.events.TimerEvent; import flash.events.ActivityEvent; public class Camera_setMotionLevelExample extends Sprite { private var myTextField:TextField; private var cam:Camera; private var t:Timer = new Timer(1000); public function Camera_setMotionLevelExample() { myTextField = new TextField(); myTextField.background = true; myTextField.selectable = false; myTextField.autoSize = TextFieldAutoSize.LEFT; cam = Camera.getCamera(); if (!cam) { myTextField.text = "No camera is installed."; }else { myTextField.text = "Waiting to connect."; connectCamera(); } addChild(myTextField); t.addEventListener(TimerEvent.TIMER, timerHandler); } private function connectCamera():void { var vid:Video = new Video(cam.width, cam.height); vid.x = 10; vid.y = 10; vid.attachCamera(cam); addChild(vid); cam.setMotionLevel(5, 1000); cam.addEventListener(ActivityEvent.ACTIVITY, activityHandler); } private function activityHandler(e:ActivityEvent):void { if (e.activating == true) { t.start(); } else { myTextField.text = "Everything is quiet."; t.stop(); } } private function timerHandler(event:TimerEvent):void { myTextField.x = 10; myTextField.y = cam.height + 20; myTextField.text = "There is some activity. Level: " + cam.activityLevel; } } }
setQuality | () | 方法 |
public function setQuality(bandwidth:int, quality:int):void
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
設定每秒最大頻寬量,或目前播出視訊內容所要求的圖片品質。 這個方法通常只適用於使用 Flash Media Server 來傳輸視訊的狀況。
用這個方法來指定,播出視訊內容的哪一種元素對應用程式比較重要:使用的頻寬或是圖片品質。
- 若要表示使用的頻寬應列為優先,請傳遞一個值做為
bandwidth
的值,並傳遞 0 做為quality
的值。 執行階段會在指定的頻寬範圍內,儘量以最高的品質傳輸視訊。執行階段會視需要降低圖片品質,以避免超出指定的頻寬範圍。一般而言,當移動增加時,品質就會降低。 - 若要表示品質應列為優先,請傳遞 0 做為
bandwidth
的值,並傳遞一個數值做為quality
的值。 執行階段會儘量使用必要的最高頻寬來維持指定的品質。執行階段會視需要降低影格速率以維持圖片品質。一般而言,當移動增加時,使用的頻寬也會增加。 - 若要指定頻寬和品質一樣重要,請將數值傳遞給這兩個參數。 執行階段會傳輸未超出指定頻寬而能達到指定品質的視訊。執行階段會視需要降低影格速率,以便在不超出指定頻寬的狀況下維持圖片的品質。
參數
bandwidth:int — 指定目前播出視訊內容可使用的最大頻寬量,以每秒位元組為單位。 若要指定視訊可儘量使用頻寬以維持 quality 的值,請傳遞 0 給 bandwidth 。預設值為 16384。
| |
quality:int — 指定圖片品質之必要水準的整數,由每個視訊影格所套用的壓縮量決定。從 1 (最低品質,最大壓縮) 到 100 (最高品質,未壓縮) 範圍內可接受的值。 若要指定可視需要改變圖片品質以防止超出頻寬,請將 0 傳遞給 quality 。
|
擲回值
PermissionError — 應用程式沒有使用攝影機的權限。
|
相關 API 元素
activity | 事件 |
flash.events.ActivityEvent
屬性 ActivityEvent.type =
flash.events.ActivityEvent.ACTIVITY
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
於攝影機開始或結束工作階段時傳送。 呼叫 Camera.setMotionLevel()
,指定觸發 activating
為 true
的 activity
事件所需的移動量,或觸發 activating
為 false
的 activity
事件之前必須經過的沒有任何活動時間。
ActivityEvent.ACTIVITY
常數會定義 type
屬性值 (activity
事件物件)。
這個事件具有下列屬性:
屬性 | 值 |
---|---|
activating | 如果裝置為作用中,則為 true ,否則為 false (停用)。 |
bubbles | false |
cancelable | false ;沒有要取消的預設行為指令。 |
currentTarget | 正主動使用事件偵聽程式處理 Event 物件的物件。 |
target | 開始或結束工作階段的物件,例如 Camera 或 Microphone 物件。 |
permissionStatus | 事件 |
flash.events.PermissionEvent
屬性 PermissionEvent.type =
flash.events.PermissionEvent.PERMISSION_STATUS
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 24.0 |
當應用程式要求權限以使用裝置上的攝影機時傳送。檢查 status
屬性的值,以判斷是否已授與或拒絕權限
相關 API 元素
status | 事件 |
flash.events.StatusEvent
屬性 StatusEvent.type =
flash.events.StatusEvent.STATUS
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 9, AIR (unsupported) |
會在攝影機回報其狀態時傳送。 在存取攝影機之前,執行階段會顯示「私用」對話方塊,讓使用者選擇要允許或拒絕對該攝影機進行存取。如果 code
屬性值為 "Camera.Muted"
,就表示使用者已拒絕 SWF 檔存取使用者的攝影機。如果 code
屬性的值是 "Camera.Unmuted"
,表示使用者允許 SWF 檔存取使用者的攝影機。
注意:AIR 平台不會傳送這個事件。它僅適用於 Flash Player。
定義status
事件物件的 type
屬性值。
這個事件具有下列屬性:
屬性 | 值 |
---|---|
bubbles | false |
cancelable | false ;沒有要取消的預設行為指令。 |
code | 物件狀態的說明。 |
currentTarget | 正主動使用事件偵聽程式處理 Event 物件的物件。 |
level | 訊息的類別,例如 "status" 、"warning" 或 "error" 。 |
target | 回報其自身狀態的物件。 |
相關 API 元素
videoFrame | 事件 |
flash.events.Event
屬性 Event.type =
flash.events.Event.VIDEO_FRAME
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 11.4, AIR 3.4 |
在新相機影格經過執行階段處理且可供複製之後傳送。
Event.VIDEO_FRAME
常數會定義 videoFrame
事件物件的 type
屬性值。
這個事件具有下列屬性:
屬性 | 值 |
---|---|
bubbles | false |
cancelable | false ;沒有要取消的預設行為指令。 |
target | 傳送此事件的 Camera 物件。 |
相關 API 元素
activity
事件,然後由 activityHandler()
方法進行捕捉,以列印事件的相關資訊。
注意:攝影機必須連接至您的電腦,才能讓此範例正常工作。
package { import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.*; import flash.media.Camera; import flash.media.Video; public class CameraExample extends Sprite { private var video:Video; public function CameraExample() { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; var camera:Camera = Camera.getCamera(); if (camera != null) { camera.addEventListener(ActivityEvent.ACTIVITY, activityHandler); video = new Video(camera.width * 2, camera.height * 2); video.attachCamera(camera); addChild(video); } else { trace("You need a camera."); } } private function activityHandler(event:ActivityEvent):void { trace("activityHandler: " + event); } } }
Tue Jun 12 2018, 03:47 PM Z