首页 > 代码库 > spice协议----播放和录音通道

spice协议----播放和录音通道

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 = http://www.mamicode.com/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 = http://www.mamicode.com/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;

spice协议----播放和录音通道