WebRTC და HLS: როგორ მიდის კამერის ვიდეო მაყურებლამდე
კამერა ვიდეოს RTSP-ით გასცემს, ბრაუზერი კი RTSP-ს ვერ კითხულობს. ამიტომ სერვერი ვიდეოს ბრაუზერისთვის გასაგებ ფორმატში აწვდის — WebRTC-ით ან HLS-ით. აქ ავხსნით, რით განსხვავდება ეს ორი გზა და რატომ ვიყენებთ ორივეს.
რატომ არ ჩანს RTSP ბრაუზერში პირდაპირ
RTSP სათვალთვალო სისტემების პროტოკოლია: მას კამერა, ჩამწერი და VLC იგებს, Chrome, Safari და Firefox კი — არა. თანაც კამერის პირდაპირ ინტერნეტში გამოჩენა საშიშია და ასობით მაყურებელს ის ვერც გაუძლებს. ამიტომ ჩვენი სერვერი კამერიდან ერთ RTSP ნაკადს იღებს და მაყურებლებს ბრაუზერისთვის გასაგებ ფორმატში ურიგებს. ასეთი ფორმატი ორია.
WebRTC — თითქმის რეალურ დროში
WebRTC ვიდეოზარებისთვის შეიქმნა — იგივე ტექნოლოგია მუშაობს Google Meet-ში. ვიდეო პატარა პაკეტებად, ძირითადად UDP-ით მიდის და ბრაუზერი მას მაშინვე აჩვენებს, დიდი ბუფერის დაგროვების გარეშე. შედეგად დაყოვნება ჩვეულებრივ წამზე ნაკლებია — ანუ კადრში ხედავთ იმას, რაც ახლა ხდება. ტრანსლაციის მისაღებად ჩვენი პლეერი სტანდარტულ WHEP პროტოკოლს იყენებს. WebRTC ყოველთვის დაშიფრულია.
სუსტი მხარე: WebRTC-ს ქსელში საკუთარი გზა სჭირდება. კორპორაციული ფაიერვოლი, სასტუმროს ან კაფეს Wi-Fi, ზოგი VPN UDP ტრაფიკს ბლოკავს და მაშინ კავშირი უბრალოდ ვერ მყარდება.
HLS — ყველგან გადის, ოღონდ აგვიანებს
HLS ვიდეოს პატარა ფაილებად ჭრის, რომლებსაც ბრაუზერი ჩვეულებრივი HTTPS-ით, ისევე როგორც სურათებს, ერთმანეთის მიყოლებით ტვირთავს. ამიტომ ის გადის ყველგან, სადაც ვებგვერდი იხსნება — ფაიერვოლი მას ჩვეულებრივ საიტისგან ვერ არჩევს. ფასი დაყოვნებაა: კლასიკური HLS ხშირად 10–30 წამით აგვიანებს, რადგან პლეერი რამდენიმე ფაილს წინასწარ აგროვებს. ჩვენ ვიყენებთ LL-HLS-ს (Low-Latency HLS), რომელიც ფაილებს უფრო წვრილ ნაწილებად აწვდის და დაყოვნებას რამდენიმე წამამდე ამცირებს.
შედარება
| WebRTC | LL-HLS | |
|---|---|---|
| დაყოვნების რიგი | წამზე ნაკლები | რამდენიმე წამი |
| ტრანსპორტი | ძირითადად UDP | HTTPS (ჩვეულებრივი ვებ ტრაფიკი) |
| კორპორაციული ფაიერვოლი | შეიძლება დაიბლოკოს | თითქმის ყოველთვის გადის |
| ბრაუზერები | ყველა თანამედროვე | ყველა თანამედროვე; iPhone-ზე ჩაშენებული |
| როდის გამოიყენება | პირველ რიგში — როცა „ახლა“ მნიშვნელოვანია | როცა WebRTC ვერ დაუკავშირდა |
ზუსტი დაყოვნება კამერაზე, ქსელზე და მაყურებლის მდებარეობაზე დამოკიდებული. ცხრილში სიდიდის რიგია და არა დაპირება.
რატომ ჯერ WebRTC და შემდეგ HLS
ჩვენი პლეერი ორივე გზას თავად ირჩევს. ჯერ WebRTC-ით ცდილობს, რადგან ეს საუკეთესო შედეგს იძლევა. თუ ქსელი WebRTC-ს არ უშვებს, პლეერი ავტომატურად გადადის LL-HLS-ზე. მაყურებელს არაფრის დაყენება და არჩევა არ სჭირდება — ის უბრალოდ ხედავს ვიდეოს, ოფისის ქსელიდანაც. ერთადერთი, რასაც შეიძლება შეამჩნიოს, ცოტა მეტი დაყოვნებაა.
- ფერდობი, ზღვა, ქალაქის ხედი — რამდენიმე წამი არავის აწუხებს; მთავარია, რომ ვიდეო ყველასთან იხსნებოდეს.
- მშენებლობა, ჭიშკარი, ღონისძიება — აქ „ახლა“ უფრო მნიშვნელოვანია, ამიტომ WebRTC-ის უპირატესობა ჩანს.
ტელეფონზე
ორივე გზა მუშაობს Android-სა და iPhone-ზე, Chrome-ში, Safari-ში, Firefox-სა და Edge-ში — აპლიკაციის გარეშე. მობილურ ინტერნეტში WebRTC ჩვეულებრივ მყარდება, თუმცა ზოგი ოპერატორის ქსელში ან VPN-ის ჩართვისას პლეერი HLS-ზე გადავა. iPhone-ზე ენერგიის დაზოგვის რეჟიმში ბრაუზერი ვიდეოს ავტომატურ ჩართვას შეიძლება ბლოკავდეს — მაშინ მაყურებელი დაკვრის ღილაკს ერთხელ დააჭერს.
რა გავლენა აქვს კამერის პარამეტრებს
- I-კადრების ინტერვალი. ახალი მაყურებლის ვიდეო მომდევნო საკვანძო კადრიდან იწყება. 1–2 წამიანი ინტერვალი სწრაფ გაშვებას და მოკლე HLS ნაწილებს უზრუნველყოფს.
- B-კადრები. H.264-ში B-კადრები ბრაუზერში, განსაკუთრებით WebRTC-ში, ვიდეოს ჩერდებას იწვევს. კამერაზე გამორთეთ.
- H.265. ბრაუზერების დიდი ნაწილი მას ვერ აჩვენებს; ასეთ კამერას სერვერი ნახვისას H.264-ად გარდაქმნის. იხ. H.265 ბრაუზერში.
ყველა რეკომენდებული მნიშვნელობა ერთად: კამერის პარამეტრები ვებ ტრანსლაციისთვის.
რატომ აგვიანებს ვიდეო ზოგჯერ რამდენიმე წამით?
სავარაუდოდ, მაყურებლის ქსელმა WebRTC არ გაუშვა და პლეერი LL-HLS-ზე გადავიდა. ეს ხშირია ოფისის, სასტუმროს Wi-Fi-სა და VPN-ის დროს. ვიდეო მუშაობს, უბრალოდ ცოტა გვიან.
მაყურებელს რამე უნდა დააყენოს?
არა. პლეერი ჩვეულებრივ ბრაუზერში მუშაობს — კომპიუტერზეც და ტელეფონზეც — და გზას თავად ირჩევს.
მუშაობს iPhone-ზე?
დიახ, Safari-შიც და სხვა ბრაუზერებშიც. თუ ტელეფონი ენერგიის დაზოგვის რეჟიმშია, შეიძლება დაკვრის ღილაკზე ერთხელ შეხება დასჭირდეს.
უსაფრთხოა WebRTC?
დიახ, WebRTC ვიდეო ყოველთვის დაშიფრულია, HLS კი HTTPS-ით მიდის. ამასთან მაყურებელი მხოლოდ ჩვენს სერვერს უკავშირდება და კამერის მისამართს ვერ ხედავს.