ХТТП Ливе Стреаминг (ХЛС) је веома робустан стриминг видео протокол који имплементира Аппле Инц. ХЛС користи ХТТП трансакције које пролазе кроз заштитне зидове, проксије и могу се са лакоћом дистрибуирати преко ЦДН-ова. Стога је ова технологија у стању да допре до много веће публике него РТП или други УДП протоколи. Већи део видео стриминга уживо на мрежи данас је домаћин скупим системима који користе ХЛС, али су генерално скупи и захтевају много серверских ресурса. Овај водич ће вам показати како да подесите веома приступачан Убунту 14.04 ВУЛТР ВПС за ХЛС догађаје за стриминг уживо користећи само софтвер отвореног кода.
Први корак је да прочитате и подесите свој сервер у складу са Вултр Доц-ом „ Подешавање Нгинк -РТМП-а на Убунту 14.04 “. Упутства у том документу су била најсвеобухватнија за фазу подешавања, у време писања. Напоменуо бих да бисте можда желели да замените „нгинк-1.7.5“ са „нгинк-1.9.4“ или било којом најновијом верзијом Нгинк-а која је доступна. Други предлог је да компајлирате Нгинк са статусним модулом ХТТП стуба како бисте себи дали могућност да пратите колико живих ХЛС гледалаца имате касније.
Уместо компајлирања са:
./configure --with-http_ssl_module --add-module=../nginx-rtmp-module-master
Користите овај стринг у процедури наведеној у документу са предусловима:
./configure --with-http_ssl_module --with-http_stub_status_module --add-module=../nginx-rtmp-module-master
Пример у овом туторијалу ће креирати и „живи“ и „мобилни“ (оптимизовани) токови и користиће ффмпег (инсталиран у претходном водичу) за генерисање ХЛС стрима прилагођене брзине преноса, оптимизованог за мобилне уређаје. Пример ће такође показати како да натерате сервер да аутоматски снима ваше стримове уживо и да вам омогући да репродукујете снимке као услугу репродукције видеа на захтев (ВОД).
Прво, креирајте структуре фолдера неопходне за држање живих и мобилних ХЛС манифеста и видео фрагмената:
sudo mkdir /HLS
sudo mkdir /HLS/live
sudo mkdir /HLS/mobile
sudo mkdir /video_recordings
sudo chmod -R 777 /video_recordings
Вероватно је добра идеја да укључите заштитни зид ако то већ нисте учинили. Ако је тако, морате дозволити саобраћај на портове које користе Нгинк и ХЛС. Ако за сада желите да радите без заштитног зида, занемарите уфв одељак испод.
sudo ufw limit ssh
sudo ufw allow 80
sudo ufw allow 1935
sudo ufw enable
ХЛС стриминг захтева значајно другачију Нгинк конфигурацију од РТМП конфигурације у првом чланку. Уредите своју nginx.confдатотеку тако да користите следеће, замењујући „ми-ип“ и „ми-стреам-кеи“ својим подацима. Можете користити било шта што желите за „ми-стреам-кеи“ то је само реч која је јединствена и корисна за вас. Можда ћете желети да прво направите резервну копију оригиналне конфигурационе датотеке, а затим да налепите моје информације о конфигурацији у уређивач, замењујући све што је било тамо:
sudo cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.original
sudo nano /usr/local/nginx/conf/nginx.conf
Нови нгинк.цонф:
worker_processes 1;
error_log logs/error.log debug;
events {
worker_connections 1024;
}
rtmp {
server {
listen 1935;
allow play all;
#creates our "live" full-resolution HLS videostream from our incoming encoder stream and tells where to put the HLS video manifest and video fragments
application live {
allow play all;
live on;
record all;
record_path /video_recordings;
record_unique on;
hls on;
hls_nested on;
hls_path /HLS/live;
hls_fragment 10s;
#creates the downsampled or "trans-rated" mobile video stream as a 400kbps, 480x360 sized video
exec ffmpeg -i rtmp://192.168.254.178:1935/$app/$name -acodec copy -c:v libx264 -preset veryfast -profile:v baseline -vsync cfr -s 480x360 -b:v 400k maxrate 400k -bufsize 400k -threads 0 -r 30 -f flv rtmp://192.168.254.178:1935/mobile/$;
}
#creates our "mobile" lower-resolution HLS videostream from the ffmpeg-created stream and tells where to put the HLS video manifest and video fragments
application mobile {
allow play all;
live on;
hls on;
hls_nested on;
hls_path /HLS/mobile;
hls_fragment 10s;
}
#allows you to play your recordings of your live streams using a URL like "rtmp://my-ip:1935/vod/filename.flv"
application vod {
play /video_recordings;
}
}
}
http {
include mime.types;
default_type application/octet-stream;
server {
listen 80;
server_name 192.168.254.178;
#creates the http-location for our full-resolution (desktop) HLS stream - "http://my-ip/live/my-stream-key/index.m3u8"
location /live {
types {
application/vnd.apple.mpegurl m3u8;
}
alias /HLS/live;
add_header Cache-Control no-cache;
}
#creates the http-location for our mobile-device HLS stream - "http://my-ip/mobile/my-stream-key/index.m3u8"
location /mobile {
types {
application/vnd.apple.mpegurl m3u8;
}
alias /HLS/mobile;
add_header Cache-Control no-cache;
}
#allows us to see how stats on viewers on our Nginx site using a URL like: "http://my-ip/stats"
location /stats {
stub_status;
}
#allows us to host some webpages which can show our videos: "http://my-ip/my-page.html"
location / {
root html;
index index.html index.htm;
}
}
}
Притисните Цтрл + Кс да бисте изашли. Реците „да“ да бисте сачували промене.
Можете пронаћи јасна упутства и примере могућих променљивих у овој nginx.confдатотеци ако упитате свој омиљени претраживач за „нгинк-ртмп директиве“. Користим нгинк-ртмп са ХЛС-ом већ неколико година, без коришћења директива „дозволи објављивање“ и „забрани објављивање“ и видео сам нула случајева да људи користе/нападају моје видео сервере. Дакле, нисам укључио те директиве овде. Прочитајте и додајте ове директиве ако желите.
Након промене nginx.confдатотеке, морате поново покренути Нгинк да бисте користили нову конфигурацију:
sudo service nginx restart
Пажљиво пратите било какве поруке о грешци Нгинк-а и адресирајте све грешке које су можда узроковане грешком у писању, власништвом фасцикле или проблемима са дозволама. Ако немате поруке о грешци, онда сте спремни да креирате свој ток кодирања.
Морате имати видео кодер да бисте креирали стрим. Користим ОБС (Опен Броадцастер Софтваре) - који је отвореног кода и добро ради за мене. Постоје и друга решења која су ван оквира овог упутства. Нећу покривати све о конфигурисању РТМП видео кодера. Сви они захтевају отприлике исте улазне варијабле. Кључна подешавања која ћете морати да унесете да бисте користили моју тачну nginx.confконфигурацију и да би добро функционисали на већини играча/прегледача/платформа су следећа:
- Енцодер-к264
- Променљива брзина преноса (не ЦБР или константна брзина преноса), највиши квалитет
- Максимална брзина преноса - 600 кбпс
- Аудио-кодек-ААЦ
- Аудио-формат-44,1 кХз
- Аудио-битрате-64кбпс
- ФМС УРЛ-"ртмп://ми-ип:1935/ливе"
- Кључ за стрим-„ми-стреам-кеи“
- Ресолутион-640к480
- ФПС (фрејмова у секунди) -30
- ЦФР (константна брзина кадрова) - Да
- Интервал кључног кадра-2 секунде (један кључни кадар сваке 2 секунде)
- к264 кодирање Профил-основна линија (може да ради са главним - зависи од плејера који се користи)
- к264 ЦПУ Присутан-веома брз
Препоручујем да испробате различите енкодере и експериментишете са њима. Можда ћете желети широки однос ширине и висине - или ће то можда захтевати ваша камера (или други материјали за емитовање). Ако је тако, обавезно промените ове информације у свом кодеру, као и однос ширине и висине наведен у одељку екец-ффмпег nginx.confдатотеке коју сам доставио; у супротном ћете добити неке глупе видео феедове.
Када је ваш кодер подешен, можете све да тестирате. Покрените енкодер помоћу ваше веб камере или неке врсте тест-фодера који ради на њој. У овом тренутку можете погледати своје емитовање помоћу ВЛЦ плејера користећи УРЛ адресе као што су:
http://my-ip/live/my-stream-key/index.m3u8
http://my-ip/mobile/my-stream-key/index.m3u8
These are for your main and your mobile video streams, respectively. Substitute your IP and stream key accordingly.
After you've successfully broadcasted your first stream check (via ssh or ftp) that your live broadcast was recorded in the /video_recordings folder on your Vultr VPS. You can also try playing this recorded file in VLC with a URL like:
rtmp://my-ip/vod/filename.flv
Nginx stats are also available (with Nginx stub_status). To view visitor/viewer stats, access:
http://my-ip/stats
Да бисте видели свој видео на веб страници, биће вам потребан плејер који се може уградити. Доступни су многи плејери за уградњу који ће репродуковати ХЛС видео. Користим ЈВ Плаиер већ неколико година, али бесплатна верзија неће играти ХЛС. Фловплаиер и Битдасх од Битмовин-а (између осталих решења) довољно су великодушни да бесплатно понуде некомерцијалну верзију својих плејера који ће ваш ХЛС стреам учинити уграђеним у веб страницу. За овај чланак, испробао сам их оба и открио да оба прилично добро раде са мојим видео сервером заснованим на Вултр/Нгинк-у. Укратко ћу показати како сам покренуо Фловплаиер са својом машином за тестирање.
Ако ћете користити ХЛС стриминг уживо на било који редован, одржив или комерцијалан начин, охрабрујем вас да купите лиценцу од Фловплаиер-а или било ког играча који одлучите да користите. Добићете играча који има мање ограничења, више функција и који може бити брендиран за вашу организацију. Такође ћете добити подршку - што може бити веома важно. Осим Вултр ВПС-а, ово је заиста једини трошак повезан са пројектом.
Пре него што урадите било шта друго, важно је да водите рачуна о оним што се назива ограничењима „унакрсних домена“, која би иначе искључила вашу могућност стримовања на веб страницу/веб локацију. Направите crossdomain.xmlдатотеку у nginx/htmlфасцикли и ставите упутства у њу да бисте омогућили проток података између домена:
sudo nano /usr/local/nginx/html/crossdomain.xml
Прво копирајте (са ове странице), а затим налепите (десни клик) у поље нано едитора следеће КСМЛ податке:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*"/>
</cross-domain-policy>
Притисните Цтрл + О да запишете, затим Цтрл + Кс да сачувате датотеку на диск и изађете.
Узео сам ХТМЛ5 (верзија 6.0.3) Фловплаиер-а који ми је дао бројне датотеке и фасциклу када сам распаковао. Отпремио сам све датотеке и фасциклу у поддиректоријум Нгинк/ХТМЛ основног фолдера који сам назвао „фловплаиер“. Тачан пут је био /usr/local/nginx/html/flowplayer.
Да бисте тестирали наш видео када је уграђен у веб страницу, направите неколико ХТМЛ датотека у корену фасцикле Нгинк/ХТМЛ користећи нано и попуните их следећим садржајем.
Фајл:
sudo nano /usr/local/nginx/html/hls.html
ХТМЛ код:
<!doctype html>
<head>
<link rel="stylesheet" href="#">
</head>
<body>
640x480 664kbps (live) Desktop Browsers<br>
<div style="width:640px;" class="flowplayer" data-swf="flowplayer/flowplayer.swf" data-ratio="0.75">
<video>
<source type="application/x-mpegurl" src="">
</video>
</div>
<br><br>
480x360 464kbps (mobile) Mobile Browsers <br>
<div style="width:480px;" class="flowplayer" data-swf="flowplayer/flowplayer.swf" data-ratio="0.75">
<video>
<source type="application/x-mpegurl" src="">
</video>
</div>
</body>
Фајл:
sudo nano /usr/local/nginx/html/hls_progressive.html
ХТМЛ код:
<!doctype html>
<head>
<link rel="stylesheet" href="#">
<style> .flowplayer { width: 640px; } </style>
</head>
<body>
<div class="flowplayer" data-swf="flowplayer/flowplayer.swf" data-ratio="0.75">
<video>
<source type="application/x-mpegurl" src="">
<source type="application/x-mpegurl" src="">
</video>
</div>
<br>
</body>
Обавезно замените „ми-ип“ и „ми-стреам-кеи“ својим подацима.
Морате да замените путању flowplayer/skin/functional.cssза знак „#“ у табели стилова href="#". Софтвер за туторијал уклања путању. Морате да попуните УРЛ у src=""делу - уклања га софтвер за упутства, користите http://my-ip/live/my-stream-key/index.m3u8и http://my-ip/mobile/my-stream-key/index.m3u8, респективно. Такође морате додати srcознаке скрипте у главу jquery-1.11.2.min.jsи за и за flowplayer.min.js. Софтвер за туторијал уклања ознаке. Можете сазнати како да направите ове ознаке гледајући example htmlдатотеку укључену у Фловплаиер комплет.
Покрените енкодер помоћу ваше веб камере или неке врсте тест-фодера који ради на њој. Своје емитовање можете да видите у прегледачу користећи следеће УРЛ адресе:
http://my-ip/hls.html
http://my-ip/hls_progressive.html
Прва страница једноставно приказује сваки од ваших стримова – главни и онај на мобилној платформи. Моћи ћете да их покренете и погледате. Приметићете да је ток мобилне платформе мањи по величини. Ови кораци су само да би били сигурни да све ради.
Друга страница приказује један ток. Али је постављен на начин који се зове „прогресивно стриминг“. То значи да када гледалац пушта видео, и сервер и плејер покушавају да пруже гледаоцу стрим високе брзине у битовима и високог квалитета ако га веза гледалаца може да издржи. Ако је њихова веза лоша и не може да одржи везу, она се спушта на приказ нижег битрате (мобилног) тока који је 200 кбпс нижи у пропусном опсегу. Ако желите, можете креирати постепеније, прогресивне токове са ффмпег-ом и конфигурисати их користећи мој пример.
Тестирао сам ову конфигурацију на једном језгру, 1ГБ Вултр ВПС-а и открио сам да је са једним стримом уживо, плус транс-оценираним мобилним стримом који ствара помоћу ффмпег-а, употреба процесора била мања од 35% и да је потрошио само 100МБ мој 1ГБ рам меморије. Сада је то веома ефикасно подешавање.
Ако планирате да стримујете видео који је много већи у пикселима од СД-а, можда ћете открити да морате да користите моћнији ВПС. Био сам радознао у вези са овим и покренуо сам свој главни ток до 1280к960 пиксела и 2Мбпс - што додатно оптерећује ствари. Али ВПС је и даље користио само 50% ЦПУ-а, а употреба меморије је остала на 100МБ. Додао сам десетак прегледача/претраживача и скоро да није било разлике у оптерећењу ВПС-а – само се повећао пропусни опсег. Сигуран сам да би креирање додатних транс оцењених стримова са ффмпег-ом наставило да додатно оптерећује систем.
Користио сам ову врсту сервера у производним окружењима са између 50 и 100 истовремених корисника и открио сам да је коришћење ресурса веома мало порасло са повећањем конекција гледалаца. Експериментишите са тим. Али мислим да би већина корисника била срећна да користи једнојезгарни ВПС од 1 ГБ. Уживајте у свом новом ХЛС серверу за стриминг!