{"id":2503,"date":"2026-05-31T17:08:22","date_gmt":"2026-05-31T08:08:22","guid":{"rendered":"https:\/\/remoooo.com\/?p=2503"},"modified":"2026-05-31T17:26:59","modified_gmt":"2026-05-31T08:26:59","slug":"%e5%ae%89%e5%8d%93%e6%89%8b%e6%9c%ba%e5%85%ac%e7%bd%91%e7%9b%91%e6%8e%a7%e6%91%84%e5%83%8f%e5%a4%b4%e6%8e%a8%e6%b5%81","status":"publish","type":"post","link":"https:\/\/remoooo.com\/en\/%e5%ae%89%e5%8d%93%e6%89%8b%e6%9c%ba%e5%85%ac%e7%bd%91%e7%9b%91%e6%8e%a7%e6%91%84%e5%83%8f%e5%a4%b4%e6%8e%a8%e6%b5%81\/","title":{"rendered":"Android phone public network surveillance camera streaming"},"content":{"rendered":"<p class=\"has-text-align-center wp-block-paragraph\"><strong>Security issue: Currently, unauthorized streaming is prevented only by using a random Stream Key.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" data-src=\"https:\/\/remoooo.com\/wp-content\/uploads\/79717a5d9535d4b50ba3d492941ce8b0.png\" alt=\"\" class=\"wp-image-2505 lazyload\"\/><noscript><img decoding=\"async\" width=\"1491\" height=\"1017\" src=\"https:\/\/remoooo.com\/wp-content\/uploads\/79717a5d9535d4b50ba3d492941ce8b0.png\" alt=\"\" class=\"wp-image-2505 lazyload\"\/><\/noscript><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Using an Android phone as a camera, stream the video to remoooo.com via RTMP, and view it via https:\/\/remoooo.com\/webcam with a password.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Android phones stream to the Public Server via RTMP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The server connects to MediaMTX and converts it to an HLS listening address on the local machine.<br>localhost is reverse proxyed to nginx, using HTTPS + Basic Auth, and finally viewed in Browser Viewer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Viewing link: rtmp:\/\/example.com:1935\/ <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In simple terms, the server uses MediaMTX as a media gateway. MediaMTX is responsible for receiving RTMP streams from mobile devices and converting them into HLS streams that can be played in a browser.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">RTMP App:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewbox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#d4d4d433\" stroke=\"#d4d4d44d\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#d4d4d433\" stroke=\"#d4d4d44d\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#d4d4d433\" stroke=\"#d4d4d44d\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#D4D4D4;display:none\" aria-label=\"copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>Protocol: RTMP\nServer URL: rtmp:\/\/example.com:1935\nStream Key: &lt;stream-key>\nVideo Codec: H.264\nAudio Codec: AAC\nResolution: 1280x720\nFPS: 30\nVideo Bitrate: 2000-3000 kbps\nAudio Bitrate: 96-128 kbps\nKeyframe Interval: 2s<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewbox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #DCDCAA\">Protocol:<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">RTMP<\/span><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">Server<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">URL:<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">rtmp:\/\/example.com:1935<\/span><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">Stream<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">Key:<\/span><span style=\"color: #D4D4D4\"> &lt;<\/span><span style=\"color: #CE9178\">stream-ke<\/span><span style=\"color: #D4D4D4\">y&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">Video<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">Codec:<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">H.264<\/span><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">Audio<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">Codec:<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">AAC<\/span><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">Resolution:<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">1280<\/span><span style=\"color: #CE9178\">x720<\/span><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">FPS:<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">30<\/span><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">Video<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">Bitrate:<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">2000<\/span><span style=\"color: #CE9178\">-3000<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">kbps<\/span><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">Audio<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">Bitrate:<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">96<\/span><span style=\"color: #CE9178\">-128<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">kbps<\/span><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">Keyframe<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">Interval:<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #CE9178\">s<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#1E1E1E;color:#c7c7c7;font-size:12px;line-height:1;position:relative\">Bash<\/span><\/div>","protected":false},"excerpt":{"rendered":"<p>\u5b89\u5168\u95ee\u9898\uff1a\u76ee\u524d\u4ec5\u4ec5\u901a\u8fc7\u968f\u673a Stream Key \u9632\u6b62\u672a\u6388\u6743\u63a8\u6d41\u3002 \u7528\u5b89\u5353\u624b\u673a\u4f5c\u4e3a\u6444\u50cf\u5934\uff0c\u901a\u8fc7 RTMP \u63a8\u6d41 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":2505,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[53,1],"tags":[],"class_list":["post-2503","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tech","category-article"],"_links":{"self":[{"href":"https:\/\/remoooo.com\/en\/wp-json\/wp\/v2\/posts\/2503","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/remoooo.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/remoooo.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/remoooo.com\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/remoooo.com\/en\/wp-json\/wp\/v2\/comments?post=2503"}],"version-history":[{"count":1,"href":"https:\/\/remoooo.com\/en\/wp-json\/wp\/v2\/posts\/2503\/revisions"}],"predecessor-version":[{"id":2506,"href":"https:\/\/remoooo.com\/en\/wp-json\/wp\/v2\/posts\/2503\/revisions\/2506"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/remoooo.com\/en\/wp-json\/wp\/v2\/media\/2505"}],"wp:attachment":[{"href":"https:\/\/remoooo.com\/en\/wp-json\/wp\/v2\/media?parent=2503"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/remoooo.com\/en\/wp-json\/wp\/v2\/categories?post=2503"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/remoooo.com\/en\/wp-json\/wp\/v2\/tags?post=2503"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}