Commit 22cac5c1 authored by belen's avatar belen
Browse files

compila en la terminal

parent f2c870e8
......@@ -3,7 +3,7 @@
#include <netinet/in.h>
#include <stdlib.h>
#include <stdio.h>
#include <opencv2\opencv.hpp>
#include <opencv2/opencv.hpp>
#include <vector>
#include <array>
#include <pthread.h>
......@@ -26,8 +26,8 @@ struct parametros{
int socket_de_clienteUDP;
};
void stream(parametros);
void menu(parametros);
void* stream(void *);
void* menu(void *);
int main(void){
......@@ -50,13 +50,13 @@ int main(void){
cout << "presione 1 para iniciar la reproduccion del video" << endl;
cin >> aux;
} while (aux == 1);
int send(client_socket, aux, 1, 0);
send(client_socket, (void *) aux, 1, 0);
pthread_t hilo_menu;
struct parametros *p;
p->client_socket= client_socket;
p->socket_de_clienteUDP=0;
int pthread_create(&hilo_menu, NULL, (void *) menu, p);
pthread_create(&hilo_menu, NULL, menu,(void *) p);
// se desplega menu
......@@ -64,7 +64,8 @@ int main(void){
}
void menu(parametros *p){
void *menu(void* pol){
parametros* p = (parametros*)pol;
//abro socket UDP para stream
int socket_de_clienteUDP = socket(AF_INET, SOCK_DGRAM, 0);
//obtenemos la direccion con getaddrinfo
......@@ -76,11 +77,14 @@ void menu(parametros *p){
p->socket_de_clienteUDP=socket_de_clienteUDP;
//ejecuto stream
pthread_t hilo_stream;
int pthread_create(&hilo_stream, NULL, (void*)stream, p);
pthread_create(&hilo_stream, NULL, stream, (void *)p);
bool reproduciendo = true;
bool pausado = false;
char opcion;
char *opcion2;
int opcion;
char *msg;
int msg_size;
do{
cout << "Menu" << endl;
if (!reproduciendo) cout << "1 - iniciar" << endl;
......@@ -91,40 +95,42 @@ void menu(parametros *p){
}
cout << "5 - Salir" << endl;
cin << opcion;
cin >> opcion2;
//primitiva SEND, retorna sent_msg..=-1 error o el numero bytes enviados
opcion=atoi(opcion2);
switch (opcion){
case 1:
char *msg = "1";
int msg_size = strlen(msg);
int sent_msg_size = send(p->client_socket, msg, msg_size, 0);
msg = "1";
msg_size = strlen(msg);
send(p->client_socket, msg, msg_size, 0);
reproduciendo = true;
pausado = false;
break;
case 2:
char *msg = "2";
int msg_size = strlen(msg);
int sent_msg_size = send(p->client_socket, msg, msg_size, 0);
msg = "2";
msg_size = strlen(msg);
send(p->client_socket, msg, msg_size, 0);
pausado = false;
break;
case 3:
char *msg = "3";
int msg_size = strlen(msg);
int sent_msg_size = send(p->client_socket, msg, msg_size, 0);
msg = "3";
msg_size = strlen(msg);
send(p->client_socket, msg, msg_size, 0);
pausado = true;
break;
case 4:
char *msg = "4";
int msg_size = strlen(msg);
int sent_msg_size = send(p->client_socket, msg, msg_size, 0);
msg = "4";
msg_size = strlen(msg);
send(p->client_socket, msg, msg_size, 0);
reproduciendo = false;
break;
case 5:
char *msg = "5";
int msg_size = strlen(msg);
int sent_msg_size = send(p->client_socket, msg, msg_size, 0);
msg = "5";
msg_size = strlen(msg);
send(p->client_socket, msg, msg_size, 0);
pthread_cancel(hilo_stream);
close(socket_de_clienteUDP);
}
......@@ -135,18 +141,19 @@ void menu(parametros *p){
}
void stream(parametros *p){
void *stream(void* pol){
parametros* p = (parametros*)pol;
do {
//primitiva RECEIVE
char* dataV = malloc(MAX_MSG_SIZE);
void* dataV = malloc(MAX_MSG_SIZE);
int dataV_size = MAX_MSG_SIZE;
struct sockaddr_in server_addr2;
socklen_t *server_addr_size2 = sizeof(server_addr2);
socklen_t server_addr_size2 = sizeof(server_addr2);
int received_data_size = recvfrom(
p->socket_de_clienteUDP,
dataV, dataV_size, 0,
(struct sockaddr*)&server_addr2, server_addr_size2
(struct sockaddr*)&server_addr2, &server_addr_size2
);
namedWindow("cliente", CV_WINDOW_AUTOSIZE);
......@@ -158,4 +165,3 @@ void stream(parametros *p){
} while (true);
}
......@@ -3,7 +3,7 @@
#include <netinet/in.h>
#include <stdlib.h>
#include <stdio.h>
#include <opencv2\opencv.hpp>
#include <opencv2/opencv.hpp>
#include <vector>
#include <array>
#include <pthread.h>
......@@ -30,17 +30,19 @@ struct parametros{
Mat frame;
VideoCapture cap;
vector<uchar> encoded;
int &comunicacion[];
sockaddr_in client_addr;
socklen_t client_addr_size;
bool inicializado;
int socket_to_clientTCP;
int *comunicacion;
};
pthread_mutex_t finalizar;
pthread_mutex_t pausa;
pthread_mutex_t mutex;
void streamVideo(parametros);
void controlVideo(parametros);
void* streamVideo(void*);
void* controlVideo(void*);
int main(void)
......@@ -60,12 +62,13 @@ int main(void)
bind(server_socketTCP, (struct sockaddr*)&server_addr, server_addr_size); // le fijo a ese skt, el ip y puerto mio, no a donde mando, no hay conexiones de nada aun.
//se le da identidad/ configura el skt servidor
int comunicacion[20]={INACTIVO}; //para la comunicacion entre cada hilo de un cliente
int aux[20] = {INACTIVO};
int *comunicacion = aux; //para la comunicacion entre cada hilo de un cliente
Mat frame; //array que representa los frames del video
vector<uchar> encoded; //vector para almacenar el frame codificado en jpeg
VideoCapture cap(video.mp4); //Obtener el video desde archivo.
VideoCapture cap("/home/belen/Descargas/video_prueba.mp4"); //Obtener el video desde archivo.
//Crea una nueva ventana con nombre servidor
namedWindow("servidor", CV_WINDOW_AUTOSIZE);
......@@ -116,7 +119,9 @@ int main(void)
p->inicializado=false;
p->socket_to_clientTCP=socket_to_clientTCP;
int pthread_create(&hilo_control, NULL, (void *) controlVideo,p); //separo thread (idcliente, tcp)
int aux2 = pthread_create(&hilo_control, NULL, controlVideo,(void*)p); //separo thread (idcliente, tcp)
......@@ -132,18 +137,19 @@ int main(void)
}//fin servidor
void controlVideo(parametros *p){
void *controlVideo(void* pol){
parametros* p = (parametros*)pol;
pthread_mutex_init(&finalizar, NULL);
pthread_mutex_init(&pausa, NULL);
pthread_t hilo_stream;
int pthread_create(&hilo_stream, NULL, (void *)streamVideo, p);
int aux3=pthread_create(&hilo_stream, NULL, streamVideo,(void *)p);
int aux = 1;
char data;
while (aux != 5){
//primitiva RECEIVE
int recv(p->socket_to_clientTCP, data, 1, MSG_WAITALL);
recv(p->socket_to_clientTCP, (void *)data, 1, MSG_WAITALL);
switch (data){
case 1:
pthread_mutex_unlock(&finalizar);
......@@ -169,7 +175,8 @@ void controlVideo(parametros *p){
pthread_join(hilo_stream, NULL);
}
void streamVideo(parametros *p){
void *streamVideo(void* pol){
parametros* p = (parametros*)pol;
int socket_to_clientUDP;
if (!p->inicializado){
//primitiva SOCKET
......@@ -182,13 +189,13 @@ void streamVideo(parametros *p){
pthread_mutex_lock(&mutex);
int aux = p->comunicacion[p->id_cliente];
pthread_mutex_unlock(&mutex);
int tamaño_frame;
int tamaño_video = sizeof(p->cap);
int tamanio_frame;
int tamanio_video = sizeof(p->cap);
while ( aux != SALIR) { //MIRAR ESTO PARA CORREGIR
int pthread_mutex_lock(&pausa);
int pthread_mutex_unlock(&pausa);
pthread_mutex_lock(&pausa);
pthread_mutex_unlock(&pausa);
//pasar las frames
p->cap >> p->frame; //obtener nuevo frame
......@@ -201,17 +208,17 @@ void streamVideo(parametros *p){
compression_params.push_back(80);
imencode(".jpg", p->frame, p->encoded, compression_params);
const char* data= p->encoded ;
unsigned char* data= p->encoded.data() ;
//SEND
int sent_data_size = sendto(
socket_to_clientUDP,
data, sizeof(p->encoded), 0,
(struct sockaddr*) (p->client_addr),sizeof( p->client_addr)
(struct sockaddr*)&p->client_addr,sizeof( p->client_addr)
);
tamaño_frame += sizeof(p->frame);
if (tamaño_frame == tamaño_video){
tamanio_frame += sizeof(p->frame);
if (tamanio_frame == tamanio_video){
pthread_mutex_lock(&mutex);
int aux = p->comunicacion[p->id_cliente] = 4;
pthread_mutex_unlock(&mutex);
......@@ -236,4 +243,3 @@ void streamVideo(parametros *p){
//primitiva CLOSE
close(socket_to_clientUDP);
}//fin streamVideo
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment