spice Main Channel definition
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 Main Channel definition相关推荐
- kvm虚拟机vnc和spice配置
2019独角兽企业重金招聘Python工程师标准>>> 原文链接 一.简介 通过vnc或spice方式访问虚拟主机上的KVM虚拟机,可以直接通过图形化界面virt-manager来设 ...
- 基于 SPICE 协议的硬编推流整合方案在云游戏中的应用
背景 随着虚拟化技术如模拟器,容器化等技术等发展,在安卓云游戏/云手机场景中,可以在服务宿主侧虚拟出更多更小颗粒度的 Android 实例.其中比较核心的技术是图形虚拟化技术,如何最大限度利用宿主侧的 ...
- 服务器虚拟化vnc,kvm虚拟机vnc和spice配置
一.简介 通过vnc或spice方式访问虚拟主机上的KVM虚拟机,可以直接通过图形化界面virt-manager来设置,但此处通过xml配置文件修改. 二.详解 1.VNC方式访问 vnc方式访问虚拟 ...
- 通过channel进行goroutine间的通信
如下代码: package mainimport ("fmt""sync" )var wg sync.WaitGroupfunc consumer(queue ...
- go - select 从已经关闭的channel中读取数据注意的问题 -可能会发生的dead lock现象
相信大家在从channel中读取数据的时候,有时候会遇到dead lock的情况,也就是死锁的情况,那这种情况一般是怎么出现的?又该怎么解决呢?下面我们来讨论一下. 出现的情况和解决方法 1 当一个c ...
- IBM Websphere MQ 基础4:Channel通道与MQ间消息传输
概念 WebSphere® MQ uses two different types of channels: A message channel, which is a unidirectional ...
- go语言管道(channel)
前言 channel式go语言协程中数据通信的双向通道.但是在实际应用中,为了代码的简单和易懂,一般使用的channel是单向的. 使用 1. channel的定义和收发数据 package chan ...
- channel --通道
package main // channel是连接goroutine的通道,可以发送值从一个channel到另一个channel. // 也可以接受来自其他channel的信息 import &qu ...
- golang入门笔记—channel
//channel//var b chan <类型> //通道必须用make函数初始化才能使用//通道的操作 //1.发送:ch1<-1 //2.接收:x:=<-ch1 //3 ...
最新文章
- Fiddler 环境和过滤规则详解
- 我ABAP开发生涯中搜集的一些有意思的数据库表
- JAVA1.6实现动态编译加载运行
- eclipse中导入maven项目:org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.proje...
- python 实例创建
- 谷歌开源 Python 代码漏洞查找工具 Atheris
- 编辑器单引号如何不被转码_微信公众号文章内如何插入视频?
- 洛谷——P1320 压缩技术(续集版)
- Go语言基础进阶—程序结构—类型
- 关于在ItemAdding时获取“用户和用户组”这个栏的值
- 10.docker build
- Fiddler2用于手机抓包时的配置方法
- 【制作】基于金沙滩51单片机的贪吃蛇程序
- MySQL大略学习(二) 表格的操作 增删查改
- EasyExcel 固定(冻结)单元格
- 斯坦福CS234增强学习——(1)简介
- javascript H5解决手机拍照图片被旋转问题
- 动态分析之OllyDbg
- 计算机flash ram是什么意思,ROM、RAM、CPU、CACHE、FLASH的区别
- EXCEL自定义函数 VLOOKUP的变体(从最右边找值,找到之后返回左边的值)