Прощание с экономикой совместного потребления, возвестившей волну прямых трансляций. Как разработчик, я всегда хочу исследовать свою неизведанную территорию. Сегодня я научу вас, как создать службу потокового вещания SRS и службу Node.js. Служба Node.js запрашивает видеоданные у службы потокового вещания SRS, затем анализирует запрошенные данные и, наконец, помещает проанализированные данные в тег видео на странице html.
В этой статье речь пойдет о следующих аспектах:
- Приобретите облачные сервисы и установите необходимую среду разработки на облачном хосте
- Создание службы потокового видео SRS
- Создайте службу Node.js для анализа данных видеопотока SRS
- Решить проблему перекрестных доменных запросов в службе Node.js
Купить облачные сервисы
На рынке облачных вычислений существует множество вариантов услуг, таких как внутреннее облако XX и зарубежное облако XX. Во избежание подозрений, здесь не рекомендуется.УведомлениеВсе примеры, описанные в этой статье, относятся к системной среде Ubuntu, поэтому рекомендуется установить систему Ubuntu на облачный хост.
Ниже приведены инструменты для подключения различных терминалов к облачным сервисам:
-
Компьютер с системой Windows 1. Загрузите и установите клиентский инструмент Windows SSH и Telnet Putty.Скачать замазку2. Имя пользователя: root, Хост: 193.112.195.120 3. Следуйте подсказкам Putty, чтобы войти в систему.Справка по использованию пароля Putty
-
Компьютер с системой Linux/Mac OS X (логин с паролем) 1. Откройте клиент SSH (Mac может использовать терминал, поставляемый с системой) 2. Введите ssh -q -l root -p 22 193.112.195.120 3. Введите пароль экземпляра CVM для входа.
-
Компьютер с системой Linux/Mac OS X (вход с ключом) 1. Откройте клиент SSH (Mac может использовать терминал, который поставляется вместе с системой). 2. Найдите адрес локального хранилища файла ключа SSH, связанного с вашим облачным сервером. 3. Ваши ключи не должны быть общедоступны для работы SSH. Используйте эту команду: chmod 400 [путь к ключевому файлу]. 4. Введите команду: ssh [-i путь к файлу ключа] root@193.112.195.120.
Настройка среды разработки системы ubuntu
установить wget
Команда wget используется для загрузки файла с указанного URL-адреса.команда wget завершена.
Установите команду инструмента wget:
sudo apt-get update
sudo apt-get install wget
Проверьте, успешно ли установлен wget:
Установите среду Node.js
Существует множество способов установить среду Node.js в системе Ubuntu, см.Разные способы установки Node.js под Ubuntu.本文将采用源码的方式:
- Обновите систему и установите несколько пакетов Node.js.
sudo apt-get update
sudo apt-get install python gcc make g++
- Получите исходный код Node.JS (версия v8.11.1)
sudo wget http://nodejs.org/dist/v8.11.1/node-v8.11.1.tar.gz
sudo tar zxvf node-v8.11.1.tar.gz
- начать установку
cd node-v8.11.1
sudo ./configure
sudo make install
Проверьте установленную версию Node.js:node -v
Необходимо установить перед установкой nginxpcre
установить ПКР
- Скачать исходный код pcre
sudo wget https://ftp.pcre.org/pub/pcre/pcre2-10.31.tar.gz
sudo tar zxvf pcre2-10.31.tar.gz
- установить ПКР
настроить
cd pcre2-10.31
sudo ./configure
компилировать
sudo make
Установить
sudo make install
Перед установкой nginx необходимо установить zlib.
установить zlib
sudo apt-get install zlib1g-dev
установить нгинкс
Есть много способов установить nginx, вы можете обратиться кУстановка и настройка Nginx в Ubuntu.
Здесь я буду использовать исходный метод установки для установки nginx.
Загрузите исходный код nginx и разархивируйте его.
sudo wget http://nginx.org/download/nginx-1.12.2.tar.gz sudo tar zxvf nginx-1.12.2.tar.gz
настроить
sudo ./comfigure
компилировать
sudo make
Установить
sudo make install
**Примечание.**Иногда вам также необходимо установить некоторые пакеты nginx.
Выполните следующую команду, чтобы установить пакет nginx.
sudo apt-get install nginx-core
sudo apt-get install nginx-extras
sudo apt-get install nginx-full
sudo apt-get install nginx-light
настроить nginxФайл nginx.conf обычно находится в папке /etc/nginx/nginx.conf и редактируется командой vi.ви общие команды
Вот некоторые из наиболее распространенных команд vi:
-
открыть файл
sudo vi xxxx
-
Введите режим редактирования файлаПосле открытия файла нажмите i (вставка появится внизу файла)
-
переключить режим файлаНажмите esc на основе предыдущего шага (вставка внизу файла исчезнет)
-
выходной файлНа основе предыдущего шага нажмите комбинацию клавиш ":" + "q" + "!" без сохранения и выхода На основе предыдущего шага нажмите комбинацию клавиш «:» + «w» + «q», чтобы сохранить и выйти.
Запустите службу nginxПорт по умолчанию для запуска nginx — 80.
Перед запуском можно определить занятость следующих портов:sudo lsof -i:80
Если порт занят, вы можете использовать команду kill, чтобы убить процесс.
Файл запуска nginx обычно находится в папке /usr/local/nginx/sbin.Обычные команды службы nginx:
sudo nginx //启动服务
sudo nginx -s stop //关闭服务
sudo nginx -s reload //重启服务
sudo nginx -t -c /usr/local/nginx/conf/nginx.conf //检查nginx配置是否正确
Запустите FLV-сервис SRS в Ubuntu
SRSПозиционирование — это кластер серверов прямых интернет-трансляций на уровне оператора, обеспечивающий лучшую концептуальную целостность и простейший код реализации. SRS предоставляет различные услуги потокового видео, см. подробностиГитхаб документа SRS.
Общие протоколы прямых трансляций:
- RTMP: нижний уровень основан на TCP и использует Flash на стороне браузера.
- HTTP-FLV: на основе потокового ввода-вывода HTTP для передачи FLV, воспроизведение FLV зависит от поддержки браузера.
- WebSocket-FLV: основан на WebSocket для передачи FLV, воспроизведение FLV зависит от поддержки браузера. WebSocket построен поверх HTTP, и HTTP-соединение должно быть установлено до того, как будет установлено соединение WebSocket.
- HLS: Http Live Streaming, протокол потоковой передачи мультимедиа на основе HTTP от Apple. HTML5 можно напрямую открывать и воспроизводить.
- RTP: на основе UDP, с задержкой в 1 секунду, не поддерживается браузерами.
Здесь я выбираю протокол http-flv, потому что структура, которую я выбираю для анализа видеопотока SRS,FLV-фреймворк Bibili, подробности см. в следующем разделе. Процесс развертывания службы потоковой передачи http-flv см.Пример развертывания SRS-HTTP-FLV:
- получить srs
git clone https://github.com/ossrs/srs && cd srs/trunk
- настроить srs
sudo ./configure && make
- скомпилировать srs
sudo make
- запустить службу
sudo ./objs/srs -c conf/http.flv.live.conf
Программное обеспечение для прямых трансляций OBS
программное обеспечение ОБСБесплатное программное обеспечение с открытым исходным кодом для прямой трансляции и записи. Подробнее об использовании OBS см.Учебник Douyu OBS.
Вам нужно настроить путь потока на OBS: rtmp://ваш ip адрес/live, и имя потока.
Убедитесь, что FLV-поток успешно отправленВведите в браузере:http://118.89.247.129:8080/live/live.flv, если загруженное видео появляется, это означает, что OBS успешно передает службу потоковой передачи в службу SRS.
Фреймворк для парсинга прямых трансляций — flv.js
flv.js — проект с открытым исходным кодом от Bilibli. Он анализирует FLV-файлы и передает их собственным тегам HTML5 Video для воспроизведения аудио- и видеоданных, что позволяет браузерам воспроизводить FLV без Flash. Подробнее см.Используйте flv.js для прямых трансляций.
Я открыл свой собственный код для прямой трансляции, используя библиотеку flv.js на github. Код представляет собой сервис, созданный с использованием экспресс-фреймворка node.js.Если вы хотите запустить код на сервере Ubuntu, вам нужно немного знать node.js.
git clone https://github.com/spursy/live.git // 克隆node.js代码
cd live // 进入项目
npm install // 安装项目必须的包
npm run dev // 启动项目
Обратите внимание, что вам необходимо изменить путь к источнику видео в live/view/index.html перед запуском проекта.
if (flvjs.isSupported()) {
var flvPlayer = flvjs.createPlayer({
type: 'flv',
"isLive": true,//<====加个这个
url: "http://bianchenggou.wang:8080/live/live.flv',//<==自行修改
//url:"demo.flv"
});
flvPlayer.attachMediaElement(videoElement);
flvPlayer.load(); //加载
flv_start();
}
Реализуйте потоковое видео FLV в прямом эфире
Изменить исключение
Когда программа запускает службу node.js и обращается к http://193.112.195.120:9000/, она не может получить видеопоток.Проверить исключение через горячую клавишу F12 браузера chrome:
Ненормальное отображение на консоли заключается в том, что нельзя разрешить междоменные запросы.Существует много способов решить проблему запрета междоменных запросов.Одна статья может касаться междоменных.
Здесь я использую разрешение междоменного доступа в конфигурации сервера nginx.междоменная конфигурация nginx.
При установке nginx файл nginx.conf помещается в папку **/usr/local/nginx/conf**. Использование файлов конфигурации nginx можно найти вУчебник по Nginx.
изменить, как показано ниже:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
##
# Access-Control
##
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
server {
listen 80;
server_name bianchenggou.wang;
location /srs/ {
proxy_pass http://127.0.0.1:8080/;
}
location / {
proxy_pass http://127.0.0.1:9000/;
}
}
}
Поскольку nginx выполняет прокси-сервис для всех запросов, поэтомуПуть к источнику видео в live/view/index.htmlСледует изменить на:
if (flvjs.isSupported()) {
var flvPlayer = flvjs.createPlayer({
type: 'flv',
"isLive": true,//<====加个这个
url: "http://bianchenggou.wang/srs/live/live.flv',//<==自行修改
//url:"demo.flv"
});
flvPlayer.attachMediaElement(videoElement);
flvPlayer.load(); //加载
flv_start();
}
При повторном обращении к службе узла исключение больше не возникает.
Настоящее живое видео
Конфигурация программного обеспечения ABS Live Breadcast остается неизменным. После выталкивания живого потока в соответствии с руководством запустите службу Node.js и перейдите на страницу Live Broadcast: