编辑
2024-08-31
python
00

目录

24小时无人直播
本次环境
摄像头准备
B战直播工具配置
直播效果

24小时无人直播

本次环境

硬件环境

  1. 一个支持RTSP的网络摄像头
  2. 一台windows电脑
  3. windows能访问RTSP摄像头

软件环境

  1. python3.11.4(python基本开发环境)
  2. 哔哩哔哩直播姬(B站下载后安装)
  3. pycharm编辑器
  4. B站账户

摄像头准备

准备一个RTSP摄像头,本人淘宝买了一个4k的工业网络摄像头,一两百块,找一个合适的地方安装好,看我的

1111111.jpg 摄像头厂商有基本的代码跟工具管理摄像头,案例代码:

python
# coding: utf8 import datetime import os import time import cv2 class Camera: def __init__(self, s): self.cap = cv2.VideoCapture(s) # camera_status = self.check_camera_status() # if camera_status is False: # print("摄像头不在线,获取失败!") # return # else: # print("摄像头在线,应该没问题!!") def check_camera_status(self): if self.cap.isOpened(): return True else: return False def save_camera_stream(self, output_dir): print("开始存视频") if not self.cap.isOpened(): print("无法连接到IP摄像机,请检查URL及网络连接。") exit() # 获取视频的基本信息 frame_width = int(self.cap.get(cv2.CAP_PROP_FRAME_WIDTH)) frame_height = int(self.cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) frame_rate = self.cap.get(cv2.CAP_PROP_FPS) if frame_rate <= 0: frame_rate = 30 # 如果无法获取帧率,默认为 30 recording = False # 录制状态标志 record_timer = 0 # 录制计时器 codec = cv2.VideoWriter_fourcc(*"XVID") # 使用 XVID 编码器 video_writer = None # 视频写入对象 start_time = time.time() # 开始时间 while True: # 循环读帧 ret, frame = self.cap.read() if not ret: print("无法读取视频帧,请检查摄像头设备及连接。") break current_time = time.time() # 当前时间 # print(video_writer is None) # print(current_time - start_time) if video_writer is None or (current_time - start_time >= 300): if video_writer is not None: video_writer.release() timestamp = datetime.datetime.now().strftime('%Y%m%d_%H%M%S') output_file = os.path.join(output_dir, f"video_{timestamp}.avi") video_writer = cv2.VideoWriter(output_file, codec, frame_rate, (frame_width, frame_height)) start_time = current_time video_writer.write(frame) # # recording = True # 开始录并且标记为记录状态 # record_timer = 0 # 开始录的时间 # video_filename = f"recording" + str(time.time_ns()) + ".avi" # video_writer = cv2.VideoWriter(video_filename, cv2.VideoWriter_fourcc(*"XVID"), 25.0, # (frame.shape[1], frame.shape[0])) # print(f"开始录制视频:{video_filename}") # # if not recording: # # recording = True # # record_timer = 0 # # video_filename = f"recording.avi" # # video_writer = cv2.VideoWriter(video_filename, cv2.VideoWriter_fourcc(*"XVID"), 25.0, (frame.shape[1], frame.shape[0])) # # print(f"开始录制视频:{video_filename}") if __name__ == '__main__': camera = Camera("rtsp://admin:Jing.jianqian@192.168.1.20:554/stream0") camera.save_camera_stream('H://camera//')

B战直播工具配置

以前是可以在B站开播的,后面改成1000粉丝才可以,因为我的账户没粉丝,所以需要哔哩哔哩直播姬工具,粉丝多的直接在B站管理后台开播后获取地址即可

直播姬配置 打开直播姬,添加素材,选择,

image.png

直播代码案例

提示

bilibili_url 是直播姬的信息,服务器加推流码,看图上我的地址rtmp://192.168.18.1:1935/livehime

image.png

代码OpenAi写的, 我改了改🙄

python
import cv2 import subprocess # RTSP URL rtsp_url = 'rtsp://admin:Jing.jianqian@192.168.1.20:554/stream0' # B 站直播姬推流地址 bilibili_url = 'rtmp://192.168.18.1:1935/livehime' # 使用 OpenCV 捕获 RTSP 视频流 cap = cv2.VideoCapture(rtsp_url) # 获取视频流的宽度、高度和帧率 width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) fps = int(cap.get(cv2.CAP_PROP_FPS)) # 使用 FFmpeg 推送视频流到 B 站 process = subprocess.Popen([ 'ffmpeg', '-y', '-f', 'rawvideo', '-vcodec', 'rawvideo', '-pix_fmt', 'bgr24', '-s', f'{width}x{height}', # 使用实际分辨率 '-r', str(fps), # 使用实际帧率 '-i', '-', '-c:v', 'libx264', '-preset', 'veryfast', '-pix_fmt', 'yuv420p', '-f', 'flv', bilibili_url ], stdin=subprocess.PIPE) while cap.isOpened(): ret, frame = cap.read() if not ret: break process.stdin.write(frame.tobytes()) cap.release() process.stdin.close() process.wait()

直播效果

我的直播间:https://live.bilibili.com/31109555 欢迎也感谢帮我增加点人气😆

警告

警告 不知道为什么卡顿,有大佬知道的,非常感谢!!!!!😍🌹🌹🌹🌹

image.png

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Joker

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!