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支持多种图像压缩方法。

步骤:

  1. server发送 SPICE_MSG_DISPLAY_MODE 模式的消息用于指定当前绘制的区域大小和类型。
  2. 然后client 创建一个绘制区域展示server后续发送的所有绘制命令。
  3. client只有在接收到标记命令(SPICE_MSG_DISPLAY_MARK)才会展示新的绘制内容。
  4. server 可以通过发送SPICE_MSG_DISPLAY_RESET 通知client丢弃之前的晦气区域和调色板(palette )缓存。
  5. 只有client不存在active 绘制区域时才可以发送mode 消息。
  6. 只有client存在active绘制区域时才可以发送reset消息。
  7. 只允许在mode消息和reset消息之间发送一次标记信息。
  8. 绘制命令,复制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相关推荐

  1. kvm虚拟机vnc和spice配置

    2019独角兽企业重金招聘Python工程师标准>>> 原文链接 一.简介 通过vnc或spice方式访问虚拟主机上的KVM虚拟机,可以直接通过图形化界面virt-manager来设 ...

  2. 基于 SPICE 协议的硬编推流整合方案在云游戏中的应用

    背景 随着虚拟化技术如模拟器,容器化等技术等发展,在安卓云游戏/云手机场景中,可以在服务宿主侧虚拟出更多更小颗粒度的 Android 实例.其中比较核心的技术是图形虚拟化技术,如何最大限度利用宿主侧的 ...

  3. 服务器虚拟化vnc,kvm虚拟机vnc和spice配置

    一.简介 通过vnc或spice方式访问虚拟主机上的KVM虚拟机,可以直接通过图形化界面virt-manager来设置,但此处通过xml配置文件修改. 二.详解 1.VNC方式访问 vnc方式访问虚拟 ...

  4. 通过channel进行goroutine间的通信

    如下代码: package mainimport ("fmt""sync" )var wg sync.WaitGroupfunc consumer(queue ...

  5. go - select 从已经关闭的channel中读取数据注意的问题 -可能会发生的dead lock现象

    相信大家在从channel中读取数据的时候,有时候会遇到dead lock的情况,也就是死锁的情况,那这种情况一般是怎么出现的?又该怎么解决呢?下面我们来讨论一下. 出现的情况和解决方法 1 当一个c ...

  6. IBM Websphere MQ 基础4:Channel通道与MQ间消息传输

    概念 WebSphere® MQ uses two different types of channels: A message channel, which is a unidirectional ...

  7. go语言管道(channel)

    前言 channel式go语言协程中数据通信的双向通道.但是在实际应用中,为了代码的简单和易懂,一般使用的channel是单向的. 使用 1. channel的定义和收发数据 package chan ...

  8. channel --通道

    package main // channel是连接goroutine的通道,可以发送值从一个channel到另一个channel. // 也可以接受来自其他channel的信息 import &qu ...

  9. golang入门笔记—channel

    //channel//var b chan <类型> //通道必须用make函数初始化才能使用//通道的操作 //1.发送:ch1<-1 //2.接收:x:=<-ch1 //3 ...

最新文章

  1. Fiddler 环境和过滤规则详解
  2. 我ABAP开发生涯中搜集的一些有意思的数据库表
  3. JAVA1.6实现动态编译加载运行
  4. eclipse中导入maven项目:org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.proje...
  5. python 实例创建
  6. 谷歌开源 Python 代码漏洞查找工具 Atheris
  7. 编辑器单引号如何不被转码_微信公众号文章内如何插入视频?
  8. 洛谷——P1320 压缩技术(续集版)
  9. Go语言基础进阶—程序结构—类型
  10. 关于在ItemAdding时获取“用户和用户组”这个栏的值
  11. 10.docker build
  12. Fiddler2用于手机抓包时的配置方法
  13. 【制作】基于金沙滩51单片机的贪吃蛇程序
  14. MySQL大略学习(二) 表格的操作 增删查改
  15. EasyExcel 固定(冻结)单元格
  16. 斯坦福CS234增强学习——(1)简介
  17. javascript H5解决手机拍照图片被旋转问题
  18. 动态分析之OllyDbg
  19. 计算机flash ram是什么意思,ROM、RAM、CPU、CACHE、FLASH的区别
  20. EXCEL自定义函数 VLOOKUP的变体(从最右边找值,找到之后返回左边的值)

热门文章

  1. 企业营销获客为什么要选SEO?低预算适合做SEO吗?【必看】
  2. 最简单的8421码计算方法
  3. Waymo van参与亚利桑那州的严重碰撞
  4. 时间字符串和Date之间的转换
  5. 阿里云 SDK 动态IP域名解析
  6. 美国2020年攻破艾滋病_2020年美国和欧洲的游戏状况
  7. 计算机专业专科学校排名分数,计算机专业专科学校录取分数
  8. android ----- goldfish内核编译
  9. FC4下安装plog快速指南(plog版本:1.01)
  10. JAVA体育用品在线商城系统-springboot【数据库设计、论文、源码、开题报告】