SunVideo Plus 1.3 使用者指南：SunVideo Plus 範例程式

上一頁 | 下一頁 | 目錄
SunVideo Plus 1.3 使用者指南

# 4

# SunVideo Plus 範例程式

本章內容涵蓋 SunVideo Plus 程式設計工具以及 XIL 範例程式。SunVideo Plus 軟體中包括有幾個範例程式的原始程式碼。下表列出這些程式碼的名稱，並且逐一簡略的加以說明，然後再提供各項語法和相關選項的詳細說明。這些程式也能用來驗證 SunVideo Plus 介面卡的動作是否正常。

#### 表 4-1 SunVideo Plus 範例程式

範例程式 | 說明
`swmtool` | 透過 GUI 安裝 SunVideo Plus 的工具程式。
`o1k_audrec` | 將音訊錄製到檔案的工具程式。
`o1k_audplay` | 從檔案播放音訊的工具程式。
`o1k_audloop` | 將音訊輸入直接轉接到音訊輸出的工具程式。
`soundtool` | 能夠錄製、播放和修改 u-law 音訊檔的 GUI 工具程式。
`xil_compress` | 擷取和壓縮視訊，並將壓縮後的資料儲存到檔案的 XIL 範例程式。
`xil_decompress` | 從檔案讀取壓縮後的資料，予以解壓縮，並且顯示出解壓縮後的視訊訊號的 XIL 範例程式。
`xil_display` | 擷取並顯示視訊的 XIL 範例程式。
`xil_video_broadcast/xil_video_receiver` | 有兩個 XIL 範例程式：broadcast 透過 TCP 傳送擷取壓縮後的視訊資料；receiver 則接收這些視訊資料流，解壓縮並顯示影像。
`xil_video_broadcast/xil_video_receiver` | 此範例程式的功能跟上項範例相同，但是壓縮格式增加 H.261 通訊協定。
`o1k_conf` | 使用 XIL 和 SunVideo Plus 音訊程式庫建立的點對點音訊/視訊會議範例程式。
`o1k_ctl` | 用來變更 SunVideo Plus 輸入來源的視訊控制器。

## 錄製音訊

`o1k_audrec` 是一個在指令行啟動的工具程式，用來錄製音訊資料並儲存到檔案。

以下為啟動 `o1k_audrec` 範例程式的指令語法：

    hostname% o1k_audrec 選項 -o 檔案名稱

下表說明指令的選項和預設值。

#### 表 4-2 `o1k_audrec` 選項

選項 | 說明和設定值 | 預設值
`-D` device | 裝置名稱 | `/dev/o1k0`
`-f` format | 編碼格式 (0=ULAW, 1=ALAW, 2=PCM8, 3=PCM16, 4=G722) | `0`
`-r` rate | 取樣頻率 (8000, 11025, 16000, 22050) | `8000`
`-c` channel | 通道 (1, 2) | `1`
`-p` port | 輸入連接埠 (0=LINE, 1=MIC) | `0`
`-g` gain | 輸入增益 (0 .. 1.0) | `.125`
`-m` mgain | 監視訊號增益 (0 .. 1.0) | `0`
`-I` information | 音訊檔案字串資訊 | `""`
`-b` size | 緩衝區大小 | `1000`
`-h` amount | 裝載後列出散列標記 | `0`

## 播放音訊

`o1k_audplay` 是一個在指令行啟動的工具程式，它能夠播放音訊檔案。

以下為啟動 `o1k_audplay` 範例程式的指令語法：

    hostname% o1k_audplay 選項 -i 檔案名稱

下表說明指令的選項和預設值。

#### 表 4-3 `o1k_audplay` 選項

選項 | 說明和設定值 | 預設值
`-D` device | 裝置名稱 | `/dev/o1k0`
`-v` gain | 輸出增益 (0 .. 1.0) | `1.0`
`-b` size | 緩衝區大小 | `1000`

## 轉接音訊

`o1k_audloop` 是一個在指令行啟動的工具程式，將來自音訊輸入的音源訊號轉接到音訊輸出。

