IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [译]spice协议----播放和录音通道

    jsh13417发表于 2014-12-11 21:27:12
    love 0

    1 播放通道定义

    SPICE协议支持服务器发送音频流数据在客户端播放。音频流服务器使用SPICE_MSG_PLAYBACK_DATA消息发送客户端,音频数据的内容有播放模式控制(服务器通过SPICE_MSG_PLAYBACK_MODE消息发送客户端)。服务器通过发送SPICE_MSG_PLAYBACK_START消息和SPICE_MSG_PLAYBACK_STOP消息来停止和播放音频流。数据包发送期间只允许停止和播放消息。

    1.1服务器—》客户端消息宏

    enum {

    SPICE_MSG_PLAYBACK_DATA = 101,

    SPICE_MSG_PLAYBACK_MODE,

    SPICE_MSG_PLAYBACK_START,

    SPICE_MSG_PLAYBACK_STOP,

    SPICE_MSG_PLAYBACK_VOLUME,

    SPICE_MSG_PLAYBACK_MUTE,

    SPICE_MSG_PLAYBACK_LATENCY,

    SPICE_MSG_END_PLAYBACK

    };

    1.2音频模式

    typedef enumSpiceAudioFmt {

    SPICE_AUDIO_FMT_INVALID,

    SPICE_AUDIO_FMT_S16,

    SPICE_AUDIO_FMT_ENUM_END

    }SpiceAudioFmt;

    1.3音频包播放模式

    typedef enumSpiceAudioDataMode {

    SPICE_AUDIO_DATA_MODE_INVALID,

    SPICE_AUDIO_DATA_MODE_RAW,

    SPICE_AUDIO_DATA_MODE_CELT_0_5_1,

    SPICE_AUDIO_DATA_MODE_OPUS,

    SPICE_AUDIO_DATA_MODE_ENUM_END

    }SpiceAudioDataMode;

    1.4音频播放通道能力

    SPICE客户机需要声明支持CELT_5_1通道功能,以允许服务器发送播放CELT_0_5_1格式的数据包。这个应该在通道建立的时候会有能力协商吧?

    1.5SpiceMsgPlaybackStart结构体描述

    typedef struct SpiceMsgPlaybackStart {

    uint32_t channels;

    uint32_t format; //SPICE_AUDIO_FMT_?

    uint32_t frequency;

    uint32_t time;

    } SpiceMsgPlaybackStart;

    2 录音通道定义

    SPICE协议支持音频流捕捉从客户端发送到服务器。SPCIE服务器发送SPICE_MSG_RECORD_START通知客户端开始发送音频数据。客户端回应开始发送开始标记时间戳(REDC_RECORD_START_MARK)客户端发送完开始标记后使用SPICE_MSGC_RECORD_DATA。为了通知服务器使用什么样的类型发送数据,在发送时间戳之前必须发送SPICE_MSGC_RECORD_MODE消息。服务器发送SPICE_MSG_RECORD_STOP消息通知客户端停止。

    2.1服务器—》客户端

    enum {

    SPICE_MSG_RECORD_START = 101,

    SPICE_MSG_RECORD_STOP,

    SPICE_MSG_RECORD_VOLUME,

    SPICE_MSG_RECORD_MUTE,

    SPICE_MSG_END_RECORD

    };

    2.2客户端—》服务器

    enum {

    SPICE_MSGC_RECORD_DATA = 101,

    SPICE_MSGC_RECORD_MODE,

    SPICE_MSGC_RECORD_START_MARK,

    SPICE_MSGC_END_RECORD

    };

    2.3音频格式

    typedef enumSpiceAudioFmt {

    SPICE_AUDIO_FMT_INVALID,

    SPICE_AUDIO_FMT_S16,

    SPICE_AUDIO_FMT_ENUM_END

    } SpiceAudioFmt;

    2.4录音数据模式

    两种类型的数据模式可供选择:

    1) 原始数据PCM数据RAW格式

    2) 压缩数据Celti_0_5_1格式

    typedef enumSpiceAudioDataMode {

    SPICE_AUDIO_DATA_MODE_INVALID,

    SPICE_AUDIO_DATA_MODE_RAW,

    SPICE_AUDIO_DATA_MODE_CELT_0_5_1,

    SPICE_AUDIO_DATA_MODE_OPUS,

    SPICE_AUDIO_DATA_MODE_ENUM_END

    }SpiceAudioDataMode;

    2.5录音通道能力

    SPICE服务器需要声明支持CELT_5_1通道功能,以允许客户端发送记录CELT_0_5_1格式的数据包。

    enum {

    SPICE_RECORD_CAP_CELT_0_5_1,

    SPICE_RECORD_CAP_VOLUME,

    SPICE_RECORD_CAP_OPUS,

    };

    2.6SpiceMsgcRecordMode结构体

    typedef structSpiceMsgPlaybackMode {

    uint32_t time; //客户端时间戳

    uint32_t mode; //SPICE_AUDIO_DATA_MODE_?

    uint8_t *data;//数据

    uint32_t data_size;.// 数据大小

    } SpiceMsgPlaybackMode,SpiceMsgcRecordMode;

    2.7SpiceMsgRecordStart结构体描述

    typedef structSpiceMsgRecordStart {

    uint32_t channels;

    uint32_t format; //SPICE_AUDIO_FMT_?

    uint32_t frequency;

    }SpiceMsgRecordStart;

    2.8SpiceMsgcRecordStartMark结构体描述

    typedef structSpiceMsgcRecordStartMark {

    uint32_t time; //音频流开始时间戳

    }SpiceMsgcRecordStartMark;

    2.9SpiceMsgcRecordPacket结构体描述

    typedef structSpiceMsgPlaybackPacket {

    uint32_t time; //时间戳

    uint8_t *data;

    uint32_t data_size;

    }SpiceMsgPlaybackPacket, SpiceMsgcRecordPacket;



沪ICP备19023445号-2号
友情链接