{"id":192,"date":"2023-12-24T22:20:17","date_gmt":"2023-12-24T13:20:17","guid":{"rendered":"https:\/\/txn.myds.me\/blog\/?p=192"},"modified":"2023-12-24T22:20:17","modified_gmt":"2023-12-24T13:20:17","slug":"%e3%83%a9%e3%82%ba%e3%83%91%e3%82%a4%e3%82%ab%e3%83%a1%e3%83%a9-nginx-%e3%81%a7-hlsrtmp%e3%82%b5%e3%83%bc%e3%83%90","status":"publish","type":"post","link":"https:\/\/blog.txn.red\/?p=192","title":{"rendered":"\u30e9\u30ba\u30d1\u30a4\u30ab\u30e1\u30e9 + nginx \u3067 hls(RTMP)\u30b5\u30fc\u30d0"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\u3053\u3053\u306e\u3068\u3053\u308d\u30ab\u30e1\u30e9\u3067\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u306e\u5b9f\u9a13\u3092\u3044\u308d\u3044\u308d\u3057\u3066\u3044\u308b\u306e\u3067\u3059\u304c\u3001\u4eca\u56de\u306f hls \u30b5\u30fc\u30d0\u306e\u5b9f\u9a13\u3067\u3059\u3002RTMP\u30b5\u30fc\u30d0\u3068\u547c\u3076\u3079\u304d\u306a\u306e\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u304c\u4f55\u3068\u306a\u304f\u3042\u3084\u3075\u3084\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5185\u5bb9\u7684\u306b\u306f IoT PLUS \u3055\u3093\u306e\u5185\u5bb9\u306e\u307b\u307c\u307e\u3093\u307e\u3067\u3059\u304c\u3001ffmpeg\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u3068systemd \u3067\u306e\u8d77\u52d5\u306b\u5909\u66f4\u3057\u305f\u306e\u3067\u3055\u3089\u3057\u307e\u3059\u3002<br>\u307e\u3042\u3001\u8ab0\u304b\u306e\u5f79\u306b\u7acb\u3064\u304b\u3082\u3057\u308c\u306a\u3044\u304c\u308f\u304b\u3089\u306a\u3044\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u305d\u308c\u306b\u3057\u3066\u3082 ffmpeg \u306e\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u306f\u79c1\u306b\u3068\u3063\u3066\u9b3c\u9580\u3067\u3059\u3002\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u8aad\u3080\u6c17\u306b\u30a4\u30de\u30a4\u30c1\u306a\u3089\u306a\u3044\u306e\u3088\u3002\u8ab0\u304b\u5206\u304b\u308a\u3084\u3059\u3044\u89e3\u8aac\u30da\u30fc\u30b8\u3064\u304f\u3063\u3066\u304f\u308c\u306a\u3044\u3067\u3057\u3087\u3046\u304b ?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"%25e6%2589%258b%25e9%25a0%2586\">\u624b\u9806<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u5fc5\u8981\u306a\u7269\u306f\u3001ffmpeg \u3068 nginx \u3067\u3059\u3002apache \u306f\u8ffd\u3063\u3066\u306a\u3044\u3067\u3059\u304c nginx \u306b rtmp \u30e2\u30b8\u30e5\u30fc\u30eb\u304c\u3042\u3063\u3066\u304a\u624b\u8efd\u306a\u306e\u3067\u305d\u306e\u4f8b\u304c\u3042\u308b\u306e\u3060\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u81ea\u5206\u306e\u4f8b\u3067\u306f http basic auth \u3082\u8a2d\u5b9a\u3057\u3066\u3044\u306a\u3044\u306e\u3067 apache2-utils \u306f\u4e0d\u8981\u3067\u3059\u3002php-fpm \u3082\u5165\u308c\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"%25e3%2582%25a4%25e3%2583%25b3%25e3%2582%25b9%25e3%2583%2588%25e3%2583%25bc%25e3%2583%25ab\">\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/h3>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\" data-show-lang=\"1\"><code>$ sudo apt update\n$ sudo apt install ffmpeg nginx libnginx-mod-rtmp<\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"%25e5%2587%25ba%25e5%258a%259b%25e3%2583%2595%25e3%2582%25a9%25e3%2583%25ab%25e3%2583%2580%25e3%2581%25ae%25e6%25ba%2596%25e5%2582%2599\">\u51fa\u529b\u30d5\u30a9\u30eb\u30c0\u306e\u6e96\u5099<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u3061\u3089\u3082\u4e38\u30d1\u30af\u30ea\u3067\u3059\u304c\u3001\/dev\/shm \u306e\u30ea\u30f3\u30af\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\" data-show-lang=\"1\"><code>$ sudo mkdir -p \/var\/www\/html\/live\n$ cd \/var\/www\/html\/live\n$ sudo ln -s \/dev\/shm hls<\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"indexhtml-%25e3%2581%25ae%25e6%25ba%2596%25e5%2582%2599\">index.html \u306e\u6e96\u5099<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\/var\/www\/html\/index.html \u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u4e2d\u8eab\u306f\u3068\u308a\u3042\u3048\u305a\u30d1\u30af\u30ea\u3067\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-html\" data-lang=\"HTML\"><code>&lt;!DOCTYPE html&gt;\n&lt;html lang=&quot;ja&quot;&gt;\n&lt;head&gt;\n  &lt;meta charset=&quot;utf-8&quot;\/&gt;\n  &lt;script src=&quot;https:\/\/cdn.jsdelivr.net\/npm\/hls.js@latest&quot;&gt;&lt;\/script&gt;\n&lt;\/head&gt;\n\n&lt;body&gt;\n  &lt;video id=&quot;video&quot; controls width=&quot;100%&quot;&gt;&lt;\/video&gt;\n  &lt;script&gt;\n    if(Hls.isSupported()) {\n      var video = document.getElementById(&#39;video&#39;);\n      var hls = new Hls();\n      hls.loadSource(&#39;live\/hls\/stream.m3u8&#39;);\n      hls.attachMedia(video);\n      hls.on(Hls.Events.MANIFEST_PARSED,function() {\n      video.play();\n    });\n   }\n  &lt;\/script&gt;\n&lt;p&gt;\n  iPhone\u306a\u3069\u3067\u518d\u751f\u3055\u308c\u306a\u3044\u5834\u5408\u306f\u3001&lt;a href=&quot;live\/hls\/stream.m3u8&quot;&gt;\u3053\u3061\u3089&lt;\/a&gt;\u3092\u30af\u30ea\u30c3\u30af\u3002\n&lt;\/p&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">nginx \u306e\u8a2d\u5b9a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\/etc\/nginx\/rtmp.conf \u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u3001\u305d\u3044\u3064\u3092 \/etc\/nginx\/nginx.conf \u3067\u30a4\u30f3\u30af\u30eb\u30fc\u30c9\u3057\u3066\u3084\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3082\u3068\u3082\u3068 nginx.conf \u306e\u306a\u304b\u3067. conf.d \u306e\u4e2d\u306b\u3042\u308b *.conf \u30d5\u30a1\u30a4\u30eb\u306f\u8aad\u307f\u8fbc\u307e\u308c\u308b\u306e\u3067\u3059\u304c\u3001\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u4f4d\u7f6e\u7684\u306b\u307e\u305a\u3044\u3089\u3057\u304f\u30a8\u30e9\u30fc\u306b\u306a\u308b\u306e\u3067\u3053\u306e\u69cb\u6210\u306b\u3057\u3066\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u66f4\u306b\u3001\/var\/www\/html \u306e\u30ed\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30cf\u30f3\u30c9\u30e9\u3092 \/etc\/nginx\/conf.d\/default.conf \u306b\u66f8\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\" data-file=\"\/etc\/nginx\/rtmp.conf\"><code>rtmp {\n    server {\n        listen 1935;\n        chunk_size 4096;\n        allow play all;\n        access_log \/var\/log\/nginx\/rtmp_access.log;\n\n        application live {\n            live on;\n            hls on;\n            record off;\n            hls_path \/var\/www\/html\/live\/hls;\n            hls_fragment 1s;\n            hls_type live;\n        }\n    }\n}<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u308c\u3092\u4e0b\u306e nginx.conf \u3067\u30a4\u30f3\u30af\u30eb\u30fc\u30c9\u3057\u3066\u3084\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\" data-file=\"\/etc\/nginx\/nginx.conf\"><code>events {\n----\n}\nhttp {\n----\n}\n\n# http \u30d6\u30ed\u30c3\u30af\u306e\u5916\u306b\u306a\u308b\u3088\u3046\u306b\u4ee5\u4e0b\u306e\u884c\u3092\u8ffd\u52a0\ninclude \/etc\/nginx\/rtmp.conf;<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\/etc\/nginx\/conf.d\/default.conf \u306f\u3053\u3046\u306a\u308a\u307e\u3059\u3002\u30ea\u30c3\u30b9\u30f3\u30dd\u30fc\u30c8\u306f 8080 \u306b\u5909\u66f4\u3057\u3066\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>server {\n    listen 8080;\n    proxy_set_header   X-Forwarded-For     $proxy_add_x_forwarded_for;\n    access_log \/var\/log\/nginx\/access.log combined;\n    error_log \/var\/log\/nginx\/error.log warn;\n\n    location = \/favicon.ico {\n        access_log off;\n        empty_gif;\n        expires 30d;\n    }\n\n    location \/ {\n        #auth_basic &quot;Web Cam Streaming&quot;;\n        #auth_basic_user_file \/var\/www\/.htpasswd;\n\n        root \/var\/www\/html;\n        index index.html;\n        set_real_ip_from    127.0.0.1;\n        real_ip_header      X-Forwarded-For;\n    }\n}<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">nginx \u3092\u8d77\u52d5\u3057\u3066\u304a\u304d\u307e\u3059<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>$ sudo systemctl daemon-reload\n$ sudo systemctl restart nginx<\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ffmpeg-%25e3%2581%25ae%25e8%25b5%25b7%25e5%258b%2595%25e3%2583%2586%25e3%2582%25b9%25e3%2583%2588\">ffmpeg \u306e\u8d77\u52d5\u30c6\u30b9\u30c8<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e00\u65e6\u3001ffmpeg \u3067\u52d5\u753b\u3092\u898b\u308c\u308b\u304b\u30c6\u30b9\u30c8\u3057\u307e\u3059\u3002\u4eca\u56de\u306e\u74b0\u5883\u3067\u306f\u30de\u30a4\u30af\u304c\u306a\u3044\u306e\u3067\u3001\u97f3\u58f0\u95a2\u9023\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u306f\u3056\u3063\u304f\u308a\u524a\u9664\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>$ ffmpeg -f v4l2 -thread_queue_size 8192 -s 720x480 -i \/dev\/video0 \\\n    -r 15 -c:v h264_omx -b:v 512k \\\n    -vf &quot;rotate=180*PI\/180&quot; \\\n    -f flv rtmp:\/\/localhost\/live\/stream<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"> \u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u8aac\u660e<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">-s 720&#215;480: \u89e3\u50cf\u5ea6<br>-r 15: \u30d5\u30ec\u30fc\u30e0\u30ec\u30fc\u30c8(15 \u30d5\u30ec\u30fc\u30e0 \/ sec)<br>-vf &#8220;rotate=180*PI\/180&#8221;: \u753b\u50cf\u3092 180\u5ea6 \u30ed\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u3059\u308b\u3002(\u30e9\u30b8\u30a2\u30f3\u306b\u5909\u63db)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3059\u3079\u3066\u304c\u3046\u307e\u304f\u3044\u3063\u3066\u3044\u308c\u3070\u3001\u3053\u3093\u306a\u3075\u3046\u306b\u30d6\u30e9\u30a6\u30b6\u306b\u52d5\u753b\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/blog.txn.red\/wp-content\/uploads\/2023\/12\/rtmp-1010x1024.png\" alt=\"\" class=\"wp-image-194\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"systemd-%25e3%2581%25ae%25e8%25a8%25ad%25e5%25ae%259a\">systemd \u306e\u8a2d\u5b9a<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u53c2\u8003\u306b\u3057\u305f\u30da\u30fc\u30b8\u3067\u306f\u8d77\u52d5\u30b9\u30af\u30ea\u30d7\u30c8\u3067\u7d42\u308f\u3063\u3066\u3044\u307e\u3057\u305f\u304c\u3001systemd \u306b\u767b\u9332\u3059\u308b\u3053\u3068\u306b\u3057\u307e\u3059\u3002\u307e\u305a\u306f\u5148\u307b\u3069\u306e ffmpeg \u8d77\u52d5\u30b3\u30de\u30f3\u30c9\u3092\u30b9\u30af\u30ea\u30d7\u30c8\u5316\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3055\u3063\u304d\u306f\u3001\u76f4\u6253\u3061\u3057\u3066\u3044\u305f\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u74b0\u5883\u5909\u6570\u306b\u9003\u304c\u3057\u3066\u3042\u3052\u307e\u3059\u3002\u66f4\u306b\u3061\u3087\u3063\u3068\u4e71\u66b4\u3067\u3059\u304c\u8d77\u52d5\u6642\u306b ffmpeg \u306e\u30d7\u30ed\u30bb\u30b9\u3092\u4e00\u65e6\u5168\u90e8\u6bba\u3057\u307e\u3059\u3002\u30ed\u30c3\u30af\u30d5\u30a1\u30a4\u30eb\u3067\u5236\u5fa1\u3059\u308b\u306e\u304c\u4e01\u5be7\u3060\u3068\u304a\u3082\u3044\u307e\u3059\u304c\u3001\u9762\u5012\u306a\u306e\u3067\u3088\u3057\u3068\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-bash\" data-file=\"start.sh\" data-lang=\"Bash\"><code>#!\/bin\/bash \n\nROTATE=180\nBITRATE=512k\nFRATE=15\nRES=720x480\n# RES=1920x1080\n\n\n# kill other instances of ffmpeg\npkill ffmpeg\n\n# start camera server\nffmpeg -f v4l2 -thread_queue_size 8192 -s $RES -i \/dev\/video0 -r $FRATE \\\n    -c:v h264_omx -b:v $BITRATE \\\n    -vf &quot;rotate=$ROTATE*PI\/180&quot; \\\n    -f flv rtmp:\/\/localhost\/live\/stream &gt; \/dev\/null 2&gt;&1 &lt;\/dev\/null&<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u308c\u3092\u547c\u3073\u51fa\u3059 systemd \u30e6\u30cb\u30c3\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u540d\u524d\u306frtmp-camera.service \u3068\u3057\u307e\u3057\u305f\u304c\u597d\u304d\u306a\u3082\u306e\u306b\u5909\u3048\u3066\u69cb\u3044\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ExecStart \u306b \u4e0a\u306e\u30b7\u30a7\u30eb\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u30d5\u30eb\u30d1\u30b9\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002systemd unit \u30d5\u30a1\u30a4\u30eb\u3067\u306f \u30d5\u30eb\u30d1\u30b9\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u305d\u3046\u3067\u306a\u3044\u3068\u30b5\u30fc\u30d3\u30b9\u8d77\u52d5\u6642\u306b\u30a8\u30e9\u30fc\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u30d1\u30b9\u306f\u30b7\u30a7\u30eb\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u4f5c\u6210\u3057\u305f\u5834\u6240\u306b\u9069\u5b9c\u5909\u66f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-systemd\" data-file=\"rtmp-camera.service\" data-lang=\"systemd conf\"><code>[Unit]\nDescription=RTMP camera server with ffmpeg.\n\n[Service]\nExecStart=\/opt\/rtmp\/start.sh\nRestart=always\n#Type=simple\nType=oneshot\nRemainAfterExit=yes\nUser=pi\n\n[Install]\nWantedBy=multi-user.target<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">2024-4-12 Type=oneshot \u306b\u4fee\u6b63\u3057\u3001RemainAfterExit=yes \u3092\u8ffd\u52a0\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">systemctl  \u3067\u6709\u52b9\u306b\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>$ sudo systemctl enable \/opt\/rtmp\/rtmp-camera.service\n$ sudo systemctl daemon-reload\n$ sudo systemctl start rtmp-camera.service<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">daemon-reload \u306f\u3082\u3057\u304b\u3057\u305f\u3089\u4e0d\u8981\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u3068\u306b\u304b\u304f enable \u3057\u305f\u5f8c\u3001\u3061\u3083\u3093\u3068\u8d77\u52d5\u3057\u3066\u3044\u308b\u304b\u78ba\u304b\u3081\u3066\u304f\u3060\u3055\u3044\u3002\u4e0a\u624b\u304f\u52d5\u3044\u3066\u3044\u308c\u3070\u30d6\u30e9\u30a6\u30b6\u3067\u30ab\u30e1\u30e9\u3067\u64ae\u5f71\u3057\u3066\u3044\u308b\u52d5\u753b\u304c\u6d41\u308c\u3066\u3044\u308b\u306f\u305a\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"%25e5%258f%2582%25e8%2580%2583\">\u53c2\u8003<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/iot-plus.net\/make\/raspi\/raspbian-buster-streaming-server-using-ffmpeg-rtmp-nginx\/\">\u8d85\u7c21\u5358! ffmpeg + rtmp + nginx\u3092\u4f7f\u3063\u3066raspberry pi + web\u30ab\u30e1\u30e9\u306e\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u74b0\u5883\u3092\u4f5c\u308b\uff08raspbian buster\u7248\uff09 | IoT PLUS<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/kenzo0107.github.io\/2018\/08\/14\/2018-08-15-ffmpeg-nginx-rtmp-on-raspberrypi\/\">\u5b50\u4f9b\u306e\u7b11\u9854\u3068\u7b11\u3044\u58f0\u3092\u805e\u304f\u70ba\u306b ffmpeg + Nginx + RTMP on RaspberryPI &#8211; \u9577\u751f\u6751\u672c\u90f7Engineers&#8217;Blog<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/zenn.dev\/daddy_yukio\/articles\/405dff05d2956c\">\u3010ffmpeg\u3011\u7c21\u5358\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30ab\u30e1\u30e9\u306e\u4f5c\u308a\u65b9<\/a><br>\u3053\u3053\u306e\u4f8b\u306f\u3001hls \u3067\u306f\u306a\u304f jpg \u753b\u50cf\u3092\u66f4\u65b0\u3057\u7d9a\u3051\u3066\u3044\u308b\u306e\u3067\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304b\u3089\u3059\u308b\u3068 motionJPEG \u5f62\u5f0f\u306b\u306a\u308b\u306e\u3060\u3068\u601d\u3046\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u3053\u3053\u306e\u3068\u3053\u308d\u30ab\u30e1\u30e9\u3067\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u306e\u5b9f\u9a13\u3092\u3044\u308d\u3044\u308d\u3057\u3066\u3044\u308b\u306e\u3067\u3059\u304c\u3001\u4eca\u56de\u306f hls \u30b5\u30fc\u30d0\u306e\u5b9f\u9a13\u3067\u3059\u3002RTMP\u30b5\u30fc\u30d0\u3068\u547c\u3076\u3079\u304d\u306a\u306e\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u304c\u4f55\u3068\u306a\u304f\u3042\u3084\u3075\u3084\u3067\u3059\u3002 \u5185\u5bb9\u7684\u306b\u306f IoT PLUS \u3055\u3093\u306e\u5185\u5bb9\u306e\u307b\u307c\u307e\u3093 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":31,"footnotes":""},"categories":[5],"tags":[8,11,12],"class_list":["post-192","post","type-post","status-publish","format-standard","hentry","category-it","tag-linux","tag-raspberry","tag-sbc"],"_links":{"self":[{"href":"https:\/\/blog.txn.red\/index.php?rest_route=\/wp\/v2\/posts\/192","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.txn.red\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.txn.red\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.txn.red\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.txn.red\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=192"}],"version-history":[{"count":0,"href":"https:\/\/blog.txn.red\/index.php?rest_route=\/wp\/v2\/posts\/192\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.txn.red\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=192"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.txn.red\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=192"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.txn.red\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=192"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}