以下為啟動 `o1k_audloop` 範例程式的指令語法：

    hostname% o1k_audloop 選項

下表說明指令的選項和預設值。

#### 表 4-4 `o1k_audloop` 選項

選項 | 說明和設定值 | 預設值
`-D` device | 裝置名稱 | `/dev/o1k0`
`-f` format | 編碼格式 (0=ULAW, 1=ALAW, 2=PCM8, 3=PCM16, 4=G722) | `0`
`-r` rate | 取樣頻率 (8000, 11025, 16000, 22050) | `8000`
`-c` channel | 通道 (1, 2) | `1`
`-p` port | 輸入連接埠 (0=LINE, 1=MIC) | `0`
`-g` gain | 輸入增益 (0 .. 1.0) | `.125`
`-v` gain | 輸出增益 (0 .. 1.0) | `1.0`
`-b` size | 緩衝區大小 | `1000`

## `soundtool` 程式

`soundtool` 是一個用於錄製、播放和修改 u-law 音訊檔案 (壓縮後的音訊檔案) 的 GUI 工具程式。

以下為啟動 `soundtool` 範例程式的指令語法：

    hostname% soundtool [-D 裝置]

下圖顯示執行 `soundtool` 範例程式顯示的畫面。

##### 圖 4-1 `soundtool` 畫面

`soundtool` 是隨著 `SUNWaudemo` 軟體套件一起發行的一個示範程式。通常會安裝到 `/usr/demo/SOUND/src/soundtool/` 目錄中。`soundtool` 使用 `libaudio` 音訊程式庫和其他幾項系統呼叫 (例如：open/close、read/write、`ioctl`，和 `fcntl` 等)，能夠在標準的 Sun 硬體和音訊裝置上作業。隨著 SunVideo Plus 軟體一起發行的 `soundtool` 示範版原始程式碼會安裝到 O1KHOME 的範例程式目錄中 (通常是 `/opt/SUNWo1kp/examples/soundtool`)。

## 使用 SunVideo Plus 控制台

SunVideo Plus 控制台：`o1k_ctl` 能夠讓您以靜態或動態方式變更安裝在您的系統上各個 SunVideo Plus 不同的音訊/視訊屬性 (例如：視訊/音訊輸入選擇、音訊音量/增益、視訊亮度、對比等等)。

| 開啟 SunVideo Plus 控制台：
    hostname% o1k_ctl

下圖顯示出 SunVideo Plus 控制台。

##### 圖 4-2 SunVideo Plus 控制台

每個 SunVideo Plus 裝置的設定值都存放在一個資料庫裡面。在控制台中變更不同的屬性時，就修改所選取裝置的資料庫。每次開啟某個 SunVideo Plus 裝置時，存放在資料庫裡的目前設定值就會被用來設定這個裝置。開啟一個 SunVideo Plus 之後，控制台也會使用 SunVideo Plus 裝置跟作業程序溝通，以動態的方式變更設定值。

控制台中有幾項設定值不能以動態方式變更，只有在開啟 SunVideo Plus 裝置以後才會開始生效。控制台中會以星號 (*) 標示出這種設定值。

視訊格式可以設定為 [NTSC]、[PAL]，或 [AUTO]。如果選取 [AUTO]，在開啟 SunVideo Plus 裝置時，會自動偵測視訊格式。不過，由於自動偵測最高費時 1.5 秒，所以如果您知道您使用的視訊格式，最好以手動方式設定視訊格式。

[Query] 按鈕是用來以動態方式檢查目前是否已經有另一個作業程序開啟選取的 SunVideo Plus 裝置。

控制台上不同的屬性也可以由使用者撰寫程式予以控制變更。在控制台開啟之後，可能會有其他作業程序透過這種方式變更裝置屬性，控制台中顯示的屬性可能已經不符合目前的狀態。按一下控制台上的 [Update] 按鈕，就可以更新控制台顯示的設定值，使它符合目前的狀態。

## 影像壓縮

