2017-06-06 1 views
0

Nous essayons de faire une petite application python qui affiche une vidéo en direct à partir de paquets reniflés en utilisant scapy et ffplay. Cela fait partie de notre projet de recherche de master. L'objectif est de faire une application de preuve de concept qui espionne la vidéo transimitée sur TCP.
Nous avons un script de travail qui écrit dans un fichier .dat, puis nous l'avons lu en utilisant ffplay. Cela fonctionne bien mais a beaucoup de latence et nous pensons que nous pourrions faire mieux: directement le flux dans ffplay sans avoir besoin d'écrire des données brutes dans un fichier.Vidéo en direct à partir de paquets TCP crus

Voici notre scénario:

from scapy.all import * 
import os 

export_dat = open("data.dat", "a") 

def write_packet_raw(packet): 
    export_dat.write(str(packet.getlayer(Raw))) 

def realtime_packet(): 
    p = sniff(iface="wlan0", filter="tcp and (port 5555)", count=5000, prn=write_packet_raw) 

realtime_packet() 
export_dat.close() 

Et puis nous lançons: ffplay -window_title Videostream -framedrop -infbuf -f h264 -i data.dat

Toute idée sur la façon dont nous pouvons y parvenir? Merci.

Répondre

2

Ecrivez en stdout en mode binaire au lieu d'un fichier et acheminez la sortie vers ffplay.

import sys 
sys.stdout.buffer.write(...) 
sys.stdout.flush() 

Ensuite, exécutez comme:

python3 sniff.py | ffplay -f h264 -i -

Le - signifie stdin.

+0

Merci nous avons trouvé notre propre solution, mais c'est à peu près ce que nous avons fait! – benuuts