来自原始tcp数据包的实时视频

时间:2017-06-06 15:42:40

标签: python video tcp ffmpeg scapy

我们正在尝试制作一个小型python应用,使用scapyffplay显示来自嗅探数据包的实时视频。这是我们硕士学位研究项目的一部分。我们的目标是制作一个概念验证应用,它可以监视通过tcp传输的视频 我们有一个工作脚本写入.dat文件,然后我们使用ffplay读取它。它工作正常,但有很多延迟,我们认为我们可以做得更好:直接将其流式传输到ffplay,而无需在文件中写入原始数据。

这是我们的剧本:

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()

然后我们启动:ffplay -window_title Videostream -framedrop -infbuf -f h264 -i data.dat

关于我们如何实现这一目标的任何想法?感谢。

1 个答案:

答案 0 :(得分:2)

以二进制模式而不是文件写入stdout并将输出传递给ffplay

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

然后运行它:

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

-表示stdin