【python】自动化ffmpeg推rtmp流 + 进程停止

2023-05-16

一、诉求

原因: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中包含推流时刻 + 杀死进程逻辑

if __name__ == '__main__':
    from multiprocessing import Process
    between_time = 10
    num = 601
    for i in range(num):

三、代码

(待补充)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【python】自动化ffmpeg推rtmp流 + 进程停止 的相关文章

  • 如何在保留矩阵维度的同时序列化 numpy 数组?

    numpy array tostring似乎没有保留有关矩阵维度的信息 请参阅这个问题 https stackoverflow com q 30697769 1156707 要求用户发出调用numpy array reshape 有没有办法
  • 类型错误:object.__new__(int) 不安全,请使用 int.__new__()

    阅读本文时 Python 中的元类是什么 https stackoverflow com questions 100003 what is a metaclass in python 我正在学习使用 new 使用以下代码片段 class a
  • 在 Python 中搜索文本文件并打印相关行?

    如何在文本文件中搜索关键短语或关键字 然后打印关键短语或关键字所在的行 searchfile open file txt r for line in searchfile if searchphrase in line print line
  • 如何将字典转换为字符串

    我正在尝试使用提供的解决方案here https stackoverflow com questions 5192753 how to get the number of occurrences of each character usin
  • Tensorflow 导入错误:没有名为“tensorflow”的模块

    我在 Windows Python 3 5 Anaconda 环境中安装了 TensorFlow 验证成功 有警告 tensorflow C gt python Python 3 5 3 英特尔公司 默认 2017 年 4 月 27 日 1
  • 如何分组显示argparse子命令?

    对于具有许多子命令的程序 我想在 help 输出中显示它们按逻辑分组 Python argparse 有一个add argument group http docs python org library argparse html argp
  • Django管理命令是在单独的进程中执行的吗?

    Django 有很多管理命令 此外 我们还可以编写自己的命令 进行 shell 调用后会发生什么python manage py XXX 代码是否会在从 shell 启动的进程中执行 或者 shell 进程只是与执行命令的主 Django
  • 使用Python选择屏幕区域

    我正在用 Python 开发一个屏幕截图实用程序 目前它是专门针对 Linux 的 到目前为止 我已经能够拍摄完整桌面的屏幕截图 并将其上传到 Imgur 然后将链接复制到剪贴板 现在我想扩展到诸如活动窗口或特定选择的屏幕截图之类的功能 如
  • 会话cookie太大烧瓶应用程序[重复]

    这个问题在这里已经有答案了 我正在尝试使用会话 本地 加载某些数据 并且它已经工作了一段时间 但是现在我收到以下警告 并且不再加载通过会话加载的数据 b session cookie 太大 该值是 13083 字节 但是 标头需要 44 个
  • Visual Studio Code 调试控制台中的 pydevd 警告

    我已经搜索了一段时间但找不到任何相关问题 当使用 Visual Studio Code 和 Python 扩展来调试大型元素时 计算表示或获取属性可能需要一些时间 在这些情况下 会出现如下警告 pydevd 警告 计算 DataFrame
  • Python 中字典的合并层次结构

    我有两本词典 而我想做的事情有点奇怪 基本上 我想合并它们 这很简单 但它们是字典的层次结构 我想以这样的方式合并它们 如果字典中的项目本身就是字典并且存在于两者中 我也想合并这些字典 如果它不是字典 我希望第二个字典中的值覆盖第一个字典中
  • python下安装xgboost 32位msys失败

    尝试安装 xgboost 失败 Windows 和企业版版本为 Anaconda 2 1 0 64 位 我该如何继续 我一直在使用 R 似乎从 RStudio 在 R 中安装新包相当容易 但在间谍程序中则不然 因为我需要进入命令窗口来执行此
  • 如何在 matplotlib 图中禁用 xkcd?

    您可以通过以下方式打开 xkcd 风格 import matplotlib pyplot as plt plt xkcd 但如何禁用它呢 I try self fig clf 但这行不通 简而言之 要么使用 Valentin 提到的上下文管
  • 如何在Python中的字符串中插入变量值

    这是一个简单的例子 amount1 input Insert your value amount2 input Insert your value print Your first value is amount1 your second
  • 如何在 django-rest-framework 查询集响应中添加注释数据?

    我正在为查询集中的每个项目生成聚合 def get queryset self from django db models import Count queryset Book objects annotate Count authors
  • Python 正则表达式中的 \B+ 与 [\B]+ 与 [^\b]+

    我在回答 SO 问题时遇到了一个我不明白的问题 我创建了一个简化的示例来说明该问题 场景 我正在测试两个标记 不是随机的英语单词 在字符串中至少相距一定距离 在这个例子中 我们有一个动物列表 我们要确保在羊和狼之间至少还有其他三种动物 否则
  • Django model.foreignKey 并返回 self.text 错误

    所以我正在 Django 中处理 model py 但遇到了 2 个 pylint 错误 我不明白为什么 这是 pylint 的问题还是我在代码中做错了什么 E1120 No value for argument on delete in
  • Pandas 数据透视表同时包含多列

    我怀疑是否pandas pivot table可以一次接受两列并单独处理它们 而不是分层处理 假设我有以下数据框 id date day val 101 11 1 1 1 2 1 101 11 1 2 2 2 2 101 11 1 3 3
  • python nltk从句子中提取关键字

    我们要做的第一件事 就是杀掉所有律师 威廉 莎士比亚 鉴于上面的引用 我想退出 kill and lawyers 作为两个突出的关键词来描述句子的整体含义 我提取了以下名词 动词 POS 标签 First NNP thing NN do V
  • 网站可以检测您何时将 Selenium 与 chromedriver 结合使用吗?

    我一直在使用 Chromedriver 测试 Selenium 我注意到有些页面可以检测到您正在使用 Selenium 即使根本没有自动化 即使我只是通过 Selenium 使用 Chrome 手动浏览 Xephyr https en wi

随机推荐