python 使用ffmpeg推送视频流

Timon---老赵 2020-11-13 09:39:16
想将视频处理后一帧一帧推流出去,让别人通过rtmp接入,以下是找的代码,本人python3.6
跑不通, p.communicate(frame.tostring())
File "F:\software\Anaconda3\envs\pytorch\lib\subprocess.py", line 924, in communicate
self._stdin_write(input)
File "F:\software\Anaconda3\envs\pytorch\lib\subprocess.py", line 873, in _stdin_write
self.stdin.write(input)


import cv2                                                       
import subprocess as sp
import subprocess as sp

rtmpUrl = "rtmp://39.107.26.100:1935/myapp/test1"
camera_path = "video.mp4"

cap = cv2.VideoCapture(camera_path)

# Get video information
fps = int(cap.get(cv2.CAP_PROP_FPS))
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
# ffmpeg command
command = ['ffmpeg',
'-y',
'-f', 'rawvideo',
'-vcodec', 'rawvideo',
'-pix_fmt', 'bgr24',
'-s', "{}x{}".format(width, height),
'-r', str(fps),
'-i', '-',
'-c:v', 'libx264',
'-pix_fmt', 'yuv420p',
'-preset', 'ultrafast',
'-f', 'flv',
rtmpUrl]
# 管道配置
p = sp.Popen(command, stdin=sp.PIPE)
# read webcamera
while (cap.isOpened()):
ret, frame = cap.read()
# print("running......")
if not ret:
print("Opening camera is failed")
break
p.stdin.write(frame.tostring())


return_value, frame = cap.read()
...全文
1851 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2022-09-25
  • 打赏
  • 举报
回复

使用多线程

4,270

社区成员

发帖
与我相关
我的任务
社区描述
OpenCV相关技术交流专区
计算机视觉人工智能opencv 技术论坛(原bbs) 广东省·深圳市
社区管理员
  • OpenCV
  • 幻灰龙
  • OpenCV中国团队
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

OpenCV中国团队官方博客:https://blog.csdn.net/opencvchina

试试用AI创作助手写篇文章吧