您的位置:首页 > 其它

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

2014-12-11 21:27 1161 查看

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  SPICE协议 spice