来自原始 tcp 数据包的实时视频
Live video from raw tcp packets
我们正在尝试制作一个小型 python 应用程序,它使用 scapy
和 ffplay
从嗅探数据包中显示实时视频。这是我们硕士学位研究项目的一部分。目标是制作一个监视通过 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
关于我们如何实现这一点有什么想法吗?谢谢。
以二进制模式而不是文件写入 stdout
,并将输出通过管道传输到 ffplay
。
import sys
sys.stdout.buffer.write(...)
sys.stdout.flush()
然后运行它喜欢:
python3 sniff.py | ffplay -f h264 -i -
-
表示stdin
。
我们正在尝试制作一个小型 python 应用程序,它使用 scapy
和 ffplay
从嗅探数据包中显示实时视频。这是我们硕士学位研究项目的一部分。目标是制作一个监视通过 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
关于我们如何实现这一点有什么想法吗?谢谢。
以二进制模式而不是文件写入 stdout
,并将输出通过管道传输到 ffplay
。
import sys
sys.stdout.buffer.write(...)
sys.stdout.flush()
然后运行它喜欢:
python3 sniff.py | ffplay -f h264 -i -
-
表示stdin
。