summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Jung <flo@windfisch.org>2014-12-24 00:14:21 +0100
committerFlorian Jung <flo@windfisch.org>2014-12-24 00:14:21 +0100
commit449cf1bbf0df985e43f7ac4f362c961b15ebe5d2 (patch)
tree2f44f0a2280612a0b0e5d6ab1d3e0f3ca81afaa0
parente56c98a450ea5f125b337219787e58d692b9f675 (diff)
video over netwörk :)
-rw-r--r--client2.c75
-rw-r--r--server.py9
2 files changed, 77 insertions, 7 deletions
diff --git a/client2.c b/client2.c
new file mode 100644
index 0000000..d968c9f
--- /dev/null
+++ b/client2.c
@@ -0,0 +1,75 @@
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/socket.h>
+#include <string.h>
+#include <sys/un.h>
+#include <time.h>
+
+#include <opencv2/opencv.hpp>
+
+using namespace cv;
+
+#define SOCKETPATH "/home/flo/uds_socket"
+
+void die(const char* msg){perror(msg); exit(1);}
+void suicide(const char* msg){ fprintf(stderr, "%s\n", msg); exit(1); }
+
+
+
+unsigned char buffer[67108864]; // must be unsigned. because reasons -_-
+
+int read_completely(int fd, void* buf, size_t len)
+{
+ size_t n_read;
+ for (n_read = 0; n_read < len;)
+ {
+ size_t tmp = read(fd, buf, len-n_read);
+ n_read+=tmp;
+ buf = ((char*)buf)+tmp;
+ }
+ return n_read;
+}
+
+int main(int argc, const char** argv)
+{
+ struct sockaddr_un my_sockaddr;
+ my_sockaddr.sun_family=AF_UNIX;
+ strcpy(my_sockaddr.sun_path, SOCKETPATH);
+ int sockaddrlen = strlen(my_sockaddr.sun_path) + sizeof(my_sockaddr.sun_family);
+
+ int sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
+ if (sockfd == -1) die("socket");
+
+
+ if (connect(sockfd, (struct sockaddr*) &my_sockaddr, sockaddrlen) == -1)
+ die("connect");
+
+ time_t t = time(NULL);
+ int nframes=0;
+
+ while (waitKey(1) != 'x')
+ {
+ write(sockfd,"get\n",4);
+ read_completely(sockfd, buffer, 4);
+ int framelen = ((buffer[0]*256+buffer[1])*256+buffer[2])*256+buffer[3];
+ if (framelen > sizeof(buffer)) suicide("buffer too small");
+ read_completely(sockfd, buffer, framelen);
+
+ //Mat dingens=Mat::eye(100,100,CV_8UC1) * 244;
+ Mat dingens(600,1600,CV_8UC3, buffer);
+ imshow("dingens",dingens);
+
+ time_t tmp = time(NULL);
+ if (tmp!=t)
+ {
+ printf("%i FPS\n", (int)(nframes / (tmp-t)));
+ nframes=0;
+ t=tmp;
+ }
+ nframes++;
+ }
+
+ close(sockfd);
+ return 0;
+}
diff --git a/server.py b/server.py
index 819d88d..a74495f 100644
--- a/server.py
+++ b/server.py
@@ -37,19 +37,14 @@ while True:
# Receive the data in small chunks and retransmit it
while True:
data = connection.recv(16)
- print >>sys.stderr, 'received "%s"' % data
if data:
if data=="get\n":
status, frame = cap.read()
framestr = frame.tostring()
lenframestr=len(framestr)
- print hex(lenframestr)
- for i in xrange(0,4):
- print hex(ord(encode_int(lenframestr)[i]))
- print 'sending ',lenframestr,' bytes to the client'
connection.sendall(encode_int(lenframestr)+framestr);
- cv2.imshow("img",frame)
- cv2.waitKey(20)
+ #cv2.imshow("img",frame)
+ #cv2.waitKey(1)
else:
print >>sys.stderr, 'no more data from', client_address
break