Commit a10aa62e authored by agustin's avatar agustin
Browse files

djhjf

parent 8955ad19
......@@ -135,9 +135,11 @@ int main(){
}else {
if (pausado)
cout << "2 - Reanudar Reproduccion" << endl;
else
else{
cout << "3 - Pausar" << endl;
cout << "4 - Finalizar Reproduccion de Video" << endl;
cout << "4 - Finalizar Reproduccion de Video" << endl;
}
}
cout << "5 - Salir" << endl;
......
......@@ -26,19 +26,23 @@ using namespace std;
#define FINALIZAR 4
#define SALIR 5
struct parametros{
//int id_cliente;
int id_cliente;
Mat frame;
VideoCapture cap;
vector<uchar> encoded;
sockaddr_in addr_destinoudp;
int pTCPcliente; //recivo msj tcp
//int *comunicacion;
int *comunicacion;
int socket_de_clienteUDP; //evido msj udp
};
void* streamVideo(void*);
void* controlVideo(void*);
pthread_mutex_t pausa = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t finalizar = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int main(){
//Primer paso, definir variables
......@@ -79,7 +83,7 @@ int main(){
vector<uchar> encoded; //vector para almacenar el frame codificado en jpeg
VideoCapture cap("/home/agustin/Descargas/video_prueba.mp4"); //Obtener el video desde archivo.
//Crea una nueva ventana con nombre servidor
namedWindow("servidor", CV_WINDOW_AUTOSIZE);
//namedWindow("servidor", CV_WINDOW_AUTOSIZE);
/*while(true){
cap >> frame;
......@@ -88,6 +92,13 @@ int main(){
}*/
cout << "llegue a hacer video" << endl;
int id_cliente = 1;
int array_com[20] = {INACTIVO};
int *comunicacion = array_com;
pthread_mutex_init(&mutex, NULL);
//Paso5, aceptar conexiones
while(1) {
socklen_t longitud_cliente= sizeof(struct sockaddr_in);
......@@ -132,11 +143,11 @@ int main(){
struct parametros *p= new parametros;
//p->id_cliente= id_cliente;
p->id_cliente= id_cliente;
p->frame= frame;
p->cap= cap;
p->encoded= encoded;
//p->comunicacion=comunicacion;
p->comunicacion=comunicacion;
p->addr_destinoudp= addr_destinoudp;
p->pTCPcliente=pTCPcliente;
p->socket_de_clienteUDP=socket_de_clienteUDP;
......@@ -148,6 +159,7 @@ int main(){
//primitiva CLOSE
close(pTCPcliente);
}
//cvDestroyAllWindows();
close(fd);
}
......@@ -155,58 +167,87 @@ int main(){
void *controlVideo(void* pol){
parametros* p = (parametros*)pol;
//pthread_mutex_init(&finalizar, NULL);
//pthread_mutex_init(&pausa, NULL);
pthread_mutex_init(&finalizar, NULL);
pthread_mutex_init(&pausa, NULL);
pthread_t hilo_stream;
int aux3=pthread_create(&hilo_stream, NULL, streamVideo,(void *)p);
cout<< "Hizo el thread stream"<< endl;
int aux = 1;
char *data_menu = new char;
bool primera=false;
while (aux!=5){
//primitiva RECEIVE
recv(p->pTCPcliente, (void *)data_menu, 1, MSG_WAITALL);
cout << atoi(data_menu) << endl;
//cout << atoi(data_menu) << endl;
aux = atoi(data_menu);
switch (aux){
case 1:
cout<< "Apretaron 1"<< endl;
//pthread_mutex_unlock(&finalizar);
//cout<< "Apretaron 1"<< endl;
pthread_mutex_unlock(&finalizar);
//pthread_mutex_init(&finalizar, NULL);
break;
case 2:
cout<< "Apretaron 2"<< endl;
//pthread_mutex_unlock(&pausa);
pthread_mutex_unlock(&pausa);
break;
case 3:
//a= nombre[10];
cout<< "Apretaron 3"<< endl;
//pthread_mutex_lock(&pausa);
pthread_mutex_lock(&pausa);
break;
case 4:
cout<< "Apretaron 4"<< endl;
//pthread_mutex_lock(&finalizar);
pthread_mutex_lock(&finalizar);
break;
case 5:
cout<< "Apretaron 5"<< endl;
pthread_cancel(hilo_stream);//problema number 3
goto hola;
break;
}
//pthread_mutex_lock(&mutex);
//aux = p->comunicacion[p->id_cliente];
//pthread_mutex_unlock(&mutex);
pthread_mutex_lock(&mutex);
p->comunicacion[p->id_cliente] = aux;
cout << "en control " << aux << endl;
pthread_mutex_unlock(&mutex);
}
pthread_join(hilo_stream, NULL);//problema number 2
//pthread_join(hilo_stream, NULL);//problema number 2
hola:
return 0;
}//termina control
//stream
void *streamVideo(void* pol){
bool fin=false;
parametros* p = (parametros*)pol;
while(true){
pthread_mutex_lock(&mutex);
int estado = p->comunicacion[p->id_cliente];
pthread_mutex_unlock(&mutex);
int tamanio_frame;
int tamanio_video = sizeof(p->cap);
cout <<"aca va a imprimir el tamanio del video" <<tamanio_video << endl;
while(!fin){
pthread_mutex_lock(&pausa);
pthread_mutex_unlock(&pausa);
p->cap >> p->frame; //obtener nuevo frame
imshow("servidor", p->frame); //muestra la imagen en la ventana servidor
if(p->frame.empty()){
VideoCapture capaux("/home/agustin/Descargas/video_prueba.mp4");
p->cap = capaux;
p->cap >> p->frame;
pthread_mutex_lock(&mutex);
p->comunicacion[p->id_cliente] = 1;
pthread_mutex_unlock(&mutex);
}
//imshow("servidor", p->frame); //muestra la imagen en la ventana servidor
waitKey(1000/30); //espera para ver las frames y que se reproduzca el video en el servidor
//convertir la imagen a texto para enviar
......@@ -221,6 +262,22 @@ void *streamVideo(void* pol){
(struct sockaddr*)&p->addr_destinoudp,sizeof(p->addr_destinoudp)
);
pthread_mutex_lock(&mutex);
estado = p->comunicacion[p->id_cliente];
pthread_mutex_unlock(&mutex);
pthread_mutex_lock(&finalizar);
pthread_mutex_unlock(&finalizar);
if (estado == FINALIZAR) {
cout<< "voy a dormir"<<endl;
pthread_mutex_lock(&mutex);
p->comunicacion[p->id_cliente] = 1;
pthread_mutex_unlock(&mutex);
VideoCapture capaux("/home/agustin/Descargas/video_prueba.mp4");
p->cap = capaux;
cout<< "voy a recurrir"<<endl;
}
}
}
......
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