這是一個修改過的 XIL 範例程式，增加了 H.261 (視訊) 壓縮功能。SunVideo 的示範程式版本可以在 SunVideo 二位元相容模式下執行，無須其他修改 (SunVideo 版本不含 H.261)。注意預設的壓縮比為 2 (-s 2)，結果產生 CIF-大小的影像壓縮效果。若要壓縮成 QCIF-大小的影像檔，請使用 -s 4 指令。

以下為啟動 `xil_compress` 範例程式的指令語法：

    hostname% xil_compress 選項 -o 檔案名稱

下表說明了指令的選項和預設值。

#### 表 4-5 `xil_compress` 選項

可用選項 | 說明和設定值 | 預設值
`-o` %s | 將位元流儲存到檔案 | `NULL`
`-C` %s | 壓縮類型 (CellB, JPEG, MPEG1, H261) | `CellB`
`-s` %d | 壓縮比 | `2`
`-I` %d | 選取輸入通道 | `1`
`-f` %d | 擷取圖框數量 | `100`
`-i` %d | 擷取之間略過的圖框數量 | `0`
`-D` %s | 裝置名稱 | `/dev/olk0`
`-B` %d | H261 位元速率，kbits/sec | `2000`
`-Q` %d | H261 最大數量 | `10`
`-R` %d | H261 速率控制 (0=可變，1=固定) | `1`
可用設定 |  | ``
`-E` | 出現首次錯誤就結束程式 | ``

### 使用範例

若要壓縮某個 CIF CellB 位元流，請鍵入：

    hostname% xil_compress -C CellB -o /tmp/t.clb

若要壓縮某個 CIF JPEG 位元流，鍵入：

    hostname% xil_compress -C Jpeg -o /tmp/t.jpeg

若要壓縮某個 CIF H261 位元流，鍵入：

    hostname% xil_compress -C H261 -o /tmp/t.h261

若要壓縮某個 QCIF H261 位元流，鍵入：

    hostname% xil_compress -C H261 -s 4 -o /tmp/t.h261

## 影像解壓縮

這是一個修改過的 XIL 範例程式，增加了 H.261 功能。進行 H.261 解壓縮時，SunVideo Plus XIL 分子會預設使用系統上安裝的第一片 SunVideo Plus 介面卡的硬體加速功能為 H.261 解碼。如果您要使用另一片 SunVideo Plus 裝置進行解碼，必須設定 -D 選項。

以下為啟動 `xil_decompress` 範例程式的指令語法：

    hostname% xil_decompress 選項 -i 檔案名稱

下表說明指令的選項和預設值。

#### 表 4-6 `xil_decompress` 選項

選項 | 說明和設定值 | 預設值
`-C` | 壓縮類型 (CellB, JPEG, H.261, Cell, MPEG1) | `CellB`
`-s` %d %d | CellB 寬度和高度 | `320, 240`
`-r` %d | 播放圖框更新率 (0 = 可能範圍內最快的速度) | `0`
H261 選項 |  | ``
`-D` | 進行硬體解壓縮的 SunVideo Plus 裝置名稱 | `NULL`

### 使用範例

若要解壓縮某一 CellB 位元流，請鍵入：

    hostname% xil_decompress -C CellB -s 320 240 -i /tmp/t.clb

若要解壓縮某一 JPEG 位元流，鍵入：

    hostname% xil_decompress -C Jpeg -i tmp/t.jpeg

若要解壓縮某一 H261 位元流，鍵入：

    hostname% xil_decompress -C H261 -i tmp/t.h261

若要使用系統上第二片 SunVideo Plus 介面卡解壓縮某一 H261 位元流，鍵入：

    hostname% xil_decompress -C H261 -i tmp/t.h261 -D /dev/o1k1

## 顯示視訊

這是一個修改過的 XIL 範例程式，能夠擷取視訊訊號，並顯示影像。

變更影響影像色彩的屬性 (亮度、對比、色度等)，會同時改變控制台正在使用的資料庫裡面的設定。因此，這些設定的預設值就是上次設定的數值。如果您執行這個應用程式，並且將亮度設定在某個特定的數值，這個數值在您下次執行某個視訊應用程式時，就會成為亮度的預設值。

