Vous êtes sur la page 1sur 5

Roteiro de uso do Evalvid

Introduo:

Esse tutorial ir mostrar as etapas para a realizao dos experimentos do projeto. O procedimento
inicia pela obteno de vdeos em formato yuv, seguido pela codificao para MPEG, suavizao
do vdeo, simulao de uma transmisso no NS2 e por ltimo avaliao da qualidade.

Obteno do vdeo:

A captura o vdeo pode ser feita utilizando uma webcam:


luvcview -S -f yuv -s 352x288 -i 30
O formato destino YUV, 4:2:2.
A sada ordenada, no formato YUYV
-s 352x288: A resoluo de 352x288 (CIF).
-i 30: A taxa de quadros de 30fps.

Obs: Esse procedimento de captura s vlido para cmeras com suporte a USB video device class
(UVC), nos testes foi utilizado a webcam Logitech c920.

Exemplos de vdeos em formato yuv podem ser obtidos na pgina de


http://laplace.eletrica.ufpr.br/videos.html
Cuidado: Nem todos os vdeos esto no formato YUV 4:2:0 (como no exemplo coastguard_cif), isso
altera alguns comandos de converso.
Preparao do vdeo:

Nesse exemplo sero utilizados 2 vdeos yuv:


coastguard_cif.yuv: Vdeo yuv descompactado do link
http://laplace.eletrica.ufpr.br/videos/coastguard_cif.7z no formato 4:2:0.
stream.yuv: Vdeo yuv capturado da webcam no formato 4:2:2 (somente utilizado em etapas
adicionais, onde difere-se do coastguard_cif.yuv).

Convertendo o vdeo:
ffmpeg -s tamanho -i video_entrada.yuv video_saida.m4v
Exemplo: ffmpeg -s cif -r 30 -f rawvideo -vcodec rawvideo -pix_fmt yuv420p -i coastguard_cif.yuv
-vcodec libx264 -g 12 -bf 2 coastguard_cif.m4v

# O gop configurado (12,2)


# O comando -r define a taxa de quadros (30fps).
-pix_fmt yuv420p : Formato de pixel utilizado: As opes mais comuns para essa aplacao so:
yuv420p yuyv422
Ateno: a primeira opo -vcodec refere-se ao arquivo de entrada. A segunda opo -vcodec
refere-se ao arquivo de sada. A ordem dos parmetros muito importante. Por exemplo, se os
parmetros -g e -bf forem colocados antes do parmetro -i, eles sero ignorados. Mais informaes
sobre o ffmpeg e converses de vdeo: http://laplace.eletrica.ufpr.br/ffmpeg.html
http://ffmpeg.org/ffmpeg.html

Como resultado ser obtido um vdeo no formato .m4v

Obtendo arquivo .mp4 com hint track:


A hint track descreve como os frames sero distribudos em pacotes para a transmisso do vdeo em
RTP (cabealho).
Pode ser obtida atravs do MP4Box

MP4Box -hint -mtu 1024 -fps 30 -add arquivo_entrada.m4v arquivo_saida.mp4


Exemplo: MP4Box -hint -mtu 1024 -fps 30 -add coastguard_cif.m4v coastguard_cif.mp4
-hint: Cria o hint track e adiciona ao arquivo final.
-mtu 1024: Determina o tamanho mximo de cada pacote, no caso 1024 bytes.
-fps 30: Define a quantidade de quadros por segundo em 30.
-add: Adiciona a track de vdeo arquivo_entrada.m4v no arquivo final.

Criao do vdeo de referncia:

Volta para o formato YUV. A comparao do original com a referncia vai indicar a perda de
qualidade com a codificao (como parte da qualidade do vdeo final ser perdida na codificao
e outra parte na transmisso, essa etapa cria uma referncia aps a converso do vdeo para uma
futura comparao separada entre perdas de codificao e transmisso).
O padro do ffmpeg ser o formato planar 420, por exemplo ==> YYYYYY... UUU... VVV (para cada
frame),
por isso preciso cuidado para converter para o mesmo formato do original.

ffmpeg -i entrada.mp4 -pix_fmt formato_yuv ref_saida.yuv


