Syma X5SW의 FPV 카메라를 PC에서 보기
htp //192.168.1.1/레쿠에 st_a v. c기 방문
var id=40463458;
부분의 숫자를 기억합니다. h tp // 192. 168. 1. c기? 우세 r = 아 d 민 & pwd = & 이 d = 40463458 방금 기억 한 ID와 동일한 ID를 URL에 넣고 액세스
admin
이고 암호는 비어 있습니다 보기
이것을 수동으로 하는 것은 번거롭기 때문에, JSONP(되돌아가기)와 iframe으로 Same origin policy를 회피하면서 표시할 수 있도록 했다. 이하의 HTML을 로컬에 보존해 Firefox라든지로 열면, 리얼타임 중계를 볼 수 있다.
<!DOCTYPE html>
<body onLoad="start()">
<script src="http://192.168.1.1/request_av.cgi"></script>
<script>
function start(){
console.log(id);
document.getElementById("fpv").src = "http://192.168.1.1/Videostream.cgi?User=admin&pwd=&id="+id;
}
</script>
<iframe src="" id="fpv" width="640" height="480" style="border:none;overflow:hidden;" scrolling="no"></iframe>
</body>
복수 접속은 할 수 있지만, 연결하면 연결할수록 반드시 무거워진다.
Digest 인증을 요구할 때는 사용자명 admin
로 패스워드는 공백으로 한다.
디스플레이 릴레이
from http.server import HTTPServer, BaseHTTPRequestHandler
from socketserver import ThreadingMixIn
import threading
import urllib.request # high-level http client
import re
import http.client # low-level http client for continuous stream
BUFSZ = 1024
HOST="192.168.1.1"
PORT="80"
url_reqav = "http://{0}:{1}/request_av.cgi?User=admin&pwd=".format(HOST,PORT)
url_reqvs = "/Videostream.cgi?User=admin&pwd=&id={0}"
id_pat = re.compile("\d+")
# 1対1 ブラウザ <=> ドローン
# 接続の例
class Handler(BaseHTTPRequestHandler):
def do_GET(self):
with urllib.request.urlopen(url=url_reqav) as resp:
id_line = resp.readlines()[1].decode("utf8")
self.id_num = id_pat.search(id_line).group(0)
self.send_response(200)
self.send_header('Content-type', 'multipart/x-mixed-replace;boundary=ipcamera')
self.end_headers()
buf = bytearray(BUFSZ)
con = http.client.HTTPConnection("{0}:{1}".format(HOST,PORT))
con.request("GET",url_reqvs.format(self.id_num))
resp = con.getresponse()
while not resp.closed:
buf = resp.read(BUFSZ)
self.wfile.write(buf)
class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
"""Handle requests in a separate thread."""
if __name__ == '__main__':
server = ThreadedHTTPServer(('localhost', 8080), Handler)
print ('Starting server, use <Ctrl-C> to stop')
server.serve_forever()
진짜는 중계하는 대로에 보존도 하고 싶다. 이를 위해서는 환형 버퍼를 구현할 필요가 있다고 생각합니다.
추가
파이썬을 사용하지 않고 wget과 원래의 C 언어로 만든 MJPEG 스플리터를 사용하면 VLC에서 실시간으로 보면서 저장할 수 있습니다. 아래 참조.cc -O3 separate.c
로 컴파일하고 bash syma.sh
를 실행합니다.
디버그 부족으로 한번 눈은 비치지 않기 때문에 닫아 다시 시도하는 것.
htps : // 기 st. 기주 b. 코 m / 케이야 / cb9 2901 ~ c1 813c634
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_FRAME_SIZE 256*1024 // KB
#define CONTENT_LENGTH "Content-Length: "
#define PAYLOAD "\r\n"
int main()
{
char buf[MAX_FRAME_SIZE];
//size_t rs = fread(buf, MAX_FRAME_SIZE, 1, stdin);
// parse content-length
int length;
int seq = 0;
while (1) {
while( fgets(buf, MAX_FRAME_SIZE, stdin) != NULL )
{
char *length_start = strstr(buf,CONTENT_LENGTH);
if (length_start == NULL) continue;
char *length_end = strstr(length_start,"\r\n");
int tmp = *length_end;
*length_end = 0;
length_start += strlen(CONTENT_LENGTH);
*length_end = tmp;
length = atoi(length_start);
break;
}
while( fgets(buf, MAX_FRAME_SIZE, stdin) != NULL )
{
// parse body
char *payload = strstr(buf,PAYLOAD);
if (payload != buf) continue; // if not start with "\r\n"
break;
}
if (fread(buf,length,1,stdin) == 0) break;
fwrite(buf,length,1,stdout);
char fname[16];
snprintf(fname,15,"%05d.jpg",seq++);
FILE *out = fopen(fname,"w");
fwrite(buf,length,1,out);
fclose(out);
}
}
PARSER="$HOME/hgfs/Dropbox/symafpv/a.out"
HOST="http://192.168.1.1:80"
DATE=`date +%F_%T`
mkdir -p $DATE
cd $DATE
ID=`wget -q -O - "$HOST/request_av.cgi?User=admin&pwd=" | grep "var id=" | grep -o -P "[0-9]+"`
wget -q -O - "$HOST/Videostream.cgi?User=admin&pwd=&id=$ID" | $PARSER | vlc /dev/stdin
avconv -framerate 15 -i %05d.jpg -codec copy encoded15.mov
rm *.jpg
Reference
이 문제에 관하여(Syma X5SW의 FPV 카메라를 PC에서 보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/keiya/items/871a07e92e578301efd0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<!DOCTYPE html>
<body onLoad="start()">
<script src="http://192.168.1.1/request_av.cgi"></script>
<script>
function start(){
console.log(id);
document.getElementById("fpv").src = "http://192.168.1.1/Videostream.cgi?User=admin&pwd=&id="+id;
}
</script>
<iframe src="" id="fpv" width="640" height="480" style="border:none;overflow:hidden;" scrolling="no"></iframe>
</body>
from http.server import HTTPServer, BaseHTTPRequestHandler
from socketserver import ThreadingMixIn
import threading
import urllib.request # high-level http client
import re
import http.client # low-level http client for continuous stream
BUFSZ = 1024
HOST="192.168.1.1"
PORT="80"
url_reqav = "http://{0}:{1}/request_av.cgi?User=admin&pwd=".format(HOST,PORT)
url_reqvs = "/Videostream.cgi?User=admin&pwd=&id={0}"
id_pat = re.compile("\d+")
# 1対1 ブラウザ <=> ドローン
# 接続の例
class Handler(BaseHTTPRequestHandler):
def do_GET(self):
with urllib.request.urlopen(url=url_reqav) as resp:
id_line = resp.readlines()[1].decode("utf8")
self.id_num = id_pat.search(id_line).group(0)
self.send_response(200)
self.send_header('Content-type', 'multipart/x-mixed-replace;boundary=ipcamera')
self.end_headers()
buf = bytearray(BUFSZ)
con = http.client.HTTPConnection("{0}:{1}".format(HOST,PORT))
con.request("GET",url_reqvs.format(self.id_num))
resp = con.getresponse()
while not resp.closed:
buf = resp.read(BUFSZ)
self.wfile.write(buf)
class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
"""Handle requests in a separate thread."""
if __name__ == '__main__':
server = ThreadedHTTPServer(('localhost', 8080), Handler)
print ('Starting server, use <Ctrl-C> to stop')
server.serve_forever()
진짜는 중계하는 대로에 보존도 하고 싶다. 이를 위해서는 환형 버퍼를 구현할 필요가 있다고 생각합니다.
추가
파이썬을 사용하지 않고 wget과 원래의 C 언어로 만든 MJPEG 스플리터를 사용하면 VLC에서 실시간으로 보면서 저장할 수 있습니다. 아래 참조.cc -O3 separate.c
로 컴파일하고 bash syma.sh
를 실행합니다.
디버그 부족으로 한번 눈은 비치지 않기 때문에 닫아 다시 시도하는 것.
htps : // 기 st. 기주 b. 코 m / 케이야 / cb9 2901 ~ c1 813c634
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_FRAME_SIZE 256*1024 // KB
#define CONTENT_LENGTH "Content-Length: "
#define PAYLOAD "\r\n"
int main()
{
char buf[MAX_FRAME_SIZE];
//size_t rs = fread(buf, MAX_FRAME_SIZE, 1, stdin);
// parse content-length
int length;
int seq = 0;
while (1) {
while( fgets(buf, MAX_FRAME_SIZE, stdin) != NULL )
{
char *length_start = strstr(buf,CONTENT_LENGTH);
if (length_start == NULL) continue;
char *length_end = strstr(length_start,"\r\n");
int tmp = *length_end;
*length_end = 0;
length_start += strlen(CONTENT_LENGTH);
*length_end = tmp;
length = atoi(length_start);
break;
}
while( fgets(buf, MAX_FRAME_SIZE, stdin) != NULL )
{
// parse body
char *payload = strstr(buf,PAYLOAD);
if (payload != buf) continue; // if not start with "\r\n"
break;
}
if (fread(buf,length,1,stdin) == 0) break;
fwrite(buf,length,1,stdout);
char fname[16];
snprintf(fname,15,"%05d.jpg",seq++);
FILE *out = fopen(fname,"w");
fwrite(buf,length,1,out);
fclose(out);
}
}
PARSER="$HOME/hgfs/Dropbox/symafpv/a.out"
HOST="http://192.168.1.1:80"
DATE=`date +%F_%T`
mkdir -p $DATE
cd $DATE
ID=`wget -q -O - "$HOST/request_av.cgi?User=admin&pwd=" | grep "var id=" | grep -o -P "[0-9]+"`
wget -q -O - "$HOST/Videostream.cgi?User=admin&pwd=&id=$ID" | $PARSER | vlc /dev/stdin
avconv -framerate 15 -i %05d.jpg -codec copy encoded15.mov
rm *.jpg
Reference
이 문제에 관하여(Syma X5SW의 FPV 카메라를 PC에서 보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/keiya/items/871a07e92e578301efd0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_FRAME_SIZE 256*1024 // KB
#define CONTENT_LENGTH "Content-Length: "
#define PAYLOAD "\r\n"
int main()
{
char buf[MAX_FRAME_SIZE];
//size_t rs = fread(buf, MAX_FRAME_SIZE, 1, stdin);
// parse content-length
int length;
int seq = 0;
while (1) {
while( fgets(buf, MAX_FRAME_SIZE, stdin) != NULL )
{
char *length_start = strstr(buf,CONTENT_LENGTH);
if (length_start == NULL) continue;
char *length_end = strstr(length_start,"\r\n");
int tmp = *length_end;
*length_end = 0;
length_start += strlen(CONTENT_LENGTH);
*length_end = tmp;
length = atoi(length_start);
break;
}
while( fgets(buf, MAX_FRAME_SIZE, stdin) != NULL )
{
// parse body
char *payload = strstr(buf,PAYLOAD);
if (payload != buf) continue; // if not start with "\r\n"
break;
}
if (fread(buf,length,1,stdin) == 0) break;
fwrite(buf,length,1,stdout);
char fname[16];
snprintf(fname,15,"%05d.jpg",seq++);
FILE *out = fopen(fname,"w");
fwrite(buf,length,1,out);
fclose(out);
}
}
PARSER="$HOME/hgfs/Dropbox/symafpv/a.out"
HOST="http://192.168.1.1:80"
DATE=`date +%F_%T`
mkdir -p $DATE
cd $DATE
ID=`wget -q -O - "$HOST/request_av.cgi?User=admin&pwd=" | grep "var id=" | grep -o -P "[0-9]+"`
wget -q -O - "$HOST/Videostream.cgi?User=admin&pwd=&id=$ID" | $PARSER | vlc /dev/stdin
avconv -framerate 15 -i %05d.jpg -codec copy encoded15.mov
rm *.jpg
Reference
이 문제에 관하여(Syma X5SW의 FPV 카메라를 PC에서 보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/keiya/items/871a07e92e578301efd0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)