+
95
-

回答

要使用 Python 录制摄像头和 RTMP 直播流数据并保存为本地 MP4 文件,可以使用 OpenCV 和 FFmpeg。以下是详细的步骤和示例代码:

1. 安装必要的库

首先,确保你已经安装了 OpenCV 和 FFmpeg。可以使用以下命令安装 OpenCV:

pip install opencv-python
2. 使用 OpenCV 录制摄像头视频

以下是使用 OpenCV 录制摄像头视频并保存为 MP4 文件的示例代码:

import cv2

# 设置摄像头
cap = cv2.VideoCapture(0)  # 0表示默认摄像头

# 获取视频帧宽度和高度
frame_width = int(cap.get(3))
frame_height = int(cap.get(4))

# 定义视频编码器和输出文件
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter('output.mp4', fourcc, 20.0, (frame_width, frame_height))

while True:
    ret, frame = cap.read()
    if ret:
        # 写入视频文件
        out.write(frame)

        # 显示视频帧
        cv2.imshow('frame', frame)

        # 按 'q' 键退出
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break

# 释放资源
cap.release()
out.release()
cv2.destroyAllWindows()
3. 录制 RTMP 直播流

要录制 RTMP 直播流,可以使用 FFmpeg 和 subprocess 模块。以下是示例代码:

import subprocess

# 设置 RTMP 流 URL
rtmp_url = 'rtmp://example.com/live/stream'

# 设置输出文件名
output_file = 'rtmp_output.mp4'

# 使用 FFmpeg 录制 RTMP 流
command = [
    'ffmpeg',
    '-i', rtmp_url,
    '-c:v', 'copy',
    '-c:a', 'copy',
    output_file
]

# 执行命令
subprocess.run(command)
4. 组合摄像头和 RTMP 录制

如果你想同时录制摄像头和 RTMP 直播流,可以将两者的代码组合在一起。以下是一个简单的组合示例:

import cv2
import subprocess
import threading

# 摄像头录制函数
def record_camera():
    cap = cv2.VideoCapture(0)
    frame_width = int(cap.get(3))
    frame_height = int(cap.get(4))
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')
    out = cv2.VideoWriter('camera_output.mp4', fourcc, 20.0, (frame_width, frame_height))

    while True:
        ret, frame = cap.read()
        if ret:
            out.write(frame)
            cv2.imshow('frame', frame)
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
        else:
            break

    cap.release()
    out.release()
    cv2.destroyAllWindows()

# RTMP 录制函数
def record_rtmp():
    rtmp_url = 'rtmp://example.com/live/stream'
    output_file = 'rtmp_output.mp4'
    command = [
        'ffmpeg',
        '-i', rtmp_url,
        '-c:v', 'copy',
        '-c:a', 'copy',
        output_file
    ]
    subprocess.run(command)

# 创建线程
camera_thread = threading.Thread(target=record_camera)
rtmp_thread = threading.Thread(target=record_rtmp)

# 启动线程
camera_thread.start()
rtmp_thread.start()

# 等待线程完成
camera_thread.join()
rtmp_thread.join()
注意事项FFmpeg 安装:确保你已经安装了 FFmpeg,并且它在系统的 PATH 中。你可以从 FFmpeg 官方网站 下载并安装。RTMP 流 URL:将 rtmp://example.com/live/stream 替换为实际的 RTMP 流 URL。性能问题:同时录制摄像头和 RTMP 流可能会占用大量系统资源,确保你的系统性能足够支持。

通过以上步骤,你可以使用 Python 录制摄像头和 RTMP 直播流数据,并保存为本地的 MP4 文件。

网友回复

我知道答案,我要回答