Объединение видеосессий Zoom через веб-приложение в SDK Django и Flutter
Я интегрировал Zoom Video SDK в свое веб-приложение, используя Video Web SDK в JavaScript. Он отлично работает в веб-приложении.
У меня возникают проблемы при подключении к видеосессии из мобильного приложения с помощью функции session_name passed, которая интегрирована во Flutter для платформы Android.
Я интегрировал Zoom Video SDK в свое веб-приложение, используя Video Web SDK в JavaScript. Он отлично работает в веб-приложении.
У меня возникают проблемы при подключении к видеосессии из мобильного приложения с помощью функции session_name passed , которая интегрирована вFlutter для платформы Android.
Шаги, которым я следовал:
1: При поступлении API-запроса на создание видеосессии создает JWT-токен для начала видеосессии. Возвращает имя_сессии в ответе API
2: Используя это имя_сессии, при попытке присоединиться создается новая сессия вместо того, чтобы присоединиться к существующей.
Вот мой код во Flutter для создания JWT-токена:
String generateJwt(String sessionName, String roleType) {
try {
var iat = DateTime.now();
var exp = DateTime.now().add(Duration(hours: 2));
final jwt = JWT(
{
'app_key': configs["ZOOM_SDK_KEY"],
'version': 1,
'user_identity': makeId(10),
'iat': (iat.millisecondsSinceEpoch / 1000).round(),
'exp': (exp.millisecondsSinceEpoch / 1000).round(),
'tpc': sessionName,
'role_type': int.parse(roleType),
'cloud_recording_option': 1,
},
);
var token = jwt.sign(SecretKey(configs["ZOOM_SDK_SECRET"]));
print(token);
return token;
} catch (e) {
print(e);
return '';
}
}
, который передается сюда для присоединения к сессии:
String generateJwt(String sessionName, String roleType) {
try {
var iat = DateTime.now();
var exp = DateTime.now().add(Duration(hours: 2));
final jwt = JWT(
{
'app_key': configs["ZOOM_SDK_KEY"],
'version': 1,
'user_identity': makeId(10),
'iat': (iat.millisecondsSinceEpoch / 1000).round(),
'exp': (exp.millisecondsSinceEpoch / 1000).round(),
'tpc': sessionName,
'role_type': int.parse(roleType),
'cloud_recording_option': 1,
},
);
var token = jwt.sign(SecretKey(configs["ZOOM_SDK_SECRET"]));
print(token);
return token;
} catch (e) {
print(e);
return '';
}
}
Код на языке Python :
def video(request,session_name):
payload={
"app_key": settings.ZOOM_API_KEY,
"role_type": 0,
"tpc": session_name,
"version": 1,
"session_key": "zoom-5678",
"geo_regions": "US,AU,CA,IN,CN,BR,MX,HK,SG,JP,DE,NL",
"iat": int(time.time()),
"exp": int(time.time()) + 7200
}
header = {
"alg": "HS256",
"typ": "JWT"
}
secret_key = settings.ZOOM_API_SECRET
jwt = generate_jwt(header, payload, secret_key)
return JsonResponse({'signature': jwt},safe=False)
Код JavaScript для присоединения к сессии:
import uitoolkit from '{% static "zoom/@zoom/videosdk-ui-toolkit/index.js" %}';
var base_url = document.getElementById('base_url').value;
var session_value = document.getElementById('session_value').value;
var session_name = 'session_name'
var sessionContainer = document.getElementById('sessionContainer');
var authEndpoint = base_url+'video_call/' + encodeURIComponent(session_value);
console.log(authEndpoint);
var config = {
videoSDKJWT: '',
// sessionName: session_value,
sessionName: 'asadasdasd',
userName: 'Deepthi',
sessionPasscode: 'zoom-5678',
features: ['video', 'audio', 'settings', 'users', 'chat', 'share']
};
var role = 0; // 1 for host, 0 for participant
window.getVideoSDKJWT = getVideoSDKJWT;
function getVideoSDKJWT() {
document.getElementById('join-flow').style.display = 'none';
fetch(authEndpoint, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-CSRFToken': csrf_token
},
body: JSON.stringify({
sessionName: config.sessionName,
role: role,
csrf_token: csrf_token
})
}).then((response) => {
// Read the JSON response only once
return response.json().then((data) => {
if (data.signature) {
console.log(data.signature);
config.videoSDKJWT = data.signature;
joinSession();
} else {
console.log(data);
}
});
}).catch((error) => {
console.log(error);
});
}
function joinSession() {
uitoolkit.joinSession(sessionContainer, config);
uitoolkit.onSessionClosed(sessionClosed);
}
var sessionClosed = (() => {
console.log('session closed');
uitoolkit.closeSession(sessionContainer);
document.getElementById('join-flow').style.display = 'block';
});
Не сообщается ни о какой ошибке. Только каждый раз создается новая сессия. Неужели нельзя сделать это таким образом? Нужно ли мне позаботиться о чем-то еще?