Multimedia time
spice定义了用于设定多媒体时间的消息用于同步视频和音频流。
有两种方法更新多媒体时间。
第一种是使用数据到达playback channel时间戳。
第二种方法是使用main channel的SPICE_MSG_MAIN_MULTI_MEDIA_TIME 消息。
当没有活动的playback channel 存在时使用第二种方法。
Spice agent
spice protocol 定义了一系列的消息用于spice client和spice client agent 在远程server上的双向交流。
spice 只提供了一个交流的通道(channel),实际交换的数据内容对于协议是不可见的。
channel 有多种用途,例如:client-guest 粘贴板的分享,授权和现实配置。
Display channel definition
定义了一系列的信息用于指示显示远程client显示的显示区域。这个协议支持使用图形元素和视频流。
协议同时也支持捕捉client的图像和色盘。spice display channel支持多种图像压缩方法。
步骤:
- server发送 SPICE_MSG_DISPLAY_MODE 模式的消息用于指定当前绘制的区域大小和类型。
- 然后client 创建一个绘制区域展示server后续发送的所有绘制命令。
- client只有在接收到标记命令(SPICE_MSG_DISPLAY_MARK)才会展示新的绘制内容。
- server 可以通过发送SPICE_MSG_DISPLAY_RESET 通知client丢弃之前的晦气区域和调色板(palette )缓存。
- 只有client不存在active 绘制区域时才可以发送mode 消息。
- 只有client存在active绘制区域时才可以发送reset消息。
- 只允许在mode消息和reset消息之间发送一次标记信息。
- 绘制命令,复制bits命令和流命令只在client有与i个active显示区域时才可以发送 (i.e., between SPICE_MSG_DISPLAY_MODE to SPICE_MSG_DISPLAY_RESET)。
一些重要的消息的内容与意义
- Draw area control 绘制区域控制 SPICE_MSG_DISPLAY_MODE {显示区域宽度,高度和深度}
- Raster operation descriptor 。定义了一系列标记表示光栅操作,用于source image source brush ,位置和绘制过程中的结果。
- raw 光栅图像。描述raw raster image(pixmap) 。
- Pixmap format types
- SpicePalette
- Pixmap flags
- Pixmap - LZ with palette 描述了一种结合了调色板和压缩位图数据的数据结构。图像压缩算法是LZSS 。
- LZPalette Flags
- LZPalette - spice image 。 Spice image用于表示光栅图像的各种命令和数据结构。
- Image types
- Image flags
- SpiceImageDescriptor
- Image data - Glyph SpiceString 定义了一个用于渲染的图形数组
- Data Types
- RectList
- Path segment flags
- SpicePathSeg
- PathSegList
- SpiceClip types
- SpiceClip
- Mask flags
- Mask
- SpiceBrush types
- SpicePattern
- SpiceBrush
- Image scale mode
- LineAtrr flags
- LineAtrr join style
- SpiceLineAttr - Rendering command 绘制命令
- SpiceMsgDisplayBase
- SPICE_MSG_DISPLAY_COPY_BITS(从展示区域指定位置复制bit到指定box中。使用xy(left-top)wh的方式指定边界框)
- SPICE_MSG_DISPLAY_DRAW_FILL 使用brush作为填充模板和rop_descriptor (Raster operation descriptor ) 指导。
- SPICE_MSG_DISPLAY_DRAW_OPAQUE 使用rop_descriptor指令将source_image中source_area中的像素与画笔的模式结合起来。
- SPICE_MSG_DISPLAY_DRAW_COPY 使用rop描述子 从source_image 中的source_area 复制pixels到指定区域
- SPICE_MSG_DISPLAY_DRAW_BLEND 混合source_area 和指定区域的像素
- SPICE_MSG_DISPLAY_DRAW_BLACKNESS 在指定区域内填充黑色
- SPICE_MSG_DISPLAY_DRAW_WHITENESS 同上填充白色
- SPICE_MSG_DISPLAY_DRAW_INVERS 反转指定区域内的像素
- SPICE_MSG_DISPLAY_DRAW_ROP3 混合source_area 、 bounding_box pixels、 brush pattern
- SPICE_MSG_DISPLAY_DRAW_TRANSPARENT 类似于SPICE_MSG_DISPLAY_DRAW_COPY 区别是?
- SPICE_MSG_DISPLAY_DRAW_ALPHA_BLEND 绘制带有透明度的图像
- SPICE_MSG_DISPLAY_DRAW_STROKE 使用brush line 和rop 描述子绘制路径。
- SPICE_MSG_DISPLAY_DRAW_TEXT 使用笔刷fore_brush和rop_descriptor fore_mode在显示区域上绘制图形传串。 - Video streaming commands 流数据允许使用损失数据的压缩算法。不要求到达即进行绘制,也允许丢失视频帧。使用音频和视频流中的时间戳实现同步。可以减少网络拥堵的现象。
- SPICE_MSG_DISPLAY_STREAM_CREATE 流开始时发送该消息。
- SPICE_MSG_DISPLAY_STREAM_DATA 创建流之后发送流数据
- SPICE_MSG_DISPLAY_STREAM_CLIP 设置new stream clipping
- SPICE_MSG_DISPLAY_STREAM_DESTROY 不需要视频流之后发送该消息
- SPICE_MSG_DISPLAY_STREAM_DESTROY_ALL 销毁当前所有的视频流 - Cache control
Cursor channel definition
用于控制指针在远程显示中的形态和位置,指针位置信息和client mouse mode 不相关。也定义了一系列信息用于管理client上指针形状的缓存。
Playback channel definition
Spice支持在clinet发送音频流以供回放。
- SPICE_MSG_PLAYBACK_DATA 传输数据。
- SPICE_MSG_PLAYBACK_MODE 回放模式
- SPICE_MSG_PLAYBACK_START 开始,只允许在stop状态下发送
- SP ICE_MSG_PLAYBACK_STOP 停止,只允许在start状态下发送。
Record Channel definition
支持client将捕获的音频流发送至server
本文介绍了Spice协议中的多媒体时间更新方法,包括playback channel的时间戳和main channel的SPICE_MSG_MAIN_MULTI_MEDIA_TIME消息。此外,详细阐述了Spice agent的作用,Display channel的定义及其操作,包括模式设置、重置和绘制命令。同时涵盖Cursor、Playback和Record Channel的功能和定义,用于控制指针、音频回放和录音。
243

被折叠的 条评论
为什么被折叠?



