tuoheng_algN/vodsdk/test/ffmpeg11/cv2test1.py

104 lines
3.7 KiB
Python

import time
import cv2
import subprocess as sp
# 推流
import ffmpeg
import numpy as np
if __name__== "__main__":
# with open(str(cv2.__file__),"r") as f:
# print (f.read())
# cap = cv2.VideoCapture("rtmp://live.play.t-aaron.com/live/THSAs")
# # Get video information
# fps = int(cap.get(cv2.CAP_PROP_FPS))
# print(fps)
# width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
# print(width)
# height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
# print(height)
# fourcc = int(cap.get(cv2.CAP_PROP_FOURCC))
# print(fourcc)
# # print(cv2.getBuildInformation())
# # cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
# # cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
# # cap.set(cv2.CAP_PROP_FPS, 60)
# # cap.setExceptionMode(True)
# print(cap.getExceptionMode())
# ffmpeg command
# command = ['ffmpeg',
# '-y', # 不经过确认,输出时直接覆盖同名文件。
# '-f', 'rawvideo',
# '-vcodec','rawvideo',
# '-pix_fmt', 'bgr24',
# '-s', "{}x{}".format(1920, 1080),
# # '-s', "{}x{}".format(1280, 720),
# '-i', '-', # 指定输入文件
# '-c:v', 'libx264', # 指定视频编码器
# '-pix_fmt', 'yuv420p',
# '-g', '5',
# "-an",
# '-b:v', '3000k',
# '-preset', 'ultrafast', # 指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast,
# # superfast, veryfast, faster, fast, medium, slow, slower, veryslow。
# '-f', 'flv',
# "rtmp://live.push.t-aaron.com/live/THSAk"]
kwargs = {'format': 'rawvideo',
'vcodec': 'rawvideo',
'pix_fmt': 'bgr24',
's': '{}x{}'.format(int(1920), int(1080))}
out = {
'g': str(25),
'b:v': '6000k',
# '-bufsize': '3000k',
'tune': 'zerolatency', # 加速编码速度
'c:v': 'libx264', # 指定视频编码器
'sc_threshold': '0',
'pix_fmt': 'yuv420p',
'flvflags': 'no_duration_filesize',
'preset': 'ultrafast', # 指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast,
# superfast, veryfast, faster, fast, medium, slow, slower, veryslow。
'format': 'flv'}
# 管道配置
process2 = (
ffmpeg
.input('pipe:', **kwargs)
.output('rtmp://live.push.t-aaron.com/live/THSAk', **out)
.global_args('-y', '-an')
.overwrite_output()
.run_async(pipe_stdin=True)
)
# 管道配置
# p = sp.Popen(command, stdin=sp.PIPE, shell=False)
process = (
ffmpeg
.input('rtmp://221.226.114.142:19350/rlive/stream_4?sign=PZIGmXvw')
.output('pipe:', format='rawvideo', pix_fmt='bgr24')
.overwrite_output()
.global_args('-an')
.run_async(pipe_stdout=True)
)
# while(cap.isOpened()):
while True:
start =time.time()
# ret, frame = cap.read()
# print(cap.grab())
in_bytes = process.stdout.read(1920 * 1080 * 3)
# print("aaaaaaaaaaaaaaa", time.time()-start)
# print("aaaaaaaaaaaaaa", time.time()-start)
# start =time.time()
# a,b = cap.retrieve()
if not in_bytes:
print("Opening camera is failed")
break
frame = (np.frombuffer(in_bytes, np.uint8).reshape([1080, 1920, 3]))
print("ccccccccccccccc", time.time()-start)
# process2.stdin.write(frame.tostring())
# print("bbbbbbbbbbbbbb", time.time()-start)