Что такое ТРТК
Tencent Real-Time Communication (TRTC) использует 21-летний опыт Tencent в области сетевых и аудио- и видеотехнологий и предоставляет два решения на основе сценариев для многопользовательских аудио- и видеовызовов и интерактивных прямых трансляций с малой задержкой через Tencent Cloud. Услуги.Открытая для разработчиков, она стремится помочь разработчикам быстро создавать недорогие, с малой задержкой, высококачественные интерактивные аудио- и видеорешения.
Блок-схема ТРТК
присоединиться к комнате
Создать поток
this.client = TRTC.createClient({
mode: 'videoCall',
sdkAppId,
userId,
userSig
});
- режим: режим аудио- и видеовызова в реальном времени, установлен на
‘videoCall’
, интерактивный режим прямой трансляции, установлен на'live'
- sdkAppId: тот, на который вы подали заявку в Tencent Cloud.
sdkAppId
- userId: идентификатор пользователя, сгенерированный случайным образом, дубликаты не допускаются в комнате.
userId
- userSig: подпись пользователя, сгенерированная на основе фонового алгоритма, щетка для защиты от кражи
Присоединяйся
this.client
.join({ roomId })
.catch(error => {
console.error('进房失败 ' + error);
})
.then(() => {
console.log('进房成功');
});
- Roomid: Идентификатор комнаты, сгенерированный в фоновом режиме, не может быть повторен
Опубликовать локальный поток
локальный толчок
this.localStream = TRTC.createStream({ userId: this.userId, audio: true, video: true });
- userId: идентификатор пользователя, сгенерированный случайным образом, дубликаты не допускаются в комнате.
userId
- аудио: записывать ли звук с микрофона
- видео: захватывать ли видео с камеры
Инициализировать локальные аудио- и видеопотоки
this.localStream
.initialize()
.catch(err => {
console.error('初始化本地流失败 ' + error);
})
.then((res) => {
console.log('初始化本地流成功');
this.localStream.play('localVideo');
});
- местноеВидео: связанный
div id
выпускать
this.client
.publish(this.localStream)
.catch(err => {
console.error('本地流发布失败 ' + error);
})
.then((res) => {
console.log('本地流发布成功');
});
- После успешной публикации локального потока вы можете зарегистрировать функцию отправки локального потока и выполнять ее каждые три секунды для обработки исключений.
Подпишитесь на удаленный поток
дистанционное увеличение расхода
this.client.on('stream-added', event => {
this.remoteStream = event.stream;
//订阅远端流
this.client.subscribe(this.remoteStream);
});
Подписка на удаленный поток
this.client.on('stream-subscribed', event => {
console.log('log', 'onRemoteStreamUpdate:' + event);
this.remoteStream = event.stream;
this.id = this.remoteStream.getId();
const remoteVideoDom = document.querySelector('#remoteVideo');
if(!document.querySelector(`#remoteStream-${this.id}`)) {
const div = document.createElement('div');
div.setAttribute('style', 'position: absolute; right: 0; left: 0; top: 0; width: 100%; height: 100%');
div.setAttribute('id', `remoteStream-${this.id}`);
remoteVideoDom.appendChild(div);
}
const videoLoading = document.querySelector('#video-loading');
videoLoading.setAttribute('style', 'display: none;');
// 播放远端流
this.remoteStream.play(`remoteStream-${this.id}`);
});
После успешного мониторинга удаленного потока вы можете зарегистрировать функцию изменения состояния удаленного потока для обработки исключений.
покидать
Отменить публикацию локального потока
this.client.unpublish(this.localStream)
.catch((err) => {
console.log('error', 'unpublish error:' + err);
})
.then((res) => {
// 取消发布本地流成功
console.log('log', 'unpublish error:' + res);
});
выйти из комнаты
this.client.leave();
Обработка исключений
прослушиватель локального потока
// 每隔3秒获取本地推流情况
this.localTimer = setInterval(() => {
this.client.getLocalVideoStats().then(stats => {
for (let userId in stats) {
console.log(new Date(), 'getLocalVideoStats', 'userId: ' + userId +
'bytesSent: ' + stats[userId].bytesSent + 'local userId' + this.userId);
if(this.userId == userId && stats[userId].bytesSent == 0) {
this.onEvent('leave');
}
const bytesSentSR = (stats[userId].bytesSent - this.bytesSent) / 3000;
if(this.userId == userId && bytesSentSR >= 20 && bytesSentSR <= 59) {
}
if(this.userId == userId) {
this.bytesSent = stats[userId].bytesSent;
}
}
});
}, 3000);
- После того, как локальный поток будет успешно опубликован, вы можете зарегистрировать функцию изменения локального push-потока для обработки исключений.
- bytesSent: если единица-отправитель
0
, значит локальная сеть отключена - Формула: Текущие отправленные байты - Последние отправленные байты / 3000
Удаленный мониторинг потоков
this.remoteTimer = setInterval(() => {
this.client.getRemoteVideoStats().then(stats => {
for (let userId in stats) {
console.log('getRemoteVideoStats', 'userId: ' + userId +
' bytesReceived: ' + stats[userId].bytesReceived +
' packetsReceived: ' + stats[userId].packetsReceived +
' packetsLost: ' + stats[userId].packetsLost);
// const bytesReceived = (stats[userId].bytesReceived - this.bytesReceived) / 3000;
// let title = '';
// if(this.agentId == userId && bytesReceived >= 120) {
// title = '当前通话,对方网络良好';
// }
// if(this.agentId == userId && bytesReceived >= 60 && bytesReceived <= 119) {
// title = '当前通话,对方网络一般';
// }
// if(this.agentId == userId && bytesReceived >= 20 && bytesReceived <= 59) {
// title = '当前通话,对方网络不佳';
// }
// if(this.agentId == userId) {
// Taro.showToast({
// title,
// icon: 'none',
// duration: 1000
// });
// this.bytesReceived = stats[userId].bytesReceived;
// }
}
});
}, 3000);
- bytesReceived: если принимающее устройство равно 0, это означает, что другая сторона отключена от сети.
- После успешного мониторинга удаленного потока можно зарегистрировать функцию изменения состояния удаленного потока для обработки исключений.
- Формула: текущие полученные байты - последние полученные байты / 3000
В настоящее время через уведомление о событии TRTC, сSocket
может сделать лучшую поддержку для обработки исключений.
ТРТК-совместимость
Android(H5)
-
Камеры не совпадают. Например, если у телефона Huawei три задние и одна передняя, позвоните
TRTC
, но возвращает интерфейс камеры6и нетLabel
Разметить где зад, где перед, проблема производителя, требует специальной адаптации. -
Необходимо использовать браузер WeChat для открытия
H5
страница, другие браузеры будут время от времени падать и возникать другие проблемы (предположим, что браузер WeChat был адаптирован). -
Для некоторых моделей Huawei P30 Tencent по умолчанию не открывается в среде браузера WeChat.
X5
ядро, которое требует специальной обработки. Открыть схему: 1. Переоткрыть можно в настройках телефона, управление приложениями, WeChat, разрешения микрофона и камеры. 2. СканированиемX5
Ядро включает QR-код, и включается загрузка. В противном случае публикация потока не удастся, потому чтоX5
Ядро выключается, в результате чего нет разрешения на получение. -
TRTC
Может иметь лучшую поддержку для большинства моделей.
iOS(H5)
-
должен использовать
Safari
Браузеры, другие браузеры будут иметь различные проблемы. -
Пользователю необходимо вручную запустить воспроизведение, в это время необходимо
video
добавить компонентautoplay
,muted
,playsinline
,controls
(SDK ниже версии 4.0.0)
<Video
id="remoteVideo"
autoplay
muted
playsinline
controls
/>
-
Переключение передней и задней камер должно быть основано на
Label
Наклейки, чтобы различать, получить переднюю и заднюю камерыdeviceId
, процесс переключения выглядит следующим образом:1. Получите камеру
TRTC.getCameras().then(devices => { this.cameras = devices; });
2. Выберите камеру
this.localStream.switchDevice('video', deviceId) .catch(err => { console.log('error', 'switchDevice error:' + err); }) .then((res) => { console.log('log', 'switchDevice success' + res); });
Апплеты
-
React
Стек технологий (я использовал толькоTaro
) может поддерживать воспроизведение видео, но рекомендую лучшеVue
технологический стек, потому чтоVue
Есть официально упакованные компоненты. -
Совместимость мобильных телефонов относительно хорошая, и среда WeChat благословлена.
смешивание облаков
request({
url: `http://fcgi.video.qcloud.com/common_access?appid=${liveSign.appId}&interface=Mix_StreamV2&t=${liveSign.t}&sign=${liveSign.liveSign}`,
method: 'POST',
headers: {
'content-type': 'application/json',
},
body: JSON.stringify(params)
}, (error, response, body) => {
res.send({errCode: 0});
});
пройти черезhttp://fcgi.video.qcloud.com/common_access
интерфейс, мы можем отлично следить за обстановкой в помещении, а записанное видео будет загружаться на облачную платформу Tencent по запросу, а также поддерживает экспорт клиентов самостоятельно.
блог
Добро пожаловать, чтобы следовать за мнойблог