Интеграция 100ms для видеоконференций на сайте
Типичная проблема: вы добавили iframe с Zoom, но участники жалуются на задержки, кастомизация интерфейса невозможна, а масштабирование ограничено. 100ms решает это через SDK с полным контролем. 100ms — WebRTC-платформа с React SDK, готовыми UI-компонентами и гибкой тарификацией. Особенность — Rooms и Templates: вы создаёте шаблон в дашборде (настройки ролей, записи, качества), а потом создаёте комнаты на его основе. Это избавляет от ручного управления правами и позволяет масштабировать видеоконференции до сотен участников без перегрузки бэкенда. Мы используем 100ms, чтобы встроить видеоконференции с полным контролем: свои роли, запись, кастомизация UI. Без костылей с iframe и ограничений Zoom. Если на вашем сайте сотня пользователей одновременно пытаются войти в конференцию — 100ms справляется с этим через Rooms и Templates. Наши клиенты экономят в среднем $5000 на разработке собственного WebRTC-решения при переходе на 100ms.
Какие проблемы решает 100ms?
100ms эффективно управляет ролями: вы создаёте шаблон с ролями host, guest, viewer. Каждый участник получает token с соответствующей ролью. Облачная запись конференций включается в шаблоне, вебхуки уведомляют о начале и завершении. WebRTC обеспечивает real-time коммуникацию с минимальной задержкой — это подтверждено нагрузочным тестированием. Roomkit позволяет переопределить интерфейс под ваш бренд — цвета, расположение элементов, кастомные кнопки.
Почему 100ms лучше самописного решения на WebRTC?
Самописный WebRTC требует реализации STUN/TURN-серверов, сигнализации, управления комнатами и токенами. 100ms предоставляет всё из коробки: готовый бэкенд для создания комнат, генерации токенов и мониторинга. Это сокращает время разработки на недели и снижает риск ошибок. По нашим данным, интеграция 100ms в 3 раза быстрее, чем разработка собственного WebRTC-решения. Стоимость минуты видео в 100ms — от $0.004, что значительно дешевле аналогов (Twilio ~$0.008, Agora ~$0.007). Таким образом, вы экономите и время, и деньги.
Как происходит интеграция 100ms на ваш сайт?
Мы строим серверный API для создания комнат и генерации токенов. Клиентский SDK (React) подключается к комнате и управляет аудио/видео потоками. Ниже — ключевые шаги.
Создание комнаты и получение токена
npm install @100mslive/roomkit-react @100mslive/react-sdk
// На сервере — Management Token для API
import jwt from 'jsonwebtoken';
function generateManagementToken(): string {
return jwt.sign(
{
access_key: process.env.HMS_ACCESS_KEY,
type: 'management',
version: 2,
iat: Math.floor(Date.now() / 1000),
nbf: Math.floor(Date.now() / 1000),
},
process.env.HMS_APP_SECRET!,
{ algorithm: 'HS256', expiresIn: '24h' }
);
}
// Создать комнату
async function createRoom(name: string): Promise<string> {
const mgmtToken = generateManagementToken();
const response = await fetch('https://api.100ms.live/v2/rooms', {
method: 'POST',
headers: {
'Authorization': `Bearer ${mgmtToken}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
name,
template_id: process.env.HMS_TEMPLATE_ID, // из 100ms Dashboard
}),
});
const room = await response.json();
return room.id;
}
// Получить App Token для участника
async function getAppToken(roomId: string, userId: string, role: string): Promise<string> {
const mgmtToken = generateManagementToken();
const response = await fetch('https://api.100ms.live/v2/auth-token', {
method: 'POST',
headers: {
'Authorization': `Bearer ${mgmtToken}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
room_id: roomId,
user_id: userId,
role, // роль из Template: 'host', 'guest', 'viewer'
}),
});
const { token } = await response.json();
return token;
}
// API endpoint
app.post('/api/video/join', authenticate, async (req, res) => {
const { sessionId } = req.body;
let session = await db.videoSessions.findById(sessionId);
if (!session.hmsRoomId) {
const roomId = await createRoom(`session-${sessionId}`);
session = await db.videoSessions.update(sessionId, { hmsRoomId: roomId });
}
const isHost = session.hostId === req.user.id;
const token = await getAppToken(session.hmsRoomId, req.user.id, isHost ? 'host' : 'guest');
res.json({ token });
});
React компонент с Roomkit
import {
HMSRoomProvider,
useHMSActions,
useHMSStore,
selectIsConnectedToRoom,
selectPeers,
selectLocalPeer,
HMSPeer,
} from '@100mslive/react-sdk';
function VideoConference({ authToken, userName }: { authToken: string; userName: string }) {
return (
<HMSRoomProvider>
<VideoRoom authToken={authToken} userName={userName} />
</HMSRoomProvider>
);
}
function VideoRoom({ authToken, userName }) {
const hmsActions = useHMSActions();
const isConnected = useHMSStore(selectIsConnectedToRoom);
const peers = useHMSStore(selectPeers);
const localPeer = useHMSStore(selectLocalPeer);
useEffect(() => {
hmsActions.join({ authToken, userName, settings: { isAudioMuted: false, isVideoMuted: false } });
return () => {
hmsActions.leave();
};
}, [authToken]);
if (!isConnected) {
return <div className="flex items-center justify-center h-64">Подключение...</div>;
}
return (
<div>
<div className="grid grid-cols-2 gap-4 p-4">
{peers.map(peer => (
<PeerTile key={peer.id} peer={peer} />
))}
</div>
<div className="flex gap-3 justify-center p-4">
<button onClick={() => hmsActions.setLocalAudioEnabled(!localPeer?.audioEnabled)}
className="p-3 rounded-full bg-gray-800 text-white">
{localPeer?.audioEnabled ? '🎤' : '🔇'}
</button>
<button onClick={() => hmsActions.setLocalVideoEnabled(!localPeer?.videoEnabled)}
className="p-3 rounded-full bg-gray-800 text-white">
{localPeer?.videoEnabled ? '📹' : '📷'}
</button>
<button onClick={() => hmsActions.leave()}
className="p-3 rounded-full bg-red-600 text-white">
Покинуть
</button>
</div>
</div>
);
}
function PeerTile({ peer }: { peer: HMSPeer }) {
const videoRef = useRef<HTMLVideoElement>(null);
const hmsActions = useHMSActions();
const videoTrack = useHMSStore(selectCameraStreamByPeerID(peer.id));
useEffect(() => {
if (videoRef.current && videoTrack) {
hmsActions.attachVideo(videoTrack.id, videoRef.current);
}
return () => {
if (videoRef.current && videoTrack) {
hmsActions.detachVideo(videoTrack.id, videoRef.current);
}
};
}, [videoTrack]);
return (
<div className="relative bg-gray-900 rounded-xl overflow-hidden aspect-video">
<video ref={videoRef} autoPlay muted={peer.isLocal} playsInline className="w-full h-full object-cover" />
<span className="absolute bottom-2 left-2 text-white text-sm bg-black/50 px-2 rounded">
{peer.name} {peer.isLocal && '(вы)'}
</span>
</div>
);
}
Что входит в интеграцию?
Backend API: серверные эндпоинты для создания комнат, генерации токенов и управления шаблонами. React-компоненты: подключение Roomkit, кастомизация UI под ваш бренд. Настройка шаблонов: создание шаблонов в дашборде 100ms с нужными ролями и опциями записи. Тестирование: проверка стабильности при одновременном подключении до 50+ участников. Документация: описание API и инструкция по развёртыванию. Пост-поддержка: консультации после интеграции.
Сравнение 100ms с другими WebRTC-решениями
| Параметр | 100ms | Twilio Video | Agora |
|---|---|---|---|
| Кастомизация UI | Полная через Roomkit | Минимальная | Средняя (виджеты) |
| Роли и права | Гибкие шаблоны | Только роль участника | Расширенные (настройка прав) |
| Запись | Облачная, с вебхуками | Через сторонние сервисы | Встроенная |
| Масштабирование | До 1000 участников | До 50 участников | До 10 000 участников |
| Цена (за 1000 минут) | ~$0.004 | ~$0.008 | ~$0.007 |
100ms выигрывает в кастомизации и простоте интеграции, а по цене занимает среднюю позицию. Мы помогаем выбрать оптимальное решение под ваши задачи.
Этапы интеграции 100ms
| Этап | Длительность | Описание |
|---|---|---|
| Аналитика и проектирование | 1–2 дня | Обсуждение требований, выбор шаблонов, ролей, UI |
| Реализация бэкенда | 1–2 дня | Создание API для комнат и токенов, настройка шаблонов |
| Интеграция клиента | 1–2 дня | Подключение Roomkit, кастомизация компонентов |
| Тестирование и деплой | 1 день | Нагрузочное тестирование, развёртывание на сервере |
Сроки
Интеграция 100ms с созданием комнаты, токенами и React компонентом — 2–3 дня. С ролями, записью и вебхуками — 4–5 дней. Свяжитесь с нами, чтобы обсудить детали вашего проекта.
Почему выбирают нас?
Опыт нашей команды — более 5 лет в веб-разработке и интеграции WebRTC-решений. Мы гарантируем стабильность видеоконференций под нагрузкой и предоставляем техническую поддержку после внедрения. Сертифицированные специалисты следят за актуальностью кода и обновлениями SDK. Основной стек: React, TypeScript, Node.js, 100ms SDK.
Закажите консультацию — мы оценим ваш проект и предложим оптимальное решение для интеграции видеоконференций. Получите консультацию по интеграции 100ms. Свяжитесь с нами, чтобы обсудить детали.







