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
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("localhost", 8000))
archi = open("c:\\Users\\Kamaxito\\Desktop\\archivo.bin", "wb")
s.send("GET /video HTTP/1.1\r\n\r\n")
datos = s.recv(1024)
while True:
datos = s.recv(1024)
archi.write(datos)
Elektro H@cker: Usa el botón "Insertar código"
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 ;-)
Hola
Yo también tengo que hacer esto. ¿Podría explicarme paso a paso como has hecho esto?
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("localhost", 8000))
archi = open("c:\\Users\\Kamaxito\\Desktop\\archivo.bin", "wb")
s.send("GET /video HTTP/1.1\r\n\r\n")
datos = s.recv(1024)
while True:
datos = s.recv(1024)
archi.write(datos)
Muchas gracias
Elektro H@cker: Usa el botón "Insertar código"
Cita de: 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?
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("localhost", 8000))
archi = open("c:\\Users\\Kamaxito\\Desktop\\archivo.bin", "wb")
s.send("GET /video HTTP/1.1\r\n\r\n")
datos = s.recv(1024)
while True:
datos = s.recv(1024)
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 :)
Muchas gracias por tu respuesta. :D
¿Y esto como lo ejecuto en ubuntu?
Cita de: Coco88 en 23 Abril 2012, 11:58 AM
¿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 archivoExiste otra opcion y es la de ejecutar directamente
python nombre del archivo
Al ejecutarlo me da este error: :huh:
AttributeError: 'module' object has no attribute 'AF_INET'
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
Hola
¿Estarían correctas las respuestas? Saludos
Hola
¿Alguien sabe como sería el código?
Saludos