viernes, 21 de agosto de 2009

Proyecto SCTP-H264

El proyecto completo se baja del SVN con el comando:

$ svn co svn+ssh://218.45.218.150/SCTP-H264/trunk SCTP-H264

- freebsd.makefile es el makefile para FreeBSD, se usa "$ make -f freebsd.makefile"
- include es el directorio con todos los .h llamados por los programas de la carpeta src
- Makefile es para Linux
- scripts es un directorio con herramientas muy utiles al momento de hacer 1 millon de tests, tiene scripts en ruby y shell
- SCTP-H264.conf es un archivo de configuracion para ciertos programas en src
- suj incluye archivos de la libreria libsuj hecha por Horacio y externa al proyecto

En los Makefile's es posible ver todos los ejecutables del proyecto. Ahora lo tengo para que los ejecutables obtenidos queden siempre en la carpeta raiz (SCTP-H264).
La carpeta scripts incluye:
- common.rb: varias clases y funciones que uso en otros scripts de la carpeta
- info.rb: tira informacion de un archivo .h64
- netem.sh: permite hacer la setting de netem simplemente haciendo "sudo netem.sh 50 6" para simular 50ms de RTT y 6% packet loss rate. En suj-uchile51 puse un link simbolico de /sbin/netem a dicho script que permite ahorrarse el .sh al final del comando.
- plot_globecom1.rb: programa en ruby que genera los graficos usados en el primer paper enviado a Globecom usando mi parser
- plot_ieice.rb: idem para el paper de IEICE
- plot.rb: grafica 1 o mas tracefiles usando mi parser
- process.rb: hecho por Horacio para hacer los graficos del primer paper mandado a Globecom
- sctpdump.sh: igual que netem.sh para obtener los .cap o trace files con tcpdump. Filtra todo lo de sctp haciendo "$ sudo sctpdump archivo.cap"
- test_buffer.rb: lo hice en su momento para obtener la diferencia entre la llamada a sctp_send y cuando efectivamente el mensaje salia a la red
- test_rtx.rb: para dejar corriendo muchos test para testear PR con RTX
- test_rtx2.rb: lo usaba despues del anterior para graficar la data obtenida de muchos tests
- test_sender.rb con este parseaba datos de la parte sender
- test_ttl.rb: analogo a test_rtx.rb pero con TTL
- test_ttl2.rb: analogo a test_rtx2.rb pero con TTL

De todos estos scripts, los mas utiles son netem.sh sctpdump.sh y plot.rb. Todos los programas en Ruby mios se puden ejecutar como comando, es decir "$ ./plot.rb" en vez de "$ ruby plot.rb"

En la carpeta include es relevante:
- const.h donde se especifican constantes para las apps, incluyendo el path del archivo de configuracion.
- connection.h es importante porque se especifica la estructura connection_t usada constantemente.
- nal.h: se especifica la estructura NALUnit usada constantemente y ademas es la que se usa para reproducir video, o sea en el player hecho por Felipe.

Ahora describo la carpeta src, que es donde estan todos los programas:

- annexb.c: hecho por Horacio
- buffer.c: maneja lectura y escritura de archivos, hecho por Felipe Lalanne
- config_file.c: hecho por mi, incluye solo la funcion read_config_file() para leer el archivo de configuracion
- connection.c: uno de los mas importantes del proyecto, hecho por todo el grupo. Maneja el envio y recepcion de datos, ademas de las policies de SCTP. Originalmente fue hecho por Felipe como una capa que manejaba la parte de red, asi que maneja tambien UDP y deberia tambien manejar TCP (no lo hace pero lo implementare en Chile).
- h264-parser.c: hecho por Felipe para obteners las NALs de un archivo H.264 raw.
- idrlist.c: pedido por Luis para listar los frames IDR (suponiendo 1 NAL por frame y descartando los SPS y PPS como frames). Es muy simple, la pega real la hacen los parsers de archivos. Es ejecutable (tiene main()).
- logging.c: hecho por Felipe para tirar a salida estandar mensajes de informacion (INFO: ...) y debugging (DEBUG: ...). Ademas estos mensajes quedan siembre en un archivo .log que usualmente tiene el mismo nombre que el ejecutable
- nal.c: ciertas funciones para NALs hecho por Felipe
- nal-queue.c: hecho por Felipe para el player
- packet-queue.c: hecho por Felipe para el player
- parse_file.c: lo hice para parsear un archivo H.264 pero esta medio deprecado
- parse_sctp.c: llamese a este MI parser. Hecho por mi y odiado por Horacio ;)
es para parsear los trace files y tira el resultado a salida estandar, lo cual es leido por algun programa en ruby para graficar. Come mucha memoria y es lento con archivos grandes, pero al parecer funciona. Es ejecutable
- parse_sender.c: hecho por mi, parecido al anterior pero orientado a sacar informacion de un trace file obtenido en la parte sender. Es ejecutable.
- parse_tcp.c: para parsear trace files usando TCP, no usar por el momento, creo que no esta ni terminado. Es ejecutable.
- parse_udp.c: idem para UDP, pero no obtiene informacion de NALs, sino que lo hice para analizar los trace files de FSO de Christian.
- player.c: hecho por Felipe. Reproduce archivos H.264
- receive_file.c: hecho por mi. Un cliente SCTP que recive NALs y las guarda en un archivo que luego es reproducible
- receive_play.c: igual que el anterior pero en vez de guardar en un archivo, reproduce el video. Este es el player de Felipe. Funciona bien la mayoria de las veces y es tolerante a perdida de NALs pues usa las librerias de FFMPEG
- sctp_dump.c: hecho por Horacio
- sctp_play.c:hecho por Horacio
- sctp_send.c: hecho por Horacio
- test_pcap.c: el parser de Horacio. Lo mismo que parse_sctp.c. Es ejecutable.
- test_pqueue.c: lo hice en su momento para testear la libreria de pqueue's de Horacio. Es ejecutable.
- test_receive.c: es el cliente SCTP, el que uso constantemente. Recibe mensajes SCTP y los descarta inmediatamente. Idealmente se usa junto con tcpdump. Escucha en el puerto 30000 siempre pero esto es modificable en el archivo de configuracion. Es ejecutable.
- test_send.c: el enviador que uso constantemente. Todos los parametros los lee del archivo de configuracion, pero es posible especificar la policy por ej: $ test_send --profile="rtx 0.06". Es ejecutable
- udpclient.c: hecho por mi para testear si la perdida especificada con netem era efectivamente esa. Es ejecutable.
- utils.c: un par de funciones miscelaneas usadas en varios programas
- video-decoder.c: hecho por Felipe para parsear y reproducir archivos H.264
- sctp_dump.rb: Hecho por Horacio en Ruby.

1 comentario:

  1. https://docs.google.com/presentation/d/1ALD1LOQeFJtBPUmXBZ2ClqOyGGjoqFqFNtsL3bn6q1M/edit?usp=sharing

    ResponderEliminar