tag:blogger.com,1999:blog-8126413226926105495.post8915142102068482875..comments2024-03-15T04:36:37.072+03:00Comments on Streaming with nginx-rtmp-module: HLS variant playlistRoman Arutyunyanhttp://www.blogger.com/profile/00172269067283670037noreply@blogger.comBlogger20125tag:blogger.com,1999:blog-8126413226926105495.post-41474524917400592682022-05-06T12:05:23.697+03:002022-05-06T12:05:23.697+03:00Thanks for sharing the useful information. If you ...Thanks for sharing the useful information. If you guys want to finish <a href="https://www.leawo.org/entips/hls-streaming-download-1410.html?blog=1410" rel="nofollow">HLS streaming download</a> task, you should make use of the downloading tools. You can check some of them in the link. Hope it helps.vinho want to be richhttps://www.blogger.com/profile/14169922019548280415noreply@blogger.comtag:blogger.com,1999:blog-8126413226926105495.post-52639512363283197542019-10-21T14:54:20.471+03:002019-10-21T14:54:20.471+03:00Hls Streaming Server
Get to us to find high- qua...<br /><br /><a href="https://cdn.net/how-cdns-facilitate-faster-http-live-streaming/" rel="nofollow">Hls Streaming Server</a><br /><br /><br />Get to us to find high- quality hls streaming server services and great deals. We are one of the largest service providers that help you with the best hls streaming server services. Visit us to see what we have to offer.<br /><br /><br /><a rel="nofollow">https://cdn.net/how-cdns-facilitate-faster-http-live-streaming/</a>Rafik Mohammadhttps://www.blogger.com/profile/05904528363408266223noreply@blogger.comtag:blogger.com,1999:blog-8126413226926105495.post-8967865191063304182018-11-18T07:31:39.705+03:002018-11-18T07:31:39.705+03:00i tried this tutorial exactly, does not work. I do...i tried this tutorial exactly, does not work. I do not get multi bit rate hls variant.Anonymoushttps://www.blogger.com/profile/08896769895469899563noreply@blogger.comtag:blogger.com,1999:blog-8126413226926105495.post-77806259653371087342018-05-21T12:00:32.551+03:002018-05-21T12:00:32.551+03:00A debt of gratitude is in order for the blog entry...A debt of gratitude is in order for the blog entry amigo! Keep them coming... <a href="https://www.webcasting.com.au/services-2/multi-camera-broadcasting/" rel="nofollow">go</a>full car wraphttps://www.blogger.com/profile/14338048178155598209noreply@blogger.comtag:blogger.com,1999:blog-8126413226926105495.post-27781906958662946982018-04-01T20:21:43.268+03:002018-04-01T20:21:43.268+03:00Install ffmpeg on Ubuntu:
cd /usr/local/bin
sudo ...Install ffmpeg on Ubuntu:<br /><br />cd /usr/local/bin<br />sudo mkdir ffmpeg<br />cd ffmpeg<br />sudo wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-64bit-static.tar.xz<br />sudo tar -xf ffmpeg-release-64bit-static.tar.xz<br />rm ffmpeg-release-64bit-static.tar.xz<br />sudo ln -s /usr/local/bin/ffmpeg/ffmpeg-3.4.1-64bit-static/ffmpeg /usr/bin/ffmpeg<br /><br />#Now ffmpeg is installed as root. Need to change it to nobody for nginx rtmp worker to pick it up:<br />sudo cp /usr/bin/ffmpeg /var/<br />sudo chown nobody:nobody ffmpeg<br />ls -l /var/ffmpeg<br />-rwxr-xr-x 1 nobody nobody 48373280 Apr 1 17:07 /var/ffmpeg<br /><br /># edit nginx.conf and set the path to ffmpeg:<br />exec /var/ffmpeg -i rtmp://localhost/src/$name<br /> -c:a aac -b:a 32k -c:v libx264 -b:v 128K -f flv rtmp://localhost/hls/$name_low<br /> -c:a aac -b:a 64k -c:v libx264 -b:v 256k -f flv rtmp://localhost/hls/$name_mid<br /> -c:a aac -b:a 128k -c:v libx264 -b:v 512K -f flv rtmp://localhost/hls/$name_hi 2>>/tmp/log;<br /><br />#stop and start nginx. This should work now!<br />Anonymoushttps://www.blogger.com/profile/11878614948409374370noreply@blogger.comtag:blogger.com,1999:blog-8126413226926105495.post-64915979609363513092016-05-16T18:24:52.461+03:002016-05-16T18:24:52.461+03:00Hi Arut,
Sorry for my english, i'm French.
I ...Hi Arut,<br /><br />Sorry for my english, i'm French.<br />I try your configuration for make multi-bitrate HLS streams, but it's not working. <br /><br />I'm pretty sure the probleme is what have you say : make sure ffmpeg is accessible from nginx worker account (unprivileged usually)<br /><br />Have you some tips to check that ?<br /><br />Thanks, and good job for your work man.Anonymoushttps://www.blogger.com/profile/01131229288934216629noreply@blogger.comtag:blogger.com,1999:blog-8126413226926105495.post-41787657670547632982016-02-03T06:40:40.266+03:002016-02-03T06:40:40.266+03:00Hi Arut,
Is a multi-bitrate configuration possibl...Hi Arut,<br /><br />Is a multi-bitrate configuration possible with the DASH module of your streaming module? If so, is the syntax for configuring DASH bitrate variants similar to what you've described here for HLS?<br /><br />Thank you,<br />Paulbitkid83https://www.blogger.com/profile/11553168714015980248noreply@blogger.comtag:blogger.com,1999:blog-8126413226926105495.post-70292768625912231372016-01-07T19:44:39.614+03:002016-01-07T19:44:39.614+03:00Quick question: Does the on_play or exec_play type...Quick question: Does the on_play or exec_play type of events work with HLS variants, I cant seem to get it to fire, and my players are not even showing up in the stats page <br /><br /><br />*****<br />rtmp {<br /> server {<br /> listen 1935;<br /> exec_play bash -c "echo $addr $name >> /tmp/clients";<br /> exec_play_done bash -c "echo $addr $name done>> /tmp/clients";<br /> exec_publish bash -c "echo $addr $name >> /tmp/publishers";<br /> exec_publish_done bash -c "echo $addr $name done >> /tmp/publishers";<br /><br /> application src {<br /> live on;<br /><br /> exec ffmpeg -i rtmp://stream.reachbig.com/src/$name<br /> -acodec copy -b:a 64k -c:v libx264 -b:v 256k -f flv rtmp://stream.reachbig.com/live/$name_mid<br /> -acodec copy -vcodec copy -f flv rtmp://stream.reachbig.com/live/$name_hi;<br /><br /><br /><br /> }<br /><br /><br /> application live {<br /> live on;<br /> hls on;<br /> hls_path /HLS/live;<br /> hls_nested on;<br /> hls_fragment 10;<br /> hls_variant _mid BANDWIDTH=320000;<br /> hls_variant _hi BANDWIDTH=2400000;<br /><br /><br /><br /> }<br /> }<br />}<br />******<br /><br />I see the publish and the client playing the src but only the publish in the live <br /><br />I ultimately want to trigger a bash script on different events.<br /><br />JeremyKithroshttps://www.blogger.com/profile/10121833628320580975noreply@blogger.comtag:blogger.com,1999:blog-8126413226926105495.post-59559844805135004672015-11-10T05:05:57.660+03:002015-11-10T05:05:57.660+03:00Hi Arut. What is your recommendation for #1?
Sho...Hi Arut. What is your recommendation for #1? <br /><br />Should I modify nginx config so worker_processes run as a user other than nobody? Or should I grant nobody access to exec ffmpeg (possible?)?<br /><br />Thank you.Anonymoushttps://www.blogger.com/profile/00857878955233882850noreply@blogger.comtag:blogger.com,1999:blog-8126413226926105495.post-48642240594250266712015-05-30T17:22:03.237+03:002015-05-30T17:22:03.237+03:00This comment has been removed by the author.gpsonhttps://www.blogger.com/profile/00392436137021336225noreply@blogger.comtag:blogger.com,1999:blog-8126413226926105495.post-55522948057162173012015-01-12T14:26:44.875+03:002015-01-12T14:26:44.875+03:00There's no limit on the number of variants. Wh...There's no limit on the number of variants. Where do you have this exception? Libx264 is not related to the rtmp module.Roman Arutyunyanhttps://www.blogger.com/profile/00172269067283670037noreply@blogger.comtag:blogger.com,1999:blog-8126413226926105495.post-62724329323140790822015-01-07T15:54:20.770+03:002015-01-07T15:54:20.770+03:00Can we create more than 3variants?. I am getting a...Can we create more than 3variants?. I am getting an exception for 4 variants: <br />x264 [error]: malloc of size 6955584 failed<br />Video encoding failedvireshashttps://www.blogger.com/profile/10757347974567774514noreply@blogger.comtag:blogger.com,1999:blog-8126413226926105495.post-60145105036879422052014-12-10T10:13:29.869+03:002014-12-10T10:13:29.869+03:00Change localhost in the following command to local...Change localhost in the following command to localhost:1935:<br /> exec ffmpeg -i rtmp://localhost/src/$name<br /> -c:a libfdk_aac -b:a 32k -c:v libx264 -b:v 128K -f flv rtmp://localhost/hls/$name_low<br /> -c:a libfdk_aac -b:a 64k -c:v libx264 -b:v 256k -f flv rtmp://localhost/hls/$name_mid<br /> -c:a libfdk_aac -b:a 128k -c:v libx264 -b:v 512K -f flv rtmp://localhost/hls/$name_hi;vireshashttps://www.blogger.com/profile/10757347974567774514noreply@blogger.comtag:blogger.com,1999:blog-8126413226926105495.post-47822904185670355572014-01-10T16:59:07.884+04:002014-01-10T16:59:07.884+04:00Please check video codec. It should be h264.Please check video codec. It should be h264.Roman Arutyunyanhttps://www.blogger.com/profile/00172269067283670037noreply@blogger.comtag:blogger.com,1999:blog-8126413226926105495.post-64414143326026755692014-01-08T09:19:44.174+04:002014-01-08T09:19:44.174+04:00 application myapp {
live on;
... application myapp {<br /> live on;<br /> # sample recorder<br /> recorder rec1 {<br /> record all;<br /> record_interval 30s;<br /> record_path /tmp;<br /> record_unique on;<br /> }<br /> # sample HLS<br /> hls on;<br /> hls_path /tmp/app;<br /> hls_fragment 15s;<br /> hls_nested on;<br /> hls_cleanup off;<br /> hls_variant _low BANDWIDTH=160000;<br /> hls_variant _mid BANDWIDTH=320000;<br /> hls_variant _hi BANDWIDTH=640000;<br /> }<br /><br />location /myapp {<br /> types {<br /> application/vnd.apple.mpegurl m3u8;<br /> video/mp2t ts;<br /> }<br /> alias /tmp/app;<br /> add_header Cache-Control no-cache;<br /> } <br /><br />I am able to play the m3u8 file but only audio without video. i tested in both android and iphone browsers .. while i am trying to play the ts files directly using media player it also play only audio.Anonymoushttps://www.blogger.com/profile/05802906433757825442noreply@blogger.comtag:blogger.com,1999:blog-8126413226926105495.post-29635555677786833462013-10-23T19:41:46.212+04:002013-10-23T19:41:46.212+04:00ffmpeg exits for some reason
1. make sure ffmpeg ...ffmpeg exits for some reason<br /><br />1. make sure ffmpeg is accessible from nginx worker account (unprivileged usually)<br />2. add "2>>/tmp/log" to the end of exec directive to see ffmpeg errorRoman Arutyunyanhttps://www.blogger.com/profile/00172269067283670037noreply@blogger.comtag:blogger.com,1999:blog-8126413226926105495.post-13703492778393873482013-10-22T23:41:30.844+04:002013-10-22T23:41:30.844+04:00Hi Arut, thanks for your response. One more questi...Hi Arut, thanks for your response. One more question, please.<br />I'm trying to deploy this feature, but I believe that I did something wrong.<br />Basically, I'm ingest a stream as below:<br /><br /> Duration: 02:04:42.34, start: 0.000000, bitrate: 2127 kb/s<br /> Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x808, 2030 kb/s, 23.98 <br /> Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, s16, 93 kb/s<br /><br />But the logs of nginx showed me like below:<br /><br />2013/10/22 17:28:11 [info] 652#0: *3 client connected '127.0.0.1'<br />2013/10/22 17:28:11 [info] 652#0: *3 connect: app='src' args='' flashver='FMLE/3.0 (compatible; Lavf54.29' swf_url='' tc_url='rtmp://localhost:1935/src' page_url='' acodecs=0 vcodecs=0 object_encoding=0, client: 127.0.0.1, server: 0.0.0.0:1935<br />2013/10/22 17:28:11 [info] 652#0: *3 createStream, client: 127.0.0.1, server: 0.0.0.0:1935<br />2013/10/22 17:28:11 [info] 652#0: *3 publish: name='sintel' args='' type=live silent=0, client: 127.0.0.1, server: 0.0.0.0:1935<br />2013/10/22 17:28:11 [notice] 652#0: signal 17 (SIGCHLD) received<br />2013/10/22 17:28:11 [notice] 652#0: unknown process 1973 exited with code 1<br />2013/10/22 17:28:16 [notice] 652#0: signal 17 (SIGCHLD) received<br />2013/10/22 17:28:16 [notice] 652#0: unknown process 1983 exited with code 1<br />2013/10/22 17:28:17 [info] 652#0: *3 deleteStream, client: 127.0.0.1, server: 0.0.0.0:1935<br />2013/10/22 17:28:17 [info] 652#0: *3 disconnect, client: 127.0.0.1, server: 0.0.0.0:1935<br />2013/10/22 17:28:17 [info] 652#0: *3 deleteStream, client: 127.0.0.1, server: 0.0.0.0:1935<br /><br />My nginx.conf is below:<br /><br />worker_processes 5;<br /><br />error_log logs/error.log debug;<br /><br />events {<br /> worker_connections 1024;<br />}<br /><br />rtmp {<br /> server {<br /> listen 1935;<br /> ping 30s;<br /> notify_method get;<br /><br /> application src {<br /> live on;<br /><br /> exec ffmpeg -i rtmp://localhost/src/$name<br /> -c:a libfdk_aac -b:a 32k -c:v libx264 -b:v 128K -f flv rtmp://localhost/hls/$name_low<br /> -c:a libfdk_aac -b:a 64k -c:v libx264 -b:v 256k -f flv rtmp://localhost/hls/$name_mid<br /> -c:a libfdk_aac -b:a 128k -c:v libx264 -b:v 512K -f flv rtmp://localhost/hls/$name_hi;<br /> }<br /><br /> application hls {<br /> live on;<br /><br /> hls on;<br /> hls_path /mnt/hls;<br /> hls_nested on;<br /> hls_fragment 5s;<br /><br /> hls_variant _low BANDWIDTH=160000;<br /> hls_variant _mid BANDWIDTH=320000;<br /> hls_variant _hi BANDWIDTH=640000;<br /> }<br /> }<br />}<br /><br />http {<br /> include mime.types;<br /> default_type application/octet-stream;<br /><br /> sendfile on;<br /> keepalive_timeout 65;<br /><br /> server {<br /> listen 80;<br /> server_name localhost;<br /><br /> # rtmp stat<br /> location /stat {<br /> rtmp_stat all;<br /> rtmp_stat_stylesheet stat.xsl;<br /> }<br /><br /> location /stat.xsl {<br /> # you can move stat.xsl to a different location<br /> root ~/build/nginx-rtmp-module/;<br /> }<br /><br /> error_page 500 502 503 504 /50x.html;<br /> location = /50x.html {<br /> root html;<br /> }<br /><br /> location /hls {<br /> types {<br /> application/vnd.apple.mpegurl m3u8;<br /> video/mp2t ts;<br /> }<br /> alias /mnt/hls;<br /> }<br /> }<br />}<br /><br />What should be wrong?<br />Thanks again.WellSantoshttps://www.blogger.com/profile/15753412674673443405noreply@blogger.comtag:blogger.com,1999:blog-8126413226926105495.post-50893486796225106072013-10-13T16:35:49.886+04:002013-10-13T16:35:49.886+04:00No. HLS support in nginx-rtmp-module is only for l...No. HLS support in nginx-rtmp-module is only for live streams.Roman Arutyunyanhttps://www.blogger.com/profile/00172269067283670037noreply@blogger.comtag:blogger.com,1999:blog-8126413226926105495.post-12463477942600069912013-10-12T00:44:59.143+04:002013-10-12T00:44:59.143+04:00Hi Arut, this feature works with vod files?Hi Arut, this feature works with vod files?WellSantoshttps://www.blogger.com/profile/15753412674673443405noreply@blogger.comtag:blogger.com,1999:blog-8126413226926105495.post-53578760539010025882013-08-25T22:13:53.134+04:002013-08-25T22:13:53.134+04:00I am not sure why this isn't working...
I'...I am not sure why this isn't working...<br /><br />I'm feeding it an h.264 stream from a raspberry pi camera module like so:<br /><br />raspivid -t 999999999 -w 960 -h 540 -fps 10 -b 500000 -vf -o - | ffmpeg -i - -c:v copy -an -f flv rtmp://localhost/src/raspi<br /><br />nginx-rtmp is accepting the stream (this is output from nginx-rtmp's stat.xsl):<br /><br />src<br />live streams 1<br />raspi 1 8.54 MB 0 KB 165 Kb/s 0 Kb/s 960x540 25 H264 active 6m 54s<br />hls<br />live streams 0<br />Generated by NGINX RTMP module, NGINX , pid 24116, built Aug 25 2013 16:43:05 gcc 4.6.3 (Debian 4.6.3-14+rpi1) <br /><br />From nginx.conf (this is basically copied from your post above, but I told ffmpeg to drop the audio, which doesn't exist anyway):<br /><br />rtmp {<br /> server {<br /> listen 1935;<br /> ping 30s;<br /> notify_method get;<br /><br /> application src {<br /> live on;<br /><br /> exec ffmpeg -i rtmp://localhost/src/$name<br /> -an -c:v libx264 -b:v 128K -f flv rtmp://localhost/hls/$name_low<br /> -an -c:v libx264 -b:v 256k -f flv rtmp://localhost/hls/$name_mid<br /> -an -c:v libx264 -b:v 512K -f flv rtmp://localhost/hls/$name_hi;<br /> }<br /><br /> application hls {<br /> live on;<br /><br /> hls on;<br /> hls_path /tmp/hls;<br /> hls_nested on;<br /><br /> hls_variant _low BANDWIDTH=160000;<br /> hls_variant _mid BANDWIDTH=320000;<br /> hls_variant _hi BANDWIDTH=640000;<br /> }<br /><br /> }<br />}<br /><br /><br />FFMPEG is streaming camera video nicely:<br /><br />ffmpeg version N-55356-gb11b7ce Copyright (c) 2000-2013 the FFmpeg developers<br /> built on Aug 8 2013 00:43:17 with gcc 4.6 (Debian 4.6.3-14+rpi1)<br /> configuration:<br /> libavutil 52. 41.100 / 52. 41.100<br /> libavcodec 55. 23.100 / 55. 23.100<br /> libavformat 55. 13.102 / 55. 13.102<br /> libavdevice 55. 3.100 / 55. 3.100<br /> libavfilter 3. 82.100 / 3. 82.100<br /> libswscale 2. 4.100 / 2. 4.100<br /> libswresample 0. 17.103 / 0. 17.103<br />Input #0, h264, from 'pipe:':<br /> Duration: N/A, bitrate: N/A<br /> Stream #0:0: Video: h264 (High), yuv420p, 960x540, 25 fps, 25 tbr, 1200k tbn, 50 tbc<br />Output #0, flv, to 'rtmp://localhost/src/raspi':<br /> Metadata:<br /> encoder : Lavf55.13.102<br /> Stream #0:0: Video: h264 ([7][0][0][0] / 0x0007), yuv420p, 960x540, q=2-31, 25 fps, 1k tbn, 1200k tbc<br />Stream mapping:<br /> Stream #0:0 -> #0:0 (copy)<br />frame= 8571 fps= 10 q=-1.0 size= 17645kB time=00:05:42.80 bitrate= 421.7kbits/s<br /><br /><br /><br /><br />So it looks like it's working, but...<br /><br />http://localhost/hls/raspi.m3u8 -> HTTP error 404 Not Found<br />http://localhost/hls -> HTTP error 403 Forbidden<br /><br />What am I doing wrong?<br /><br />c03https://www.blogger.com/profile/11519856781277395755noreply@blogger.com