一,

最近的一个项目中,需要用python实现摄像头实时视频推流,代码写好后运行程序,始终会报错,说转码不对。

p.stdin.write(frame.tobytes()) 报错

后来查询大量资料,发现是因为pycharm环境下下载的ffmpeg包的版本太低,需要在conda环境下下载最新版本的ffmpeg
下面展示一下实现过程,方便大家学习。
1.首先打开我们的CMD
查询conda版本

conda --version

在这里插入图片描述

2.查看现有虚拟环境

conda info --envs
或者
conda env list

3.创建conda虚拟环境

conda create -name ceshi python=3.9

4.切换到ceshi的虚拟环境里面

conda activate ceshi

在这里插入图片描述

5.查看ceshi环境里面的库

conda list

在这里插入图片描述

下载opencv,和ffmpeg库(opencv库用的是pip)

pip install opencv-python

//ffmpeg库需要使用conda环境下载

conda install ffmpeg

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

二,工程代码
1.进入工程

在这里插入图片描述
2.
在这里插入图片描述
3.
在这里插入图片描述

4.推流代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2023/5/31 19:18
# @Author  : LXL
# @File    : tuiliu.py
import cv2
# subprocess 模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。
import subprocess
# 视频读取对象
cap = cv2.VideoCapture(0)
# 读取一帧
ret, frame = cap.read()
# 推流地址
rtmp = "填写你自己的服务器地址"
# 推流参数
command = ['ffmpeg',
           '-y',
           '-f', 'rawvideo',
           '-vcodec', 'rawvideo',
           '-pix_fmt', 'bgr24',
           '-s', '640*480',  # 根据输入视频尺寸填写
           '-r', '15',
           '-i', '-',
           '-c:v', 'h264',
           '-pix_fmt', 'yuv420p',
           '-preset', 'ultrafast',
           '-f', 'flv',
           rtmp]

# 创建、管理子进程
pipe = subprocess.Popen(command, stdin=subprocess.PIPE)
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))

# 循环读取
while cap.isOpened():
    # 读取一帧
    ret, frame = cap.read()
    if frame is None:
        print('read frame err!')
        continue

    # 显示一帧
    cv2.imshow("frame", frame)
    # 读取尺寸、推流
    img = cv2.resize(frame, size)
    pipe.stdin.write(img.tobytes())
    cv2.waitKey(30)

# 关闭窗口
cv2.destroyAllWindows()

# 停止读取
cap.release()

5.拉流代码

import cv2
image_width = 320
image_height = 240
rtsp_latency = 10
url = "填写你自己的服务器地址"
cap = cv2.VideoCapture(url)
while True:
    ret, frame = cap.read()
    cv2.imshow("laliu", frame)
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

6.成果展示

在这里插入图片描述

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