python 从 socket 读取 h264 流, 获取每一帧 binary 数据
时间: 2024-03-01 07:52:36 浏览: 438
h264decoder:基于libav的python h264解码模块
可以使用 Python 中的 `socket` 和 `struct` 库来读取 H264 流并获取每一帧的二进制数据。以下是一个简单的示例代码:
```python
import socket
import struct
# 创建 TCP 连接
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost', 8000))
# 定义 H264 帧的起始码
start_code = b'\x00\x00\x00\x01'
# 初始化帧数据和帧大小
frame_data = bytes()
frame_size = 0
# 读取 H264 流
while True:
# 从 socket 中读取数据
data = sock.recv(1024)
if not data:
break
# 将数据拼接到帧数据中
frame_data += data
# 如果当前帧数据还不足一个完整帧,则继续读取
if len(frame_data) < 4:
continue
# 读取当前帧的大小
frame_size = struct.unpack('>I', frame_data[:4])[0]
# 如果当前帧数据不足完整帧大小,则继续读取
if len(frame_data) < frame_size + 4:
continue
# 获取当前帧的二进制数据
frame_binary = frame_data[4:frame_size+4]
# 打印当前帧的二进制数据
print(frame_binary)
# 将剩余的数据作为下一帧的起始数据
frame_data = frame_data[frame_size+4:]
```
在上述代码中,我们首先创建一个 TCP 连接并连接到指定的服务器和端口。然后,我们定义 H264 帧的起始码为 `b'\x00\x00\x00\x01'`,并初始化帧数据和帧大小为 0。接着,我们使用 `recv()` 方法从 socket 中读取数据,并将数据拼接到当前帧数据中。如果当前帧数据还不足一个完整帧,则继续读取。如果当前帧数据已经包含了一个完整帧,则获取当前帧的二进制数据,并将剩余的数据作为下一帧的起始数据。最后,我们打印了当前帧的二进制数据。
阅读全文