以下為啟動 `xil_display` 範例程式的指令語法：

    hostname% xil_display 選項

下表說明了指令的選項和預設值。

#### 表 4-7 `xil_display` 選項

可用選項 | 說明和設定值 | 預設值
`-s` %d | 壓縮比 | `2`
`-I` %d | 選取輸入通道 | `1`
`-f` %d | 擷取圖框數量 | `100`
`-w` %d | 擷取子影像寬度 | `640`
`-h` %d | 擷取子影像高度 | `480`
`-i` %d | 擷取之間略過的圖框數量 | `0`
`-m` %d | 傳往緩衝區的圖框最大數量 | `2`
`-x` %d | x 視窗位置 | (隨機)
`-y` %d | y 視窗位置 | (隨機)
`-D` %s | 裝置名稱 | /dev/olk0
可用設定 |  |
`-g` | 啟動灰階模式 |
`-E` | 出現首次錯誤就結束程式 |
`-d` | 不顯示擷取的結果 |
視訊屬性 |  |
`-B` %d | 亮度 | 無
`-C` %d | 對比 | 無
`-H` %d | 色度 | 無
`-U` %d | 飽和度/增益 U 成分 | 無
`-V` %d | 飽和度/增益 V 成分 | 無
`-c` %d | 色板版本 (0=標準 XIL，1=修正 gamma 值的 XIL) | `1`

如果目前的色彩顯示設定為 24 位元，設定色板版本選項沒有任何效果。色彩顯示設定為 8 位元時，這項設定值會決定視訊視窗使用哪一種色板。XIL 版本會使 SunVideo Plus 擷取 16 位元的資料，然後再由 XIL 分子解成 8 位元的影像。

### 使用範例

若要顯示視訊影像，鍵入：

    hostname% xil_display

## 視訊廣播和視訊接收器

`xil_video_broadcast` 和 `xil_video_receiver` 這兩個程式是修改過的 XIL 範例程式，能夠在 SunVideo Plus 介面卡上執行。這些範例程式即使未經修改，也能在 SunVideo 二位元相容模式下執行。

### `xil_video_broadcast` 程式

以下為啟動 `xil_video_broadcast` 範例程式的指令語法：

    hostname% xil_video_broadcast 選項

下表說明指令的選項和預設值：

#### 表 4-8 `xil_video_broadcast` 選項

可用選項 | 說明和設定值 | 預設值
`-C` %s | 壓縮類型 (CellB, Jpeg, UYVY) | `CellB`
`-H` %s | 目標主機名稱 | `區域子網路`
`-c` %d | 廣播通道 (0-9) | `0`
`-F` %s | 目標主機名稱的檔案 | `無`
`-D` %s | SunVideo Plus 裝置名稱 | `/dev/olk0`
`-I` %d | 選取輸入通道 | `1`
`-P` %d | 每次傳送延遲 x ms | `0`
`-d` %s | 將位元流儲存到檔案 | `NULL`
`-f` %d | 廣播圖框 | `18000`
`-i` %d | 擷取之間略過的圖框數量 | `0`
`-m` %d | 傳往緩衝區圖框的最大數量 | `2`
`-s` %d | 壓縮比 | `2`
`-w` %d | 擷取視窗寬度 | `NTSC: 640` `PAL: 768`
`-h` %d | 擷取視窗高度 | `NTSC: 480` `PAL: 576`
`-x` %d | 顯示視窗 x 軸 | (隨機)
`-y` %d | 顯示視窗 y 軸 | (隨機)
可用選項 |  |
`-p` | 取消預覽 |
`-b` | 啟動接收端顯示部分 CellB 圖框功能 |
`-t` | 取消傳輸 |
`-E` | 出現首次錯誤就結束程式 |
`-v` | 列示說明訊息 |

### `xil_video_receiver` 程式

以下為啟動 `xil_video_receiver` 範例程式的指令語法：

    hostname% xil_video_receiver 選項

下表說明指令的選項和預設值

#### 表 4-9 `xil_video_receiver` 選項

可用選項 | 說明和設定值 | 預設值
-C %s | 壓縮類型 (CellB, Jpeg, UYVY) | `CellB`
-c %d | 廣播通道 (0-9) | `0`
-f %d | 廣播圖框數 | `18000`
-x %d | 顯示視窗 x 軸 | (隨機)
-y %d | 顯示視窗 y 軸 | (隨機)
可用設定 |  |
-b | 啟動接收端顯示部分 CellB 圖框功能 |
-E | 出現首次錯誤就結束程式 |
-v | 列示說明訊息 |

### 使用範例

若要廣播/接收，鍵入：

    hostname% xil_video_receiver -C CellB
    hostname% xil_video_broadcast -C CellB

## H.261 之視訊廣播和視訊接收器

`xilh_video_broadcast` 和 `xilh_video_receiver` 這兩個程式是修改過的 XIL 範例程式，能夠在 SunVideo Plus 介面卡上面執行，使用 H.261 壓縮格式。

### `xilh_video_broadcast` 程式

以下為啟動 `xil_video_broadcast` 範例程式的指令語法：

    hostname% xilh_video_broadcast 選項

下表說明指令的選項和預設值。

#### 表 4-10 `xilh_video_broadcast` 選項

可用選項 | 說明和設定值 | 預設值
`-C` %s | 壓縮類型 (CellB, Jpeg, H261, UYVY) | `CellB`
`-H` %s | 目標主機名稱 | `區域子網路`
`-c` %d | 廣播通道 (0-9) | `0`
`-F` %s | 目標主機名稱的檔案 | `無`
`-D` %s | SunVideo Plus 裝置名稱 | `/dev/olk0`
`-I` %d | 選取輸入通道 | 1
`-P` %d | 每此傳送延遲 x ms | 0
`-d` %s | 將位元流儲存到檔案 | `NULL`
`-f` %d | 廣播圖框數 | `18000`
`-i` %d | 擷取之間略過的圖框數量 | `0`
`-m` %d | 傳往緩衝區的圖框最大數量 | `2`
`-s` %d | 壓縮比 | `2`
`-w` %d | 擷取視窗寬度 | `NTSC: 640` `PAL: 768`
`-h` %d | 擷取視窗高度 | `NTSC: 480` `PAL: 576`
`-x` %d | 顯示視窗 x 軸 | (隨機)
`-y` %d | 顯示視窗 y 軸 | (隨機)
`-B` %d | H261 位元速率 | `256`
`-Q` %d | H261 最大量子化 | `10`
可用設定 |  |
`-p` | 取消預覽 |
`-b` | 啟動接收端顯示部分 CellB 圖框功能 |
`-t` | 取消傳輸 |
`-E` | 出現首次錯誤就結束程式 |
`-v` | 列示說明訊息 |

### `xilh_video_receiver` 程式

以下為啟動 `xil_video_receiver` 範例程式的指令語法：

    hostname% xilh_video_receiver 選項

下表說明指令的選項和預設值。

#### 表 4-11 `xilh_video_receiver` 選項

可用選項 | 說明和設定值 | 預設值
`-C` %s | 壓縮類型 (CellB, Jpeg, H261, UYVY) | `CellB`
`-c` %d | 廣播通道 (0-9) | `0`
`-f` %d | 廣播圖框數 | `18000`
`-x` %d | 顯示視窗 x 軸 | (隨機)
`-y` %d | 顯示視窗 y 軸 | (隨機)
可用設定 |  |
`-b` | 啟動接收端顯示部分 CellB 圖框功能 |
`-E` | 出現首次錯誤就結束程式 |
`-v` | 列示說明訊息 |

## 音訊視訊會議

範例程式 `o1k_conf` 是一個點對點的音訊/視訊會議程式，它是使用 C++ 語言利用 XIL 和 SunVideo Plus 音訊 API 撰寫而成。它能支援 CellB、Jpeg，和 H261 等視訊格式以及多種不同的音訊格式。

