通过 TCP 查看 h264 流
Posted
技术标签:
【中文标题】通过 TCP 查看 h264 流【英文标题】:Viewing h264 stream over TCP 【发布时间】:2016-09-25 05:33:02 【问题描述】:我有一个用于无人机的小型基于 wifi 的 FPV 摄像头。我已经设法让它可以使用 python 下载和保存 h264 文件。
TCP_IP = '193.168.0.1'
TCP_PORT = 6200
BUFFER_SIZE = 2056
f = open('stream.h264', 'wb')
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((TCP_IP,TCP_PORT))
while True:
data = sock.recv(BUFFER_SIZE)
f.write(data)
print("Writing")
sock.close()
f.close()
我现在一直在尝试做的是播放流。我找到了流,我可以下载它并保存它,但现在我想实时打开它。 我尝试过使用 VLC 的“开放网络流”和多种选项,但似乎都不起作用。
【问题讨论】:
【参考方案1】:我使用成功输出到 mplayer
data = sock.recv(BUFFER_SIZE)
sys.stdout.buffer.write(data)
然后让 mplayer 管道输入
python cam.py - | mplayer -fps 20 -nosound -vc ffh264 -noidx -mc 0 -
【讨论】:
您好!我正在尝试从 h.264 流中读取数据包,并偶然发现了您的回复。不幸的是,使用“sys.stdout.buffer.write”会导致错误:“AttributeError: 'file' object has no attribute 'buffer'”。有什么建议吗? 我几乎不记得了,但是您需要将脚本中的数据发送到 shell,如果您只是从 bash 运行 python 脚本,您应该能够写入缓冲区。【参考方案2】:这是一个简单的方法,是的:发送H.264 NALU流(你在每个nal单元前加上0,0,0,1前缀就可以了)。
如果您想要更酷的东西,那么您可以将打包添加到 RTP 并通过多播发送。它将相当简单的编码和易于阅读。
【讨论】:
以上是关于通过 TCP 查看 h264 流的主要内容,如果未能解决你的问题,请参考以下文章
从wireshark抓包分析rtmp协议,并提取出H264视频流