Ex: ffmpeg -i coastguard_cif.mp4 -pix_fmt yuv420p ref_conv_coastguard_cif.yuv

# Dica: use o aplicativo vooya (http://www.offminor.de/) para observar os dois vdeos.


# use o mesmo aplicativo para calcular o PSNR
# Observe que quanto maior o valor do PSNR maior a semelhana entre as imagens.
# Observe tambm o valor do MSE
# (Abra os dois arquivos ao mesmo tempo selecionando com CTRL na opo File->Open)

vooya
Para abrir o vooya pelo terminal.
------
Sem alterar a qualidade, transformaremos os vdeos YUV para 422 plano (porque o aplicativo psnr
est esperando um YUV no formato plano).
Desnecessrio caso o vdeo j esteja no formato plano (alguns vdeos do exemplo), necessrio caso
seja uma captura da webcam (utilizando o mtodo descrito no comeo).
ffmpeg -s cif -r 30 -pix_fmt yuyv422 -i stream.yuv -pix_fmt yuv422p stream422P.yuv
------

Calcular o PSNR de todas as imagens do vdeo. Isto um teste que vai indicar a perda de qualidade
causada pela codificao em H.264
psnr largura altura formato_yuv video_original.yuv video_referencia.yuv
Ex: psnr 352 288 420 coastguard_cif.yuv ref_conv_coastguard_cif.yuv
352: largura em pixels.
288: altura em pixels.
420: formato do yuv.

Calcular a qualidade com a mtrica de SSIM


psnr 352 288 422 coastguard_cif.yuv ref_conv_coastguard_cif.yuv ssim

Utilizao do Evalvid:
O Evalvid est disponvel para os usurios com conta nesse servidor na pasta: /opt/evalvid
Caso deseje fazer uma instalao local, possvel baix-lo em: http://www2.tkn.tu-
berlin.de/research/evalvid/

Gerando o trace do vdeo:


Uma das maneiras para implementar a simulao da transmisso de vdeo transformar o trfego de
pacotes gerado pelo CODEC de vdeo em um arquivo de trace para o NS2.
Neste caso, o CODEC no ser capaz de se adaptar s condies da rede.
Para implementar esta alternativa, necessrio criar o arquivo de trace no formato aceito pelo NS.
Para obter o arquivo representando o trfego criado pelo CODEC, possvel utilizar o aplicativo
mp4trace localizado, por padro, na mesma pasta do evalvid

Primeiro abriremos um software para captura dos pacotes enviados (nesse exemplo, o tcpdump)
(desnecessrio caso deseja-se utilizar o NS-2 na simulao):
Ateno: no Unix voc precisa ser administrador para rodar o TCPDUMP (executar com sudo).
tcpdump -B 1000000 -n -tt -v udp port 12346 > sd_arquivo_saida
Exemplo: tcpdump -B 1000000 -n -tt -v udp port 12346 > sd_coastguard

Se for o caso de haver um receptor real, rode o TCPDUMP no receptor tambm, com o comando a
seguir (desnecessrio caso deseja-se utilizar o NS-2 na simulao):
tcpdump -B 1000000 -n -tt -v udp port 12346 > coastguard &

Transmisso pelo mp4trace (Necessrio mesmo se utilizar o NS-2 na simulao):


./mp4trace -f -s ufpr.br porta video.mp4 > st_trace
Exemplo: ./mp4trace -f -s ufpr.br 12346 coastguard_cif.mp4 > st_coastguard
Onde video.mp4 o vdeo de entrada
ufpr.br um host qualquer que aceite conexes UDP.
trace.st o arquivo trace de sada.

No esquea de matar o tcpdump(desnecessrio caso deseja-se utilizar o NS-2 na simulao):


