一、诉求
原因:ffmpeg命令可实现自动化推流,一般在执行之后,由于python的自上而下执行,后续代码逻辑无法执行
场景1:
需要给两个rtmp地址轮询推流,但希望视频链接续上,即指定视频文件的推流时间戳。
(AWS上同一个通道,HA支持两个rtmp、同一个m3u8)
场景2:
ffmpeg实现屏幕录制,存储成视频文件;
同时执行切片,且同时对图片进行处理,达到实时分析视频的目的。
二、实现
ffmpeg推流命令
ffmpeg -re -ss 35 -stream_loop -1 -re -i A_output.mp4 -vcodec libx264 -acodec aac -f flv rtmp://ip:port/name/
ffmpeg播放命令
ffplay https://url/index.m3u8
实现逻辑:通过循环数字,进行逻辑控制
定义全局时钟:每5s切换一次rtmp
启动两个线程
执行推流1命令
执行推流2命令
写循环:是我要验证的次数
循环内:
0s:
同时启动线程1、线程2
5s:
线程1超时,走线程2
10s:
线程2超时,启动新的一个线程,rtmp1 从指定位置开始推流-ss 10,从第10s开始推
走线程1
15s:
启动新的一个线程,rtmp2 从指定位置开始推流-ss 15,从第15s开始推
同时推线程1、线程2
20s:
线程1超时,走线程2
25s:
线程2超时,启动新的一个线程,rtmp1 从指定位置开始推流-ss 25,从第25s开始推
走线程1
30s:
启动一个新的线程,rtmp2 从指定位置开始推流-ss 30,从第30s开始推
同时推线程1、线程2
mac查看进程命令 + 杀死进程命令
ps -ef | grep ffmpeg
kill -9 pid
windows查看进程方式 + 杀死进程命令
创建进程时可获取Process.pid
taskkill /f /t /pid 12344
taskkill /f /im ffmpeg.exe
taskkill /f /im python.exe
给一个标识,确认ffmpeg推流进程状态,当达到条件后,杀死进程停止推流
class Job(threading.Thread):
def __init__(self,ss_num,url,between_time,*args, **kwargs):
super(Job, self).__init__(*args, **kwargs)
self.__running = threading.Event() # 用于停止线程的标识
self.__running.set() # 将running设置为True
def run(self):
while True:
# 添加验证嵌入时间戳命令
ffmpeg_cmd_rtmp = "ffmpeg -re -ss " + str(self.ss_num) + " -stream_loop -1 -i A_output.mp4 -c:v h264_qsv -pic_timing_sei 1 -acodec aac -f flv rtmp://" + self.url
if self.__running.isSet():
控制开启子进程方法
# 控制子进程
class Coo():
def __init__(self):
self.tmp_thread = None
# 开启子进程
def execute(self,ss_num,url,between_time):
t = Job(ss_num,url,between_time)
t.setDaemon(True)
t.start()
self.tmp_thread = t
t.join()
class CustErr(Exception):
pass
def main(ss_num,url,between_time):
a = Coo()
a.execute(ss_num, url, between_time)
main中包含推流时刻 + 杀死进程逻辑文章来源:https://www.toymoban.com/news/detail-435468.html
if __name__ == '__main__':
from multiprocessing import Process
between_time = 10
num = 601
for i in range(num):
三、代码
(待补充)文章来源地址https://www.toymoban.com/news/detail-435468.html
到了这里,关于【python】自动化ffmpeg推rtmp流 + 进程停止的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!