RTSP видео поток в HTML5
Мне нужно реализовать видеопоток RTSP в моем приложении angulajs. Как и все, что мы знаем, RTSP нелегко работает с HTML, нам нужно использовать какой-нибудь плагин. Я пытаюсь с html5_rtsp_player, и это только рабочее решение для меня, но я не могу найти способ сделать четыре представления потока (div), а также потому, что это сервер третьей части, я боюсь, если сервер иногда не работает или меняется что-то и т. д., и я попаду в беду. И с этим html5_rtsp_player я потерял слишком много пропускной способности, потому что мне нужно сначала перевести видеопоток в браузер и отправить на потоковый сервер для конвертации, а после забрать обратно для предварительного просмотра (если я ошибаюсь, пожалуйста, объясните, потому что это мой первый раз что-то сделать с видеопотоком) Код для этого
<video id="test_video" controls autoplay>
<source src="rtsp://xx.xx.xx.xx?real_stream" type="application/x-rtsp">
</video>
<video id="test_video" controls autoplay>
<source src="rtsp://xx.xx.xx.xx?real_stream" type="application/x-
rtsp">
</video>
<script src="https://cdn.bootcss.com/babel-polyfill/7.0.0-
beta.2/polyfill.min.js"></script>
<script src="streamedian.min.js"></script>
<script>
var p = Streamedian.player('test_video', {socket:
"wss://specforge.com/ws/"});
</script>
Далее я пытаюсь использовать видеогуляр, но мои потоки не работают, ничего не произошло, вот код
'use strict';
angular.module('myApp',
[
"ngSanitize",
"com.2fdevs.videogular",
"com.2fdevs.videogular.plugins.controls",
"com.2fdevs.videogular.plugins.overlayplay",
"com.2fdevs.videogular.plugins.poster",
"com.2fdevs.videogular.plugins.dash"
]
)
.controller('HomeCtrl',
["$sce", function ($sce) {
this.config = {
sources: [
{src: "rtsp://xx.xx.xx.xx:xxxx/user=xx_password=xxxx_channel=1_stream=0.sdp?real_stream"}
],
theme: {
url: "https://unpkg.com/videogular@2.1.2/dist/themes/default/videogular.css"
},
plugins: {
poster: "http://www.videogular.com/assets/images/videogular.png"
}
};
}]
);
html, body {
margin: 0;
padding: 0;
}
.videogular-container {
width: 100%;
height: 320px;
margin: auto;
overflow: hidden;
}
@media (min-width: 1200px) {
.videogular-container {
width: 1170px;
height: 658.125px;
}
.videogular-container.audio {
width: 1170px;
height: 50px;
}
}
@media (min-width: 992px) and (max-width: 1199px) {
.videogular-container {
width: 940px;
height: 528.75px;
}
.videogular-container.audio {
width: 940px;
height: 50px;
}
}
@media (min-width: 768px) and (max-width: 991px) {
.videogular-container {
width: 728px;
height: 409.5px;
}
.videogular-container.audio {
width: 728px;
height: 50px;
}
}
<div ng-app="myApp">
<div ng-controller="HomeCtrl as controller" class="videogular-container">
<videogular vg-theme="controller.config.theme.url">
<vg-media vg-src="controller.config.sources" vg-dash></vg-media>
<vg-controls>
<vg-play-pause-button></vg-play-pause-button>
<vg-time-display>{{ currentTime | date:'mm:ss':'+0000' }}</vg-time-display>
<vg-scrub-bar>
<vg-scrub-bar-current-time></vg-scrub-bar-current-time>
</vg-scrub-bar>
<vg-time-display>{{ timeLeft | date:'mm:ss':'+0000' }}</vg-time-display>
<vg-volume>
<vg-mute-button></vg-mute-button>
<vg-volume-bar></vg-volume-bar>
</vg-volume>
<vg-fullscreen-button></vg-fullscreen-button>
</vg-controls>
<vg-overlay-play></vg-overlay-play>
<vg-poster vg-url='controller.config.plugins.poster'></vg-poster>
</videogular>
</div>
</div>
<script src="https://cdn.dashjs.org/v2.0.0/dash.all.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular-sanitize.min.js"></script>
<script src="https://unpkg.com/videogular@2.1.2/dist/videogular/videogular.js"></script>
<script src="https://unpkg.com/videogular@2.1.2/dist/controls/vg-controls.js"></script>
<script src="https://unpkg.com/videogular@2.1.2/dist/overlay-play/vg-overlay-play.js"></script>
<script src="https://unpkg.com/videogular@2.1.2/dist/poster/vg-poster.js"></script>
<script src="https://unpkg.com/videogular@2.1.2/dist/dash/vg-dash.js"></script>
Плагин третьей части, который я пытаюсь использовать, это kurento-one2many-call. Когда я пытаюсь установить зависимость от npm, я получаю
C:\xampp\htdocs\rtsp\kurento-tutorial-node\kurento-one2many-call\node_modules\kurento-jsonrpc\node_modules\bufferutil> если не определено npm_config_node_gyp (узел "C:\Users\Bozo\AppData\Roaming\node_modules\npm\bin\node-gyp-bin\....\node_modules\node-gyp\bin\node-gyp.js"перестроить) else (перестроить узел"") gyp ERR! Ошибка конфигурации GYR ERR! Ошибка стека: Не удается найти исполняемый файл Python "python", вы можете установить переменную PYTHON env. Гипер ERR! стек в Object.failNoPython (C:\Users\Bozo\AppData\Roaming\npm\node_modules\npm\node_modules\node-gyp\lib\configure.js:483:19) gyp ERR! стек в объекте. (C:\Users\Bozo\AppData\Roaming\npm\node_modules\npm\node_modules\node-gyp\lib\configure.js:508:16) gyp ERR! стек в C:\Users\Bozo\AppData\Roaming\npm\node_modules\npm\node_modules\graceful-fs\polyfills.js:284:29 gyp ОШИБКА! стек в FSReqWrap.oncomplete (fs.js:123:15) gyp ERR! Система Windows_NT 10.0.16299 gyp ERR! команда "C:\Program Files\nodejs\node.exe" "C:\Users\Bozo\AppData\Roaming\npm\node_modules\npm\node_modules\node-gyp\bin\node-gyp.js" "перестроить" gyp ERR! cwd C:\xampp\htdocs\rtsp\kurento-tutorial-node\kurento-one2many-call\node_modules\kurento-jsonrpc\node_modules\bufferutil gyp ERR! узел -v v6.10.3 gyp ERR! node-gyp -v v3.6.2 gyp ERR! не в порядке, нпм ERR! код ELIFECYCLE npm ERR! errno 1 npm ERR! bufferutil@1.2.1 установить:
node-gyp rebuild
нпм ERR! Статус выхода 1 нпм ERR! нпм ERR! Ошибка при установке сценария bufferutil@1.2.1. нпм ERR! Это, вероятно, не проблема с npm. Вероятно, есть дополнительные выходные данные регистрации. нпм ERR! Полный журнал этого прогона можно найти в: npm ERR! C: \ Users \ Bozo \ AppData \ Roaming \ npm-cache_logs \ 2018-01- 31T11_41_09_765Z-debug.log
VLC больше не работает в Chrome и Firefox, как веб-плагин VLC.
Мой вопрос: может ли кто-нибудь мне помочь, как лучше всего получить поток RTSP в HTML? Есть ли какой-нибудь пример для этого? Мне не нужны элементы управления, только предварительный просмотр потокового видео.
Если это не очень хорошее решение, есть ли какой-нибудь конвертер видео в реальном времени для конвертации RTSP в mp4 или hsl, но со стороны внешнего интерфейса (javascript)? Спасибо