### `o1k_conf` 指令

以下為啟動 `o1k_conf` 範例程式的指令語法：

    hostname% o1k_conf 選項

下表說明指令的選項和預設值。

#### 表 4-12 `o1k_conf` 選項

可用選項 | 說明和設定值 | 預設值
`-u` %s | user@host | `NULL`
`-t` | 停用 XIL molex (僅限 Solaris 2.6) |
`-p` | 針對接收 PAL 格式。 |
`-`D %s | SunVideo Plus 裝置名稱 | /dev/olk0

- Solaris 2.5.1 中的 XIL 1.2 並非多緒安全式。這個會議的範例使用存取 XIL 的多緒方式。這些執行緒在執行 XIL 呼叫前會互相鎖定。這是很沒有效率的方法，但因為是 XIL 1.2 而不得不使用。在 Solaris 2.6 中，XIL 1.3 則是多緒安全式。`-`t 選項就是用來停用會議應用程式所使用的鎖定功能。

- 如果您知道呼叫會以 PAL 格式傳送，則應使用 -p 選項。若您是以 PAL 格式傳送而未使用此選項，將會發生錯誤。

下圖顯示設定視訊會議的主會議控制台：

##### 圖 4-3 `o1k_conf` 主會議控制台

這個範例程式會讓您設定音訊/視訊參數，並且提供一個通訊錄，讓您儲存關於您要連接的使用者的資訊。

若要開啟通訊錄，按一下 [Address] 按鈕。下圖顯示出 [Address Book] 的畫面。

##### 圖 4-4 通訊錄

選取 [New] 按鈕即可新增一位使用者。最重要的資料是 User@Host 欄位的內容。程式必須利用這個欄位的內容與視訊會議的另一位使用者取得聯繫。Address Book 中其他的資訊可以視需要輸入。填入使用者資訊之後，按一下 [Add] 按鈕 (選取 [New] 按鈕之後才會顯示出來)。若要儲存通訊錄，選取 [File] 功能表中的 [Save] 指令。若要選取參與視訊會議的使用者，在清單中選取使用者，再按一下 [Done] 按鈕。這樣會關閉這個視窗，並且將 User@Host 名稱放在主會議控制台中 ( 圖 4-3)。

只有要求進行視訊會議的使用者必須設定主會議控制台，被要求的另一端會自動收到呼叫者的設定組態。`o1k_conf` 的預設值為：

- 視訊：H261, QCIF, 10fps, 256 Kbits/sec

- 音訊：ulaw, 8 KHz, mono

若要變更視訊會議的設定值，按一下 [Setup]，再按照視窗及功能表的說明進行設定。

在其他使用者呼叫您的時候，電腦畫面上會出現一個視窗 (如下圖) 告訴您呼叫您的使用者是哪一位，以及進行呼叫所使用的參數。然後您可以自行決定是否要加入視訊會議。

##### 圖 4-5 Being Called 視窗

視訊會議中，您可以利用主會議控制台中的 View 功能監視信號傳輸的情形，例如音訊和視訊的位元速率，以及網路封包的活動情形等。然後再選取 [A/V Panel] 在這裡變更設定值。

視訊會議中，您的畫面上可以顯示出兩個視窗，一個 [Local View] 顯示本機傳出去的視訊影像，和一個 [Far View] 視窗 (顯示參與會議的另一位使用者傳來的視訊影像)。下圖顯示出這兩個視窗。

##### 圖 4-6 Local View 和 Far View 視窗

使用 H.261 時，可以在 [Far View] 視窗中重疊顯示本身的影像，將您的畫面嵌入視窗的左上角。若要降低 CPU 的使用量，可以將您的本機畫面切換成一個小圖示。在使用 H261 視訊會議時，可以利用這項功能。

視訊會議完畢後，按一下 [HangUp]。[HangUp] 按鈕在建立視訊會議後會顯示在主會議控制台中。

上一頁 | 下一頁 | 目錄