音频加解密
音频加密和解密
开启音频加密
先通过 QNAudioInterface#EnableLocalAudioPacketCallBack
设置开启音频加密功能。
加密音频数据
在 QNAudioListener#OnSetMaxEncryptSize
中先根据加密的方式,告知 SDK 加密后数据的最大空间大小;
然后在 QNAudioListener#OnEncrypt
自定义加密
int CRtcDemoV2::OnSetMaxEncryptSize(
int frame_size_,
const std::string& track_id_)
{
// 当需要根据自己的算法加密音频数据时,需要在该方法告知 SDK 加密后的最大数据大小
return frame_size_ + 32;
}
int CRtcDemoV2::OnEncrypt(
const unsigned char* frame_,
int frame_size_,
unsigned char* encrypted_frame_,
const std::string& track_id_)
{
// 自主加密接口,将加密后的数据放置到 encryptedFrame 中,并返回加密后大小
// 这里加密演示是每个字节异或 0xAA,解密时也相应异或 0xAA。
for (size_t i = 0; i < frame_size_; i++) {
encrypted_frame_[i] = frame_[i] ^ 0xAA;
}
return frame_size_;
}
开启音频解密
先通过 QNAudioInterface#EnableRemoteAudioPacketCallBack
设置开启音频解密功能
解密音频数据
在 QNAudioListener#OnSetMaxDecryptSize
中先根据解密的方式,告知 SDK 解密后数据的最大空间大小;
然后在 QNAudioListener#OnDecrypt
自定义解密
int CRtcDemoV2::OnSetMaxDecryptSize(
int encrypted_frame_size_,
const std::string& track_id_)
{
// 当需要根据自己的算法解密音频数据时,需要在该方法告知 SDK 解密后的最大数据大小
return encrypted_frame_size_ + 32;
}
int CRtcDemoV2::OnDecrypt(
const unsigned char* encrypted_frame_,
int encrypted_size_,
unsigned char* frame_,
const std::string& track_id_)
{
// 自主解密接口,将解密后的数据放置到 frame 中,并返回解密后大小
for (size_t i = 0; i < encrypted_size_; i++) {
frame_[i] = encrypted_frame_[i] ^ 0xAA;
}
return encrypted_size_;
}
音频传输和接收自定义数据
添加自定义数据
在回调 QNAudioListener#OnPutExtraData
中放置自定义数据,SDK 将携带该数据传输
int CRtcDemoV2::OnPutExtraData(
unsigned char* extra_data_,
int extra_data_max_size_,
const std::string& track_id_)
{
// 放置自定义数据并返回数据大小
const unsigned char tmp[32] = "QNTEST";
memcpy(extra_data_, tmp, strlen((char*)tmp));
return strlen((char*)tmp);
}
接收自定义数据
在回调 QNAudioListener#OnGetExtraData
使用 SDK 解析后的自定义数据
void CRtcDemoV2::OnGetExtraData(
const unsigned char* extra_data_,
int extra_data_size_,
const std::string& track_id_)
{
if (_show_extra) {
thread(
[&, extra_data_] {
wchar_t buf[512] = { 0 };
_snwprintf(buf,
sizeof(buf),
_T("extra data:%s"),
utf2unicode((LPCSTR)extra_data_).c_str()
);
AfxMessageBox(buf, MB_OK);
}
).detach();
_show_extra = false;
}
}
注意事项
- 传输自定义数据,由七牛内部标示传输并在接收时解析,可以兼容服务转推和合流
- 音频加解密,由客户自定义加密传输并接收解密,不支持同时使用服务转推和合流