Rumah / Jaringan sosial / Standar baru untuk streaming hls. Streaming Langsung HTTP: Resep Terbaik. Diagram struktural untuk beban tinggi

Standar baru untuk streaming hls. Streaming Langsung HTTP: Resep Terbaik. Diagram struktural untuk beban tinggi

Flussonik server media mendukung distribusi video melalui protokol HLS.

Kebanyakan peluang yang tersedia tidak standar untuk HLS, tetapi kami mendukungnya untuk kenyamanan Anda.

Codec yang didukung: H264, H265, video MPEG2, AAC, MP3, audio MPEG2, AC-3.

Flussonic Media Server memungkinkan Anda untuk menerima siaran langsung TV, video on demand, video dari arsip (catchup dan timeshift) melalui HLS.

Pemutaran HLS yang mudah

Jika Anda memiliki streaming langsung atau file sederhana (satu video, satu suara), maka URL untuk memutar melalui HLS sangat sederhana:

http://flussonic-ip/STREAMNAME/index.m3u8

di mana flussonic-ip adalah contoh alamat + port Flussonic Media Server Anda.

Flussonic Media Server juga menerima playlist.m3u8 di akhir URL untuk kompatibilitas mundur dengan server lain.

Saat Anda mulai bekerja dengan konten multibahasa atau multibitrate, segalanya menjadi lebih rumit.

HLS multibahasa

Jika Anda ingin memutar streaming multibahasa di iPhone, Anda harus menggunakan http://192.168.2.3:8080/STREAMNAME/index.m3u8 yang sama

Tetapi jika Anda ingin menonton streaming multibahasa menggunakan VLC atau dekoder, Anda perlu menyertakan video.m3u8.

URL untuk pemutar: http://flussonic-ip/STREAMNAME/video.m3u8

Ini disebabkan oleh fakta bahwa, menurut persyaratan Apple HLS, daftar putar terpisah dengan opsi audio saja harus ditentukan untuk setiap bahasa. MPEG-TS memiliki mekanisme yang berbeda: semua trek audio ditempatkan di sebelah video, dan pemain sendiri yang memilih apa yang akan diputar. Agar video dapat dilihat di iPhone, video tersebut harus memenuhi pedoman Apple. Tetapi VLC dan dekoder, yang melanggar standar HLS, mengharapkan versi lama MPEG-TS dikonversi ke HLS. Oleh karena itu, Anda perlu menyertakan video.m3u8 .

Menambahkan "Hanya Audio" untuk Apple

Apple mengharuskan semua streaming Anda untuk tidak memiliki opsi video, audio saja.

Mereka percaya bahwa jika pengguna menonton video melalui 3G dan, begitu berada di zona penerimaan yang tidak pasti, ia hanya akan memiliki suara yang lebih baik daripada buffering.

Anda dapat mengaktifkan opsi ini di Flussonic Media Server:

