SunVideo Plus 1.3 用户指南： SunVideo Plus 实例程序

上一页 | 下一页 | 目录
SunVideo Plus 1.3 用户指南

# 4

# SunVideo Plus 实例程序

本章包括 SunVideo Plus 编程工具以及 XIL 程序实例。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 的输入的音频和视频控制器。

这些程序还帮助校验 SunVideo Plus 卡的适当操作。

## 音频录制

`o1k_audrec` 程序是将音频录制到文件的工具，它是由命令行驱动的。

下面显示 `o1k_audrec` 实例的命令行语法：

    hostname% o1k_audrec 选项 -o 文件名

下表描述命令选项和缺省设定。

#### 表 4-2 `o1k_audrec` 选项

选项 | 说明和值 | 缺省值
`-D` 设备 | 设备名 | `/dev/o1k0`
`-f` 格式 | 编码格式 (0=ULAW、1=ALAW、2=PCM8、3=PCM16、4=G722) | `0`
`-r` 速率 | 采样速率 (8000、11025、16000、22050) | `8000`
`-c` 通道 | 通道 (1、2) | `1`
`-p` 端口 | 输入端口（0=线路、1=话筒） | `0`
`-g` 增益 | 输入增益（0 到 1.0） | `.125`
`-m` 监视器增益 | 监视器增益 （0 到 1.0） | `0`
`-I` 信息 | 音频文件字符串信息 | `""`
`-b` 大小 | 缓冲区大小 | `1000`
`-h` 数量 | 在数量后打印散列标志 | `0`

## 音频播放

`o1k_audplay` 程序是播放音频文件的工具，它是由命令行驱动的。

下面显示 `o1k_audplay` 实例的命令行语法：

    hostname% o1k_audplay 选项 -i 文件名

下表描述命令选项和缺省设定。

#### 表 4-3 `o1k_audplay` 选项

选项 | 说明和值 | 缺省值
`-D` 设备 | 设备名 | `/dev/o1k0`
`-v` 增益 | 输出增益（0 到 1.0） | `1.0`
`-b` 大小 | 缓冲区大小 | `1000`

## 音频环路

`o1k_audloop` 程序是用于从音频输入环路到音频输出的工具，它是由命令行驱动的。

下面显示 `o1k_audloop` 实例的命令行语法：

     hostname% o1k_audloop 选项

下表描述命令选项和缺省设定。

#### 表 4-4 `o1k_audloop` 选项

选项 | 说明和值 | 缺省值
`-D` 设备 | 设备名 | `/dev/o1k0`
`-f` 格式 | 编码格式 (0=ULAW、1=ALAW、2=PCM8、3=PCM16、4=G722) | `0`
`-r` 速率 | 采样速率 (8000、11025、16000、22050) | `8000`
`-c` 通道 | 通道 (1、2) | `1`
`-p` 端口 | 输入端口（0=线路、1=话筒） | `0`
`-g` 增益 | 输入增益（0 到 1.0） | `.125`
`-v` 增益 | 输出增益（0 到 1.0） | `1.0`
`-b` 大小 | 缓冲区大小 | `1000`

## `soundtool` 程序

`soundtool` 程序是录制、播放和修改 u-law 音频文件（压缩的音频文件）的 GUI 工具。

下面显示 `soundtool` 实例的命令行语法：

    hostname% soundtool [-D 设备]

下图是 `soundtool` 演示程序的显示。

##### 图 4-1 `soundtool` 显示

`soundtool` 是随 `SUNWaudmo` 软件包分发的演示程序，通常安装在 `/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（视频）压缩。有关特定 H.261 代码的更改，请参阅源代码注释。该演示程序的 SunVideo 版本不经修改就可以在 SunVideo 二进制兼容模式下运行（SunVideo 版本不包括 H261）。注意：缺省收缩因子为 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/o1k0`
`-B` %d | H261 比特率、千比特/秒 | `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` | h/w 解压缩的 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/o1k0
合法开关 |  |
`-g` | 启用灰度级模式 |
`-E` | 遇到第一个错误时退出 |
`-d` | 不显示捕获的结果 |
视频属性 |  |
`-B` %d | 亮度 | 无
`-C` %d | 对比度 | 无
`-H` %d | 色调 | 无
`-U` %d | 饱和度/增益 U 组件 | 无
`-V` %d | 饱和度/增益 V 组件 | 无
`-c` %d | 色彩图版本（0=XIL 标准、1=XIL 伽马校正） | `1`

如果当前显示深度为 24 位，则色彩图版本选项不起作用。对于 8 位显示深度，该选项将影响视频窗口所安装的色彩图。XIL 版本可以使 SunVideo Plus 捕获 16 位视频数据，而后由 XIL 分子通过软件抖动处理转换为 8 位。

### 实例用法

要显示视频，键入：

    hostname% xil_display

## 视频广播和视频接收器

`xil_video_broadcast` 和 `xil_video_receiver` 这两个程序是经过修改的 XIL 实例，它们在 SunVideo Plus 卡上运行。这些演示程序的 SunVideo 版本不经修改就可以在 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/o1k0`
`-I` %d | 选择输入通道 | `1`
`-P` %d | 每次传输延迟 x 毫秒 | `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/o1k0`
`-I` %d | 选择输入通道 | 1
`-P` %d | 每次传输延迟 x 毫秒 | 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 模式（仅适宜 Solaris 2.6） |
`-p` | 用于接收 PAL 制式 |
`-`D %s | SunVideo Plus 设备名 | /dev/o1k0

- 在 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”按钮。下图显示通讯簿。

##### 图 4-4 通讯簿

选择“New”按钮以添加用户。最重要的信息是 User@Host 字段。它用于在开电话会议时联系另一个人。通讯簿中的其它信息均为可选的。填写完用户信息后，按一下“Add”按钮（仅在选择“New”按钮后才显示该按钮）。要保存通讯簿，选择“File”菜单上的“Save”。要选择会议的用户，从列表中选择该用户，然后按一下“Done”按钮。这将关闭弹出式窗口并将 User@Host 名放置在主会议面板（ 图 4-3）中。

只有呼叫会议的用户才需要配置主会议面板，因为呼叫会议时远端即被告知呼叫者的配置。`o1k_conf` 的缺省设定为

- 视频： H261、QCIF、10fps、256 千比特/秒

- 音频：ulaw、8 KHz、mono

要更改会议的配置，按一下“Setup”，然后按菜单和弹出窗口的指令继续操作。

当被另一个用户呼叫时，将打开弹出式窗口通知您呼叫者和呼叫参数（参阅下图）。这样您可以决定是否参加会议。

##### 图 4-5 被呼叫窗口

会议期间可以监视状态信息，例如音频及视频比特率和帧速率以及网络包活动。这可以从主会议面板的视图中获得。然后选择“A/V Panel”，这样可以在音频/视频面板中更改音频和视频参数。

会议呼叫期间，屏幕上将出现两个窗口，即本地视图 (Local View) 和远端视图 (Far View)（会议的另一方）。下图显示了这两个窗口。

##### 图 4-6 本地视图和远端视图窗口

利用 H.261 可以在远端视图窗口中实现画中画，您的视图将嵌在左上角。要减少 CPU 的使用，可以将本地视图转换为图标。建议在 H261 会议中使用此方法。

电话会议结束后，按一下“HangUp”。呼叫接通后，主会议面板上将显示“HangUp”按钮。

上一页 | 下一页 | 目录