通过 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 流的主要内容,如果未能解决你的问题,请参考以下文章

FFmpeg 无法解码 H264 流/帧数据

从wireshark抓包分析rtmp协议,并提取出H264视频流

OpenCV 流使用 H264 (mp4) 编解码器捕获 CAM

如何分辨h264和h265

GB28181 PS流解析

(转)MP4文件两种格式AVC1和H264的区别及利用FFMPEG demux为h264码流事项