streaming ort ( url udp:// 239.0.0.1 : 1234 ; add_audio_only ; )

Ketahuilah bahwa ini dapat membuat alamat index.m3u8 Anda tidak dapat diputar di VLC atau dekoder. Dalam kasus seperti itu, gunakan video.m3u8 .

Bitrate terpisah untuk dekoder

Bila Anda memiliki konten multibahasa multi-bitrate dan ingin memutarnya di dekoder yang tidak mendukung daftar putar HLS multi-bitrate, Anda dapat meminta daftar putar individual dengan satu video dan semua trek audio dari Flussonic Media Server, sama seperti dengan opsi tunggal:

http://flussonic-ip/STREAMNAME/video1. m3u8

Daftar putar ini tidak multi-bitrate, berisi URL ke segmen di mana trek video pertama dan semua trek audio yang tersedia.

Jika Anda ingin mengirimkan streaming multibahasa dan kecepatan bit ke dekoder yang tidak memahami standar multibahasa Apple, gunakan video.m3u8:

http://flussonic-ip/STREAMNAME/video. m3u8

Ini adalah daftar putar multi-bitrate yang memberikan daftar daftar putar dengan kualitas yang berbeda: video1.m3u8, video2.m3u8 dll.

Pemutaran tangkapan DVR

Saat streaming Anda sudah direkam di server oleh DVR kami, Anda dapat memutar video melalui HLS menggunakan waktu mulai dan berakhir transmisi (misalnya, dari EPG).

http://flussonic-ip/STREAMNAME/archive-1508403742-3600. m3u8

Daftar putar ini akan disebut. varian jika akan ada lebih dari satu di aliran trek suara atau lebih dari satu bitrate. Ini akan mencantumkan segmen mulai dari UTC 1362504585 (5 Maret 2013 17:29:45 GMT) dan satu jam ke depan.

URL Mono akan memberikan daftar segmen yang berisi semua trek dalam mpeg-ts:

http://flussonic-ip/STREAMNAME/mono-1362504585-3600. m3u8

Daftar putar videoN yang lebih spesifik akan memberikan daftar segmen dengan N trek video dan semua trek audio:

http://flussonic-ip/STREAMNAME/video1-1362504585-3600. m3u8

dan daftar putar video varian dengan daftar daftar putar videoN:

http://flussonic-ip/STREAMNAME/video-1362504585-3600. m3u8

Putar ulang daftar putar

Ada daftar putar khusus "mundur-N.m3u8" dengan jendela "geser" besar yang memungkinkan Anda memundurkan dan menjeda streaming HLS selama berjam-jam.

http://flussonic-ip/STREAMNAME/rewind-7200. m3u8

7200 - Panjang daftar putar HLS dalam hitungan detik. Artinya, pelanggan Anda dapat menjeda siaran selama 2 jam atau memutar ulang ke awal pertandingan sepak bola tanpa mengakses tautan arsip khusus.

Memproses, menyimpan, dan mentransfer video untuk proyek online-nya, alih-alih menggunakan situs seperti YouTube, ia pasti akan mempertanyakan protokol transfer mana yang digunakan untuk mengalirkan video ke perangkat pengguna. Pilihannya kecil, karena Ada sejumlah standar industri yang mendukung perangkat tertentu. Selain itu, pilihan protokol sangat tergantung pada "kelas" video - siaran langsung atau video-on-demand. Pilihan server media, yang akan menjadi mesin mesin media Anda, juga tergantung pada pilihan protokol: apakah Anda akan menginstal beberapa server heterogen atau membangun jaringan pengiriman berdasarkan satu solusi? Karena itu, Anda perlu menimbang segalanya dan mengambil keputusan berdasarkan kriteria bisnis Anda.

Secara umum, persamaan dengan banyak yang tidak diketahui diperoleh. Dinamika proses penting di sini - ke mana arah industri secara umum? Bagaimana jika saya berinvestasi dalam teknologi pendukung, dan itu akan mati dalam setahun, karena ini sudah terjadi. Atau apakah saya akan bertaruh pada teknologi yang trendi, tetapi tidak ada yang mendukungnya?

Kami memutuskan untuk mengevaluasi bagaimana bagian dari protokol yang berbeda berubah dari waktu ke waktu - untuk melihat keseluruhan proses dalam dinamika. Data diambil dari tahun lalu.

Data awal

Sebagai permulaan, siapa kita untuk menilai pangsa pasar? Kami adalah pengembang layanan web pelaporan untuk server media. Kami telah bekerja di pasar untuk tahun keempat dan perusahaan datang kepada kami dengan infrastruktur yang berbeda, jumlah server yang berbeda dan kebutuhan yang berbeda. Ternyata pemain yang baik dari keadaan industri.

Kami membuat laporan kecil di mana Anda dapat memilih rentang tanggal dan mendapatkan data dengan grafik jumlah penayangan video melalui protokol yang berbeda.

Laporan menyediakan data di server:

  • Wowza Streaming Engine di semua versi dari 2.2 hingga 4.x terbaru; paling - 3.x.
  • Nimble Streamer yang bekerja dengan HLS, Smooth, HDS, dan unduhan progresif adalah pengembangan kami.
  • Layanan Windows Media - secara harfiah ada beberapa lusin, tetapi ada, dan kita harus memperhitungkannya
Pada saat penulisan ini, layanan ini melayani sekitar 1000 server dari 60 negara.

Laporan juga diperbarui secara berkala di blog kami, tersedia di bawah tag yang sesuai.

Pergi

Laporan Juni/Juli 2014 terlihat seperti ini. Dari 1,4 miliar tampilan lebih dari setengahnya adalah HLS. Di tempat kedua adalah RTMP dengan seperempat penayangan. RTSP adalah sekitar seperenam. Sisanya berada di wilayah kesalahan statistik.

Apa yang terjadi setahun yang lalu untuk periode yang sama? Situasinya hampir seperti bayangan cermin. RTMP - hampir dua pertiga, RTSP dan HLS berbagi tempat kedua dan ketiga. Benar, dasar pengukuran hampir 3 kali lebih sedikit - "hanya" 500 juta tampilan. Ada juga lebih sedikit server dalam layanan kami, tentu saja.

Mari kita pergi di antara dua titik ini.

Jadi, Juni - Agustus 2014, 3 bulan musim panas. 800 juta tampilan, tetapi sahamnya sama, Agustus tidak membawa perubahan.

September - November 2013. Musim baru telah dimulai, HLS mulai menggerogoti RTMP. Total 1,1 miliar tampilan, RTMP memiliki sekitar setengah dari total, HLS memiliki seperempat.

Desember 2013 - Februari 2014. 1,4 miliar tampilan, di mana HLS menyumbang lebih dari 40%. RTMP dan RTMP terikat untuk kedua dan ketiga dengan seperempat bagian. Olimpiade di Sochi memberikan peningkatan jumlah penayangan dan pada saat yang sama memaksa penyedia untuk mengingat semua pelanggan dengan semua perangkat eksotis atau lama mereka yang hanya memahami RTSP - karenanya lompatan dalam protokol ini.

Seperti yang telah ditunjukkan oleh praktik, transportasi terbaik untuk video dibandingkan dengan RTMP adalah HLS. Alasan untuk ini:

    Proksi yang sangat sederhana, dengan caching melalui nginx. Pertama-tama, karena kamera, sebagai perangkat, biasanya tidak dapat melayani lebih dari 10 koneksi secara bersamaan. Dalam hal ini, proxy streaming RTMP yang dijamin hanya dimungkinkan melalui solusi berbayar, dan membutuhkan banyak daya. Tidak diperlukan perangkat lunak server khusus.

    Penyederhanaan seluruh infrastruktur server. Berdasarkan ide, video diberikan dalam potongan-potongan, melalui port 80 melalui http. Nginx sendiri dapat bertanggung jawab untuk mengembalikan statika. Mengembalikan statika (potongan video 50kB) adalah tugas yang sangat mudah untuk nginx.

    Karena jumlah potongan konstan, yang lama dihapus, yang baru ditambahkan, HDD tidak akan pernah meluap.

    Prevalensinya lebih besar dari RTMP. HLS dengan penyandian video H.264 didukung oleh iOS dan bekerja dengan mulus. Per 1 Juli 2014, koneksi video streaming dengan transport HLS adalah 55%, RTMP - 26%, RTSP - 15% dan MPEG-DASH kurang dari 1%.

    Dukungan Mayoritas perangkat seluler, desktop, komputer tablet langsung dari browser.

    Jauh lebih mudah daripada siaran di RTSP pada prinsipnya. Karena tidak ada prosedur seperti push (menerbitkan aliran) atau menarik (mendapatkan aliran).

    Lebih banyak format ramah http.

Kerugiannya adalah sebagai berikut:

    Semua sama, tidak semua perangkat mendukung format ini. versi Android kurang dari 4.2 tidak secara resmi mendukung codec dan transport H.264, tetapi di Android, alih-alih browser, Anda dapat menggunakan aplikasi pihak ketiga- misalnya MX Player

    Itu semua tergantung pada kamera. Jika kamera buggy, misalnya Dlink DCS-3010, maka seluruh sistem akan bekerja sangat buruk (ffmpeg terus-menerus jatuh). Misalnya, kamera AXIS M1011-W, HIKVISION DS-2CD2412F-IW bekerja dengan baik dalam paket seperti itu (hingga sebulan tanpa keluhan (saya hanya tidak mengujinya lebih lama)). Cara yang sama sangat penting memiliki perutean kabel. Dalam hal ini, kami akan mempertimbangkan opsi yang ideal.

Apa itu transportasi HLS?

Aliran video dikodekan h.264 (Omong-omong: pemahaman dasar profil perangkat Android), dibagi menjadi beberapa bagian dengan ekstensi *.ts, misalnya, masing-masing 5 detik, daftar putar dibuat di live.m3u8 , dengan deskripsi berurutan dari bagian-bagian ini. Panjang playlist sudah ditentukan, misalnya 10 buah. Saat video ke-11 muncul, video ke-1 dihapus, daftar putar dibuat ulang. Rincian lebih lanjut dapat ditemukan di situs web pengembang.

Agar sistem berfungsi, kami akan mengatur gambar dari kamera seperti yang kami inginkan di situs, format gambar, dan kualitas gambar. Kami tidak akan mengkode ulang di server. Kamera dirancang untuk memberikan gambar yang Anda butuhkan. Kamera biasanya memiliki beberapa profil. Anda dapat mengkonfigurasi satu profil untuk H.264, untuk HLS, dan yang kedua dengan MPEG4 untuk MPEG-DASH. Anda juga dapat mengatur kualitas yang berbeda untuk saluran Internet yang lebar dan sempit. Pikirkan untuk diri sendiri - putuskan sendiri.

Penting! Kamera harus memiliki gambar keluaran yang tidak perlu dikodekan ulang.

Diagram struktural untuk beban tinggi

Kamera (rtsp) ----->

-----> satu koneksi FFmpeg(rtsp->hls) -> Nginx(nginx-rtmp-module) ----->

-----> satu koneksi ke proxy nginx perantara dengan cache besar =====>

=====> banyak klien JWPlayer(hls)

Server kami terhubung dengan ffmpeg ke kamera dan mendaftar dengan aplikasi nginx hls. nginx membuat potongan dan daftar putar di direktori tertentu. Kemudian mengirimkan potongan-potongan ini ke server proxy. Klien terhubung ke server proxy menggunakan JWPlayer.

Menyiapkan aplikasi nginx

Mari kita membangun nginx dengan nginx-rtmp-module. Prosedur ini dijelaskan secara rinci dalam artikel.

Katakanlah kita memiliki beberapa kamera, kita akan membaginya dengan nomor seri. Saya akan menjelaskan konfigurasi nginx untuk 2 kamera. Kami men-cache gambar statis selama 5 menit di cache lokal, jika gambar tidak dimuat dalam 5 detik, kami memberikan layar splash statis.

# nano /etc/nginx/nginx.conf

Edit konfigurasi nginx

pengguna www-data; pekerja_proses otomatis ; pid/jalankan/nginx. pid ; error_log / var / log / nginx / nginx_error . debug log; env PATH ; event (#multi_accept on;) http (access_log/var/log/nginx/access.log; error_log/var/log/nginx/error.log; include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65 ; proxy_cache_path / var / www / cache / level lokal = 1: 2 keys_zone = nginx_local_cache: 1 m tidak aktif = 30 m max_size = 512 M; proxy_temp_path / var / www / cache / local / tmp; server (dengarkan 80; # rtmp stat location / stat ( rtmp_stat all ; rtmp_stat_stylesheet stat . xsl ; ) location / stat .xsl ( # Anda dapat memindahkan stat . xsl ke lokasi lain root / etc / nginx ; ) location / ( rtmp_control all ; ) error_page 500 502 503 504 / 50 x .html ;location = / 50 x .html ( root html ; ) include camera_http_locations .conf ; ) ) rtmp ( access_log / var / log / nginx / rtmp_access .log ;server ( mendengarkan 1935 ; ping 30 s ; notify_method dapatkan ; sertakan camera_rtmp_applications . konf; ) )

Buat jalur cache # mkdir /var/www/cache/local Perbaiki izin cache:

# chmod -R 755 /var/www/cache/local # chown -R www-data:www-data /var/www/cache/local`

Mari buat lokasi http untuk kamera:

# kamera nano_http_locations.conf

jenis ( aplikasi / vnd . apple . mpegurl m3u8 ; video / mp2t ts ; ) # berikan gambar dari kamera 1 - /1/img/ # berbeda untuk semua kamera, karena alamat ip kamera berbeda "http://192.168.0.2/GetImage.cgi?CH=1"# berikan gambar dari kamera 2 - /2/img/ lokasi / 1 / img / (proxy_cache nginx_local_cache; proxy_cache_key $ request_uri; kedaluwarsa 1 m; # cache selama 1 menit add_header Cache - Kontrol publik; # untuk cache pada proxy proxy_ignore_headers Cache - Control; # untuk menghapus header dari kamera proxy_pass "http://192.168.0.3/GetImage.cgi?CH=1"; proxy_set_header Otorisasi "Dasar" ; error_page 502 504 404 @ fallback_img ; ) # berikan daftar putar - /1/hls/live.m3u8 atau /3/hls/live.m3u8 # daftar putar di-cache selama 10 detik di proxy lokasi ~* / hls / . * \ . m3u8 $ ( menulis ulang "/(.*)/hls/(.*)$" / hls - $1 / $2 break ; # permintaan penulisan ulang / 1 / hls / ke / hls - 1 / root / tmp / ; kedaluwarsa 10 s; add_header Cache - Kontrol publik;) # berikan potongan video dari kamera - /1/hls/live-12345678.ts atau /2/hls/live-12345678.ts #caching aktif komputer lokal tidak dibutuhkan # potongan di-cache selama 3 menit di proxy lokasi ~* / hls / . * \ . ts $( tulis ulang "/(.*)/hls/(.*)$" / hls - $1 / $2 break ; root / tmp / ; kedaluwarsa 3 m ; add_header Cache - Kontrol publik ; ) # beri nama lokasi jika tidak ada gambar lokasi @ fallback_img ( rewrite (. + ) / fallback . jpg break ; root / etc / nginx / ; )

Mari kita buat file konfigurasi hls untuk server rtmp dengan aplikasi untuk kamera kita:

# kamera nano_rtmp_applications.conf

potongan_ukuran 4000 ; application hls_1 ( hidup terus ; sinkronisasi 10 ms ; exec_static ffmpeg - i rtsp : //admin: [dilindungi email]:554/live1.sdp -c copy -f flv -an rtmp://localhost:1935/hls_1/live 2>>/var/log/nginx/ffmpeg_1.log; hls aktif; hls_path / tmp / hls - 1 / ; # jalur untuk menyimpan potongan di server hls_fragment_naming timestamp ; # gunakan stempel waktu untuk memberi nama potongan ) aplikasi hls_2 ( hidup terus ; sinkronkan 10 ms ; exec_static ffmpeg - i rtsp : //admin: [dilindungi email]:554/live1.sdp -c copy -f flv -an rtmp://localhost:1935/hls_2/live 2>>/var/log/nginx/ffmpeg_2.log; hls aktif; hls_path / tmp / hls - 2 / ; hls_fragment_naming stempel waktu ; )

Isi direktori /tmp/hls-1/

$ ls / tmp / hls - 1 / hidup - 10458360. ts hidup - 13292010. ts hidup - 16129440. ts hidup - 18963270. ts hidup - 10930050. ts hidup - 13767390. ts hidup - 16602660. ts hidup - 19435050. ts hidup - 11405250. ts langsung - 14239260. ts langsung - 17072820. ts langsung . m3u8 live - 11878560. ts live - 14710860. ts live - 17544960. ts live - 12348630. ts live - 15182550. ts live - 180201660. ts live - 12821760. ts live - 15658740. ts live - 184 ts2750

Contoh file live.m3u8

#EXTM3U #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:35 #EXT-X-TARGETDURATION:5 #EXTINF:5.224, live - 16602660. ts #EXTINF:5.246, live - 17072820. ts #EXTINF :5.280, hidup - 17544960. ts #EXTINF:5.251, hidup - 180201660. ts #EXTINF:5.228, hidup - 18492750. ts #EXTINF:5.242, hidup - 18963270. ts

Memecahkan masalah dengan kamera jatuh

Paling keputusan yang tepat, ganti kamera buggy. Ini membantu 90% dari waktu. Jika tidak ada cara dan Anda harus tetap hidup, maka solusi berikut akan membantu.

Solusi ini terdiri dari dua - komplementer:

    Jalankan proses nginx terpisah untuk setiap kamera dan proses umum pada kembalinya statis. Artinya, untuk dua kamera, tulis konfigurasi terpisah dengan server rtmp dan satu konfigurasi umum dengan http. Maka kamera buggy tidak akan mempengaruhi proses secara keseluruhan.

    Jika aliran dari kamera terganggu sebagai akibat dari buggy (panas berlebih, kabel buruk, daya tidak mencukupi melalui PoE, dll.), maka kamera akan jatuh, proses anak ffmpeg akan menolak paket dan nginx akan berhenti menulis potongan video . Dan ketika proses ffmpeg berakhir, nginx akan menghapus semua file dari direktori chunks. Kami menghitung momen pembersihan folder ini dengan cron dan memulai kembali proses nginx yang diperlukan.

Di setiap kamera, skrip yang dapat dieksekusi dibuat di /etc/init.d/, salinan nginx , bernama camera_1 dan camera_2

# cp /etc/init.d/nginx /etc/init.d/camera_1 # cp /etc/init.d/nginx /etc/init.d/camera_2 # chmod +x /etc/init.d/camera_1 # chmod +x /etc/init.d/camera_2

Mengedit skrip startup nginx.

nano /etc/init. d/nginx

Ubah variabel DAEMON_OPTS. Daemon nginx utama akan melayani semua static. Itu juga akan memulai dan menghentikan daemon yang bertanggung jawab atas kamera. / init . d /camera_1 hentikan fi jika [ - f "/etc/init.d/camera_2" ]; lalu /etc/init. d/camera_2 stop fi

Tambahkan ke fungsi do_reload:

# muat ulang kamera jika [ - f "/etc/init.d/camera_1" ]; lalu /etc/init. d / camera_1 reload fi if [ - f "/etc/init.d/camera_2" ]; lalu /etc/init. d/camera_2 memuat ulang fi

Kami mengedit skrip startup nginx untuk kamera 1 kamera_1 dan untuk kamera 2 kamera_2 sesuai dengan contoh.

# nano /etc/init.d/camera_1

Mengubah variabel DAEMON_OPTS dan DESC

DESC = "camera_1 untuk CAMERA-1" DAEMON_OPTS = "-c /etc/nginx/nginx_1.conf"

Kami mengedit skrip startup nginx untuk kamera 2 kamera_2 sesuai dengan contoh.

Di /etc/nginx/nginx_0.conf dengan lokasi http saya menulis garis ajaib:

# DIR-PROCESS-NAME /tmp/hls-1/camera_1 # DIR-PROCESS-NAME /tmp/hls-2/camera_2

Mereka menunjukkan kata pencarian DIR-PROCESS-NAME, dipisahkan oleh spasi, direktori dan nama proses yang akan dimulai ulang.

Penyelidikan:

# service nginx start # service camera_1 restart * Restart camera_1 untuk CAMERA - 1 konfigurasi nginx # service camera_2 restart * Restart camera_2 untuk CAMERA - 2 konfigurasi nginx

Skrip yang memuat ulang kamera. Ia melewati folder chunk, mencari di mana tidak ada file *.m3u8. Jika tidak ada file dalam folder, ia akan mencari daemon yang sesuai sesuai dengan konfigurasi daemon utama, dengan baris DIR-PROCESS-NAME . Muat ulang.

# nano /script/cameras_reloader.sh

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

#!/bin/bash PATH = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin mask = "*.m3u8" dir = "/tmp/ hls-*" function find_process()( process_str = $(cat /etc/nginx/nginx_0.conf | grep "# DIR-PROCESS-NAME" | grep $1 | cut -d" " -f4) echo $process_str ) untuk hls_dir di $dir ; lakukan find_result = $(find $hls_dir -name $mask -type f) if [ -z $find_result ] ; kemudian proses = $(find_process $hls_dir ) service $process restart selesai tidur 15 detik

Membandingkan HLS dengan MPEG-DASH

MPEG-DASH adalah analog dari HLS yang dibuat oleh Google, sebagai transportasi untuk MPEG-4. Transportasi ini tidak tersebar luas dan praktis tidak didukung. Ideologinya sama, memecah aliran menjadi beberapa bagian, hanya lebih banyak bagian, bagian terpisah untuk video, bagian terpisah untuk audio. Di nginx-rtmp-module, format ini dikonfigurasi mirip dengan HLS.

Coba, salin, lakukan!

Jika artikel ini bermanfaat bagi Anda, silakan klik iklannya. Terima kasih!

Membuat aplikasi yang ideal secara teknis biasanya merupakan tugas yang sangat kompleks dan memakan waktu. Pada saat yang sama, informasi yang berguna sering tersebar di berbagai sumber. Hal ini berlaku antara lain untuk pengembangan aplikasi video untuk iOS. Artikel ini berisi informasi paling penting dan berguna yang memungkinkan Anda untuk menggunakan secara kualitatif berbagai fitur Streaming Langsung HTTP, serta daftar sumber utama. Materi ini akan berguna bagi semua pembaca yang tertarik untuk membuat layanan video berkualitas tinggi dan ramah pengguna.

Penguatan kenyamanan dan interaktivitas layanan video dicapai melalui mulai cepat dan mundur, serta kurangnya buffering. Untuk mencapai hasil terbaik, rangkaian tindakan berikut disarankan.

  • Dimulai dengan kualitas video yang rendah. Setidaknya satu potongan diperlukan untuk memulai video. Dengan demikian, semakin kecil ukuran satu potongan, semakin cepat video akan dimulai. Mengurangi bitrate streaming awal dan mengurangi durasi potongan mengarah ke awal video yang lebih cepat. Kami merekomendasikan durasi chunk 4-8 ​​detik dan bitrate awal 200-300 Kbps. Jadi, untuk mulai memutar video, pengguna harus mengunduh maksimal 300 kb.
  • Pengoptimalan daftar putar. Daftar putar dapat mengambil bagian penting dari keseluruhan aliran data, terutama dengan ukuran potongan kecil dan konten yang panjang (beberapa jam). Dalam kebanyakan kasus, saat mentransfer daftar putar ke pemutar video, disarankan untuk mengarsipkannya.
  • bingkai kunci. Diinginkan untuk memiliki setidaknya satu frame IDR per segmen, sebaiknya di awal segmen. Selain itu, saat mentransfer video ke jaringan seluler dianjurkan untuk keyframe setidaknya sekali setiap 3 detik.
  • TS Overhead. HTTP LS menggunakan MPEG TS sebagai wadah, jadi sangat penting untuk meminimalkan overhead TS (harus kurang dari 10% bahkan pada kualitas video rendah). Dalam hal ini, ada baiknya mengukur bitrate nyata menggunakan dump lalu lintas dan mengoptimalkan pengepakan (segmenter) yang digunakan.
  • Parameter Durasi target dalam daftar putar. Parameter ini memengaruhi waktu mulai, tetapi Apple merekomendasikan pengaturannya ke 10 detik karena nilai yang lebih rendah meningkatkan kemungkinan buffering, terutama pada jaringan seluler latensi tinggi. Juga tidak disarankan untuk membuat segmen yang lebih dari 20 detik.
  • kecepatan bit dinamis. Mekanisme streaming adaptif yang terpasang di iOS bekerja secara optimal pada bitrate yang ditentukan secara tepat dalam daftar putar varian (dengan mempertimbangkan lalu lintas daftar putar itu sendiri). Dalam hal ini, untuk streaming dengan bitrate yang berubah, Anda perlu menentukan nilai yang mendekati maksimum. Jika tidak, keputusan yang salah tentang mengubah aliran video saat ini mungkin terjadi. Kecepatan bit tetangga harus berbeda dalam kecepatan 1,5 - 2 kali.
  • Streaming "hanya audio". Codec audio HE-AAC secara signifikan lebih efisien dan didukung oleh sebagian besar perangkat. Pengiriman saluran audio saja direkomendasikan untuk diimplementasikan menggunakan MPEG Elementary Stream, dan bukan MPEG Transport Stream (overhead yang jauh lebih kecil).

Saat Anda mengembangkan pemutar video, Anda bisa mendapatkan informasi yang berguna dari log HTTP Live Streaming (accessLog). Ini berisi data tentang bagaimana peralihan otomatis terjadi, bitrate apa yang digunakan, dll. Detail informasi yang tersedia di log. Berdasarkan data ini, Anda akan dapat mengumpulkan data analisis video tentang pengguna Anda.

Rekomendasi Tambahan
Dalam kasus siaran online, buffering video juga dimungkinkan karena penundaan CDN, serta dalam kasus di mana waktu pembaruan daftar putar terlalu singkat dan server tidak punya waktu untuk menghasilkan segmen tepat waktu. Untuk mengoptimalkan mekanisme rewind, disarankan untuk menggunakan nilai durasi segmen non-integer (aktual), jika tidak, kesalahan dapat menumpuk.

Jika aplikasi Anda dimaksudkan untuk digunakan pada perangkat yang berbeda, Anda dapat menentukan kualitas video yang berbeda pada resolusi layar yang berbeda dalam daftar. Dengan cara ini Anda akan dapat menampilkan video yang berbeda di iPad dengan layar Retina dan di iPhone yang relatif lama.

Protokol HTTP Live Streaming juga menyediakan mekanisme failover (menunjukkan sumber video yang berlebihan). Fitur ini dapat berguna untuk meningkatkan keandalan layanan Anda.

Sumber Pengetahuan
Daftar singkat sumber daya tentang penggunaan HTTP Live Streaming dalam aplikasi video:
Draf Streaming Langsung HTTP
HTTP Live Streaming Pertanyaan yang Sering Diajukan
Praktik Terbaik untuk HLS

Terakhir, perlu dicatat bahwa untuk pengembang Mac/iOS/Safari terdaftar, gratis video teknis sesi dengan WWDC 2012, di mana ada juga banyak informasi berguna, khususnya - tentang bekerja dengan video dan menggunakan HTTP Live Streaming.

Penyediaan layanan TV IP melalui Internet dan lokal jaringan komputer semakin meluas. Di wilayah negara-negara CIS, hampir tidak ada penyedia besar yang tidak menyiarkan video melalui multicast ke jaringan lokal mereka, yaitu mereka yang menyediakan layanan IPTV. Namun penyediaan layanan TV di luar nya jaringan lokal terkait dengan beberapa biaya perangkat keras dan kerumitan dalam menyediakan kualitas siaran yang diperlukan.

Streaming Langsung HTTP juga dikenal sebagai HLS, adalah protokol komunikasi yang diimplementasikan oleh Apple. Keunikannya adalah bahwa aliran keseluruhan dibagi menjadi urutan file unduhan kecil, setiap unduhan mengunduh satu fragmen kecil dari aliran transportasi. Saat aliran diputar, klien dapat memilih dari beberapa aliran alternatif berbeda yang berisi materi yang sama, direkam pada kecepatan bit yang berbeda, memungkinkannya untuk beradaptasi dengan kecepatan bit yang tersedia. Di awal sesi streaming, daftar putar M3U (m3u8) yang diperluas dimuat berisi metadata untuk berbagai sub-aliran yang tersedia. Karena permintaan hanya menggunakan operasi HTTP standar, Streaming Langsung HTTP dapat melewati firewall atau server proxy apa pun yang memungkinkan lalu lintas HTTP standar, tidak seperti protokol UDP seperti RTP.

HLS didasarkan pada HTTP. HLS juga mendefinisikan mekanisme enkripsi standar menggunakan AES dan cara untuk mendistribusikan kunci keamanan menggunakan cookie HTTPS atau HTTP, yang bersama-sama menyediakan sistem sederhana perlindungan hak cipta.

Prinsip kerja HLS

Sekarang mari kita cari tahu apa saja kelebihan dan kekurangan dari teknologi ini. Manfaatnya tidak dapat disangkal dan jelas. Ini, pertama-tama, kemampuan beradaptasi kecepatan transfer data ke properti saluran dan perangkat penerima, dan kedua, mekanisme perlindungan hak cipta bawaan. Ketiga, tidak diperlukan router dengan lebar terbatas aliran multicast melalui WI_FI, yang akan membantu menghindari penyerapan seluruh lebar saluran oleh aliran multicast, dalam hal penyiaran televisi IP menggunakan multicast. Itu juga tidak memerlukan perangkat tambahan dengan fungsi Proksi UDP untuk mengonversi aliran multicast ke HTTP, yang sering diperlukan untuk perangkat seluler, meskipun hal itu memengaruhi beban perangkat keras pada router atau perangkat lain yang menjalankan fungsi proxy UDP di jaringan lokal pelanggan. Standar HLS telah menjadi sangat umum dan didukung oleh hampir semua pemutar video modern dan dekoder untuk IPTV.

Set-top box IPTV

Kerugian yang signifikan adalah bahwa pelanggan memiliki dekoder multimedia dan dekoder smart-tv dengan firmware usang atau desain usang yang tidak mendukung standar HLS atau tidak mendukungnya dengan benar. Selain itu, salah satu masalahnya adalah ketidakmampuan untuk memilih kualitas yang tepat untuk siaran yang stabil dalam kondisi perubahan karakteristik saluran dalam interval waktu yang lebih pendek dari durasi fragmen video yang diminta.