sleep 2
x=`ps -ef|grep "tcpdump"|grep -v "grep"|awk '{print $2}'
sudo kill -2 $x

Simulao simples de rede (desnecessrio caso deseja-se utilizar o NS-2 na simulao):


touch rd_video
eg sd rd st AWGN BER
Exemplo: eg sd_coastguard rd_coastguard st_coastguard AWGN 100000
sd: arquivo gerado pelo tcpdump.
rd: aqruivo que ser "gerado" nessa etapa.
st: arquivo gerado pelo mp4trace.
AWGN: Additive white Gaussian noise.
BER: bit-error rate (1/BER),inverso da porcentagem mdia de erros ex: A cada 100000 bits transmitidos,
em mdia 1 ser perdido.
Importante: o arquivo rd ainda no existe, o programa no tem capacidade de cri-lo, apenas de
edio, portanto deve ser criado um arquivo vazio com o nome a ser utilizado (no exemplo usamos o
comando touch), Ex: touch rd_coastguard

Simulao transmisso pelo NS-2:


Adaptando o trace do vdeo:
Para transformar o arquivo de sada do MP4TRACE no formato aceito pelo NS2, pode ser utilizado o
programa transforma trace (Cdigo fonte)
Exemplo de uso.
./transforma nome-arquivo-entrada nome-arquivo-saida
Ex: ./transforma st_coastguard coastguard_cif.trace

Onde st_coastguard o arquivo gerado pelo MP4TRACE


e coastguard.trace o arquivo de sada que ser usado no NS2.

Simulando pelo NS2:


Dependendo do tipo de simulao, ser necessrio um script Otcl diferente contendo as
configuraes desejadas para a simulao.
Nesse caso tais configuraes devem conter informaes sobre o arquivo trace gerado
anteriormente e que ser utilizado na simulao.
Um exemplo geral de utilizao do ns2:
ns script.tcl
Onde script.tcl o script Otcl que contem as configuraes desejadas na simulao, e ser
executado pelo NS2.

Exemplo de script Otcl com trace de vdeo: Baixar exemplo3.tcl


Onde o arquivo de trace de entrada ser:
coastguard_cif.trace

Mais exemplos e um melhor detalhamento podem ser obtidos na pgina: ns2.html

Extraindo dados do out.tr:


Alguns arquivos necessrios para a reconstruo do vdeo podem ser extraidos do arquivo out.tr do
NS-2:
Para isso utilizaremos o script converte_out_ns2.sh que deve ser editado com os parmetros
desejados:
./converte_out_ns2.sh

Reconstruo do vdeo:
A reconstruo ser feita pelo etmp4 (Evaluate Traces of MP4-file transmission) e possivelmente
gerar um arquivos de vdeo corrompido devido perda de frames.
./etmp4 -f -0 sd rd st video.mp4 video_remontado
Ex: ./etmp4 -f -0 sd_coastguard_cif rd_coastguard_cif st_coastguard coastguard_cif.mp4
coastguard_remontado.mp4 200
sd: sender dump, gerado pelo converte_out_ns2.sh ou tcpdump.
rd: receiver dump, gerado pelo converte_out_ns2.sh ou tcpdump.
st: sender trace, arquivo gerado pelo MP4TRACE.
-f: preenche os frames perdidos com zero.
-0: truncando os frames perdidos. -p: preenche os pacotes perdidos com zero.
Obs. Ao final, o 200 indica o tempo atraso mximo do pacote, dado em milisegundos. Caso o atraso
ultrapasse este valor, ele ser considerado perdido na remontagem.

Transformando para o formato .yuv : Simples converso do coastguard_out.mp4 para yuv (para
comparao com o original).
ffmpeg -i coastguard_out.mp4 coastguard.yuv
Devido a perda de pacotes simulados na transmisso, alguns erros nessa converso sero normais.

Calculando PSNR:
./psnr largura altura formato_yuv yuv_referencia yuv_remontado > saida_psnr.txt
Exemplo: ./psnr 352 288 420 coastguard_cif.yuv coastguard_out.yuv > coastguard_cif_psnr.txt

Calculando o ndice de similaridade estrutural (SSIM, Structural SIMilarity):


./psnr largura altura formato_yuv yuv_referencia yuv_remontado ssim
Exemplo: ./psnr 352 288 420 coastguard_cif.yuv coastguard_out.yuv ssim

Calculando MOS :
mos pasta psnr_referencia.txt > mos.txt
Ex: mos /work ref_psnr.txt > mos.txt
pasta: pasta que contm os arquivos psnr*.txt
ref_psnr.txt: psnr do vdeos de referncia.
mos.txt: arquivos de sada.