{"id":213,"date":"2021-03-29T22:34:50","date_gmt":"2021-03-30T05:34:50","guid":{"rendered":"https:\/\/varmintworks.com\/varmint-blog\/?p=213"},"modified":"2021-09-07T15:50:27","modified_gmt":"2021-09-07T22:50:27","slug":"recipes-for-raspberry-pi-streaming-camera","status":"publish","type":"post","link":"https:\/\/varmintworks.com\/varmint-blog\/2021\/03\/29\/recipes-for-raspberry-pi-streaming-camera\/","title":{"rendered":"Recipes for Raspberry Pi Streaming Camera"},"content":{"rendered":"\n<p>In working on the time-lapse deck camera, I wanted to turn a Raspberry Pi with an HQ camera into an IP camera. There are two approaches I tried. Both worked. In the end, I would prefer the nginx solution, because it&#8217;s lighter and doesn&#8217;t cause the installation of XServer and crew on something like a headless Raspberry Pi Zero W!<\/p>\n\n\n\n<div class=\"wp-block-jetpack-tiled-gallery aligncenter is-style-rectangular\"><div class=\"tiled-gallery__gallery\"><div class=\"tiled-gallery__row\"><div class=\"tiled-gallery__col\" style=\"flex-basis:20.986492052450327%\"><figure class=\"tiled-gallery__item\"><img decoding=\"async\" srcset=\"https:\/\/i0.wp.com\/varmintworks.com\/varmint-blog\/wp-content\/uploads\/2021\/03\/20210329_120138-01-1.jpeg?strip=info&#038;w=600&#038;ssl=1 600w,https:\/\/i0.wp.com\/varmintworks.com\/varmint-blog\/wp-content\/uploads\/2021\/03\/20210329_120138-01-1.jpeg?strip=info&#038;w=900&#038;ssl=1 900w,https:\/\/i0.wp.com\/varmintworks.com\/varmint-blog\/wp-content\/uploads\/2021\/03\/20210329_120138-01-1.jpeg?strip=info&#038;w=1200&#038;ssl=1 1200w,https:\/\/i0.wp.com\/varmintworks.com\/varmint-blog\/wp-content\/uploads\/2021\/03\/20210329_120138-01-1.jpeg?strip=info&#038;w=1500&#038;ssl=1 1500w,https:\/\/i0.wp.com\/varmintworks.com\/varmint-blog\/wp-content\/uploads\/2021\/03\/20210329_120138-01-1.jpeg?strip=info&#038;w=1800&#038;ssl=1 1800w,https:\/\/i0.wp.com\/varmintworks.com\/varmint-blog\/wp-content\/uploads\/2021\/03\/20210329_120138-01-1.jpeg?strip=info&#038;w=2000&#038;ssl=1 2000w\" alt=\"\" data-height=\"1800\" data-id=\"215\" data-link=\"https:\/\/varmintworks.com\/varmint-blog\/?attachment_id=215\" data-url=\"https:\/\/varmintworks.com\/varmint-blog\/wp-content\/uploads\/2021\/03\/20210329_120138-01-1.jpeg\" data-width=\"2114\" src=\"https:\/\/i0.wp.com\/varmintworks.com\/varmint-blog\/wp-content\/uploads\/2021\/03\/20210329_120138-01-1.jpeg?ssl=1\" data-amp-layout=\"responsive\"\/><\/figure><\/div><div class=\"tiled-gallery__col\" style=\"flex-basis:39.50675397377484%\"><figure class=\"tiled-gallery__item\"><img decoding=\"async\" srcset=\"https:\/\/i2.wp.com\/varmintworks.com\/varmint-blog\/wp-content\/uploads\/2021\/03\/20210329_120150-01-scaled.jpeg?strip=info&#038;w=600&#038;ssl=1 600w,https:\/\/i2.wp.com\/varmintworks.com\/varmint-blog\/wp-content\/uploads\/2021\/03\/20210329_120150-01-scaled.jpeg?strip=info&#038;w=900&#038;ssl=1 900w,https:\/\/i2.wp.com\/varmintworks.com\/varmint-blog\/wp-content\/uploads\/2021\/03\/20210329_120150-01-scaled.jpeg?strip=info&#038;w=1200&#038;ssl=1 1200w,https:\/\/i2.wp.com\/varmintworks.com\/varmint-blog\/wp-content\/uploads\/2021\/03\/20210329_120150-01-scaled.jpeg?strip=info&#038;w=1500&#038;ssl=1 1500w,https:\/\/i2.wp.com\/varmintworks.com\/varmint-blog\/wp-content\/uploads\/2021\/03\/20210329_120150-01-scaled.jpeg?strip=info&#038;w=1800&#038;ssl=1 1800w,https:\/\/i2.wp.com\/varmintworks.com\/varmint-blog\/wp-content\/uploads\/2021\/03\/20210329_120150-01-scaled.jpeg?strip=info&#038;w=2000&#038;ssl=1 2000w\" alt=\"\" data-height=\"1152\" data-id=\"216\" data-link=\"https:\/\/varmintworks.com\/varmint-blog\/?attachment_id=216\" data-url=\"https:\/\/varmintworks.com\/varmint-blog\/wp-content\/uploads\/2021\/03\/20210329_120150-01-scaled.jpeg\" data-width=\"2560\" src=\"https:\/\/i2.wp.com\/varmintworks.com\/varmint-blog\/wp-content\/uploads\/2021\/03\/20210329_120150-01-scaled.jpeg?ssl=1\" data-amp-layout=\"responsive\"\/><\/figure><\/div><div class=\"tiled-gallery__col\" style=\"flex-basis:39.50675397377484%\"><figure class=\"tiled-gallery__item\"><img decoding=\"async\" srcset=\"https:\/\/i0.wp.com\/varmintworks.com\/varmint-blog\/wp-content\/uploads\/2021\/03\/20210329_120157-01-scaled.jpeg?strip=info&#038;w=600&#038;ssl=1 600w,https:\/\/i0.wp.com\/varmintworks.com\/varmint-blog\/wp-content\/uploads\/2021\/03\/20210329_120157-01-scaled.jpeg?strip=info&#038;w=900&#038;ssl=1 900w,https:\/\/i0.wp.com\/varmintworks.com\/varmint-blog\/wp-content\/uploads\/2021\/03\/20210329_120157-01-scaled.jpeg?strip=info&#038;w=1200&#038;ssl=1 1200w,https:\/\/i0.wp.com\/varmintworks.com\/varmint-blog\/wp-content\/uploads\/2021\/03\/20210329_120157-01-scaled.jpeg?strip=info&#038;w=1500&#038;ssl=1 1500w,https:\/\/i0.wp.com\/varmintworks.com\/varmint-blog\/wp-content\/uploads\/2021\/03\/20210329_120157-01-scaled.jpeg?strip=info&#038;w=1800&#038;ssl=1 1800w,https:\/\/i0.wp.com\/varmintworks.com\/varmint-blog\/wp-content\/uploads\/2021\/03\/20210329_120157-01-scaled.jpeg?strip=info&#038;w=2000&#038;ssl=1 2000w\" alt=\"\" data-height=\"1152\" data-id=\"217\" data-link=\"https:\/\/varmintworks.com\/varmint-blog\/?attachment_id=217\" data-url=\"https:\/\/varmintworks.com\/varmint-blog\/wp-content\/uploads\/2021\/03\/20210329_120157-01-scaled.jpeg\" data-width=\"2560\" src=\"https:\/\/i0.wp.com\/varmintworks.com\/varmint-blog\/wp-content\/uploads\/2021\/03\/20210329_120157-01-scaled.jpeg?ssl=1\" data-amp-layout=\"responsive\"\/><\/figure><\/div><\/div><\/div><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">RTSP Streamer with VLC<\/h3>\n\n\n\n<p>Prepare SD card (Used Raspberry Pi OS lite (no desktop))<br>Add the ssh &amp; wpa_supplicant.conf files to the boot partition<br>Boot RPZW from S card<\/p>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color\">ssh pi@192.168.0.xxx<br>passwd<br>sudo raspi-config<br>sudo apt update<br>sudo apt full-upgrade<br>sudo apt install vlc<br>sudo nano rtsp-stream.sh<\/p>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color\">!\/bin\/bash<br>raspivid -o &#8211; -t 0 -rot 0 -w 1280 -h 720 -fps 30 -b 1250000 | cvlc -vvv stream:\/\/\/dev\/stdin &#8211;sout &#8216;#rtp{sdp=rtsp:\/\/:8554\/stream}&#8217; :demux=h264<\/p>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color\">sudo chmod +x rtsp-stream.sh<br>.\/rtsp-stream.sh<\/p>\n\n\n\n<p>test with VLC &#8220;Network Stream&#8221;: <\/p>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color\">rtsp:\/\/192.168.0.120:8554\/stream<\/p>\n\n\n\n<p>Make it a service<\/p>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color\">sudo nano \/etc\/systemd\/system\/rtsp-stream.service<\/p>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color\">[Unit]<br>Description=Deck Camera Streaming Service<br>After=multi-user.target<\/p>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color\">[Service]<br>Type=simple<br>ExecStart=\/home\/pi\/rtsp-stream.sh<br>User=pi<br>WorkingDirectory=\/home\/pi<br>Restart=on-failure<\/p>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color\">[Install]<br>WantedBy=multi-user.target<\/p>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color\">sudo systemctl enable rtsp-stream.service<br>sudo systemctl start rtsp-stream.service<br>sudo reboot<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">RTMP Streamer with nginx<\/h3>\n\n\n\n<p>Prepare SD card (Used Raspberry Pi OS lite (no desktop))<br>Add the ssh &amp; wpa_supplicant.conf files to the boot partition<br>Boot RPZW from S card<\/p>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color\">sudo apt update<br>sudo apt full-ugrade<br>sduo reboot<br>sudo apt install libnginx-mod-rtmp<br>sudo rm sites-enabled\/default<br>sudo systemctl start nginx.service<br>sudo systemctl status nginx.service<\/p>\n\n\n\n<p>nginx.service should be running. If so, continue. if not? fix it<\/p>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color\">sudo nano \/etc\/nginx\/rtmp.conf<\/p>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color\">rtmp {<br>   server {<br>      listen 1935;<br>      chunk_size 4096;<br>      application live {<br>         live on;<br>         record off;<br>      }<br>   }<br>}<\/p>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color\">sudo nano \/etc\/nginx\/nginx.conf<\/p>\n\n\n\n<p>Add this line:<\/p>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color\">include \/etc\/nginx\/rtmp.conf;<\/p>\n\n\n\n<p>right here:<\/p>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color\">user www-data;<br>worker_processes auto;<br>pid \/run\/nginx.pid<br>include \/etc\/nginx\/modules-enabled\/*.conf;<br>include \/etc\/nginx\/rtmp.conf; &lt;&#8212; right here<br>sudo systemctl stop nginx.service<br>sudo systemctl start nginx.service<br>sudo systemctl status nginx.service<br>netstat -an | grep 1935<\/p>\n\n\n\n<p>OK, try VLC:<\/p>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color\">rtmp:\/\/192.168.0.164:1935\/live\/test<\/p>\n\n\n\n<p>in OBS<\/p>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color\">Server: rtmp:\/\/192.168.0.164:1935\/live<br>Key: test<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In working on the time-lapse deck camera, I wanted to turn a Raspberry Pi with an HQ camera into an IP camera. There are two approaches I tried. Both worked. In the end, I would prefer the nginx solution, because it&#8217;s lighter and doesn&#8217;t cause the installation of XServer and [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":221,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-213","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/varmintworks.com\/varmint-blog\/wp-content\/uploads\/2021\/03\/20210329_120138-01-25pct.jpg?fit=529%2C450&ssl=1","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/varmintworks.com\/varmint-blog\/wp-json\/wp\/v2\/posts\/213","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/varmintworks.com\/varmint-blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/varmintworks.com\/varmint-blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/varmintworks.com\/varmint-blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/varmintworks.com\/varmint-blog\/wp-json\/wp\/v2\/comments?post=213"}],"version-history":[{"count":2,"href":"https:\/\/varmintworks.com\/varmint-blog\/wp-json\/wp\/v2\/posts\/213\/revisions"}],"predecessor-version":[{"id":223,"href":"https:\/\/varmintworks.com\/varmint-blog\/wp-json\/wp\/v2\/posts\/213\/revisions\/223"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/varmintworks.com\/varmint-blog\/wp-json\/wp\/v2\/media\/221"}],"wp:attachment":[{"href":"https:\/\/varmintworks.com\/varmint-blog\/wp-json\/wp\/v2\/media?parent=213"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/varmintworks.com\/varmint-blog\/wp-json\/wp\/v2\/categories?post=213"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/varmintworks.com\/varmint-blog\/wp-json\/wp\/v2\/tags?post=213"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}