Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: kamaxito en 8 Marzo 2012, 21:54 pm



Título: Diseño de un cliente Streaming - Python
Publicado por: kamaxito en 8 Marzo 2012, 21:54 pm
Buenas!!

Soy nuevo en esto de la programación y más aún en Python, puesto que es mi primer "programa".

Tengo que realizar lo siguiente: Diseño de un cliente de streaming (primera versión del nodo fuente). Una vez que disponemos de un stream continuo de audio y/o vídeo construiremos una aplicación cliente que se conecte con el servidor de streaming instalado en el hito anterior y descarge una copia del stream. Por tanto, hay que construir una aplicación que a partir de la dirección IP del host y el puerto donde Icecast está escuchando, realice una petición en regla. La respuesta por parte de Icecast a dicha petición es lo que más adelante enviaremos a los peers.

Algún manual, nociones o cualquier cosa que me sea de ayuda? Porque no se ni por dónde empezar ...



Bueno, pues por si a alguien le interesa, ésto es lo que he hecho y funciona a las mil maravillas :D

Código
  1. import socket
  2.  
  3. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  4. s.connect(("localhost", 8000))
  5. archi = open("c:\\Users\\Kamaxito\\Desktop\\archivo.bin", "wb")
  6. s.send("GET /video HTTP/1.1\r\n\r\n")
  7. datos = s.recv(1024)
  8. while True:
  9.    datos = s.recv(1024)
  10.    archi.write(datos)



Elektro H@cker: Usa el botón "Insertar código"


Título: Re: Diseño de un cliente Streaming - Python
Publicado por: kamaxito en 13 Marzo 2012, 10:31 am
Buenas, pues ahora toca enviar un video a un peer que se conecte a la fuente, es decir, a un equipo que se conectará a mi servidor IceCast.

La verdad, no tengo ni idea de cómo hacerlo, solo se que tengo que elegir el protocolo UDP con lo que ello conlleva ...

A ver si alguien se anima y me echa una manita, y no al cuello precisamente  ;-)


Título: Re: Diseño de un cliente Streaming - Python
Publicado por: Coco88 en 20 Abril 2012, 21:40 pm
Hola

Yo también tengo que hacer esto. ¿Podría explicarme paso a paso como has hecho esto?

Código
  1. import socket
  2.  
  3. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  4. s.connect(("localhost", 8000))
  5. archi = open("c:\\Users\\Kamaxito\\Desktop\\archivo.bin", "wb")
  6. s.send("GET /video HTTP/1.1\r\n\r\n")
  7. datos = s.recv(1024)
  8. while True:
  9.    datos = s.recv(1024)
  10.    archi.write(datos)


Muchas gracias



Elektro H@cker: Usa el botón "Insertar código"


Título: Re: Diseño de un cliente Streaming - Python
Publicado por: Runex en 20 Abril 2012, 21:55 pm
Hola

Yo también tengo que hacer esto. ¿Podría explicarme paso a paso como has hecho esto?

Código
  1. import socket
  2.  
  3. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  4. s.connect(("localhost", 8000))
  5. archi = open("c:\\Users\\Kamaxito\\Desktop\\archivo.bin", "wb")
  6. s.send("GET /video HTTP/1.1\r\n\r\n")
  7. datos = s.recv(1024)
  8. while True:
  9.    datos = s.recv(1024)
  10.    archi.write(datos)


Muchas gracias

Paso a paso, te puedo explicar yo más o menos como, pero los sockets poco los he tocado en mi vida xD.

En primer lugar inicia el socket, asignándolo a una variable denominada s.
Luego utiliza el método connect, de socket (s.socket) paáandole como parámetro "localhost", su propio Pc vamos xD y el puerto 8000, igual que le podría haber pasado cualquier otro.

Después abre un archivo en modo lectura y si no me equivoco, que lo más posible es que si, le envia una cadena de texto:  s.send("GET /video HTTP/1.1\r\n\r\n"), el GET no lo había visto por Python aún, si no es en Tkinter :S.

Lo último solamente inicia un bucle infinito, recibiendo datos del socket y guardando en el archivo abierto antes, lo recibido de éste.

Eso es más o menos una vista así por encima, no he podido especificar más porque poco sé de sockets, mejor que te ayude el autor :)

Un saludo :)


Título: Re: Diseño de un cliente Streaming - Python
Publicado por: Coco88 en 23 Abril 2012, 11:58 am
Muchas gracias por tu respuesta.  :D

¿Y esto como lo ejecuto en ubuntu?


Título: Re: Diseño de un cliente Streaming - Python
Publicado por: polmadur en 23 Abril 2012, 17:33 pm

¿Y esto como lo ejecuto en ubuntu?

si no recuerdo mal, para ejecutarlo simplemente debes darle permisos de ejecucion y en la terminal ejecutar el comando

./"nombre del archivo

Existe otra opcion y es la de ejecutar directamente

python nombre del archivo


Título: Re: Diseño de un cliente Streaming - Python
Publicado por: Coco88 en 3 Mayo 2012, 12:43 pm
Al ejecutarlo me da este error:  :huh:

AttributeError: 'module' object has no attribute 'AF_INET'


Título: Re: Diseño de un cliente Streaming - Python
Publicado por: Coco88 en 7 Mayo 2012, 13:15 pm

Estudio de la tasa de pérdida de bloques en tres escenarios diferentes: (1) cuando source y peer se ejecutan en la misma máquina (localhost), (2) cuando lo hacen en la misma red local (preferiblemente a través de WiFi), aunque en máquinas diferentes y finalmente, (3) cuando lo hacen en redes diferentes (por ejemplo, entre dos casas). En cada una de estas tres situaciones, conteste a las preguntas:

-¿Se desordenan en algún momento los bloques de vídeo?, es decir, ¿llegan al peer los paquetes en el mismo orden que fueron enviados?

No tiene confirmación ni control de flujo, por lo que los paquetes pueden adelantarse unos a otros; y tampoco se sabe si ha llegado correctamente, ya que no hay confirmación de entrega o recepción.

-¿Se  pierden  paquetes?  Si  es  así,  ¿a  qué  crees  que  se  debe  dicha pérdida? ¿Existe alguna relación entre la tasa de pérdida de bloque de vídeo (de un determinado vídeo) y su bit-rate?

Este protocolo no está orientado a conexión y si se produce una pérdida de paquetes no se reenvian. Además la perdida de paquetes también se produce por descartes de paquetes que no llegan a tiempo al receptor.

Sin embargo la voz es bastante predictiva y si se pierden paquetes aislados se puede recomponer la voz de una manera bastante óptima. El problema es mayor cuando se producen pérdidas de paquetes en ráfagas.

Para evitar la pérdida de paquetes una técnica muy eficaz en redes con congestión o de baja velocidad es no transmitir los silencios. Gran parte de las conversaciones están llenas de momentos de silencio. Si solo transmitimos cuando haya información audible liberamos bastante los enlaces y evitamos fenómenos de congestión.
De todos modos este fenómeno puede estar también bastante relacionado con el jitter y el jitter buffer.

¿Algo más que añadir??

Saludos


Título: Re: Diseño de un cliente Streaming - Python
Publicado por: Coco88 en 21 Mayo 2012, 12:35 pm
Hola

¿Estarían correctas las respuestas? Saludos


Título: Re: Diseño de un cliente Streaming - Python
Publicado por: Coco88 en 28 Mayo 2012, 13:11 pm
Hola

¿Alguien sabe como sería el código?

Saludos