python读取网络视频流或者本地视频进行RTMP流的生成

想要获得RTMP推流的功能其实是可以用ffmpeg+ffserver通过命令行方式实现的,但是我为了对原视频流的帧做剪切处理,所以使用python调用ffmpeg来推流,这里只是生成推流,这是不够的,需要有一个代理服务器来接收推流并推向网络,关于代理服务器的配置请看文末的链接

以下是全部代码,需要注意以下几点:

  1. 主体是两个函数,通过两个线程调用,线程之间通过队列进行通信,读流线程将读取到的帧放入队列中,推流线程将队列中的帧取出来进行剪切处理并推流。
  2. 在处理帧的时候一定要注意将处理后的帧的fps设置为ffmpeg command中设置的width,height,不然推流会失败。 就是这一句代码:image = cv2.resize(frame[int(left_x):int(right_x)][int(left_y):int(right_y)], (width, height))
  3. 不知道为什么在队列不为空的时候会出现队列中帧对象为NoneType的问题,所以在处理的时候我加了个判断条件。如果有大佬知道原因请在评论区留言,欢迎交流。
  4. 适应项目要求我剪切帧需要的参数是从文件中读取的,使用时可换成别的方式
import subprocess as sp
import cv2
import sys
import queue
import threadingframe_queue = queue.Queue()
rtmpUrl = "rtmp://IP地址/live/test"
camera_path = 'rtmp://58.200.131.2:1935/livetv/hunantv' #这是湖南台的实时直播流#获取摄像头参数
cap = cv2.VideoCapture(camera_path)
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))#print(fps, width, height)# ffmpeg command
command = ['ffmpeg','-y','rawvideo','-vcodec', 'rawvideo','-pix_fmt', 'bgr24','-s', "{}x{}".format(width, height),'-r', str(fps),'-c:v', 'libx264','-pix_fmt', 'yuv420p','-preset', 'ultrafast','-f', 'flv','-g', '5',rtmpUrl]#读流函数
def Video():vid = cv2.VideoCapture(camera_path)if not vid.isOpened():raise IOError("could't open webcamera or video")while(vid.isOpened()):ret,frame = vid.read()#下面注释的代码是为了防止摄像头打不开而造成断流#if not ret:#vid = cv2.VideoCapture(camera_path)#if not vid.isOpened():#raise IOError("couldn't open webcamera or video")#continue       frame_queue.put(frame)def push_stream(left_x,left_y,right_x,right_y):# 管道配置while True:if len(command)>0:p = sp.Popen(command, stdin=sp.PIPE)breakwhile True:if not frame_queue.empty():frame = frame_queue.get()if frame is not None:#我这里出现了frame为NoneType的情况,所以判断一下image = cv2.resize(frame[int(left_x):int(right_x)][int(left_y):int(right_y)], (width, height))p.stdin.write(image.tostring())def run(left_x,left_y,right_x,right_y):thread_video = threading.Thread(target=Video,)thread_push = threading.Thread(target=push_stream,args=(left_x,left_y,right_x,right_y,))thread_video.start()thread_push.start()if __name__ == "__main__":with open("zoomfile.txt", "r") as f:  # 打开文件data = f.read()  # 读取文件zoom = data.split("_")left_x = zoom[0]left_y = zoom[1]right_x = zoom[2]right_y = zoom[3]with open("zoomfile.txt","w") as f:f.write("0")run(left_x,left_y,right_x,right_y)

python代码参考了以下几篇博客:
python利用ffmpeg进行rtmp推流直播
Python 通过ffmpeg实现实时推流(ubuntu16+ffmpeg+nginx)

以下三篇博客是关于nginx服务器和RTMP配置的,都很有参考价值
Ubuntu安装nginx+rtmp
利用nginx搭建RTMP视频点播、直播、HLS服务器
使用 nginx 和 rtmp 插件搭建视频直播和点播服务器

使用python读取网络视频流或者本地视频进行RTMP流的生成,并对视频源的每一帧做剪切处理相关推荐

  1. Android 音视频深入 十七 FFmpeg 获取RTMP流保存为flv (附源码下载)

    项目地址 https://github.com/979451341/RtmpSave 这个项目主要代码我是从雷神那弄过来的,不愧是雷神,我就配个环境搞个界面就可以用代码了. 这一次说的是将RTMP流媒 ...

  2. 利用python读取tomcat中log文件提取出错误日志生成新的文件

    人生苦短,我用python 废话不多说,直接上代码! #!/usr/bin/env python # coding=utf-8 import redef find_error_log(log_name ...

  3. python 读取excel一列的内容根据内容循环生成宏定义

    可以使用 Python 中的 openpyxl 库来读取 Excel 文件. 下面是一个简单的例子,假设你有一个 Excel 文件 test.xlsx,其中第一列为内容,你想要读取第一列并根据内容生成 ...

  4. Python 读取excel数据并填入excel,批量生成模板

    文章目录 一.问题-来源 二.问题-困难 三.问题-解决 总结 一.问题-来源 前几天,我姐遇见了一个难题:需要从excel表格中不断读取数据并生成个人信息模板 二.问题-困难 1.首先我想到了在wo ...

  5. python读取mat文件并画图_[宜配屋]听图阁

    先给大家介绍下python读取并写入mat文件的方法 用matlab生成一个示例mat文件: clear;clc matrix1 = magic(5); matrix2 = magic(6); sav ...

  6. python 读取mat文件,python读取并写入mat文件的方法

    先给大家介绍下python读取并写入mat文件的方法 用matlab生成一个示例mat文件: clear;clc matrix1 = magic(5); matrix2 = magic(6); sav ...

  7. FFmpeg混流:将两个视频放在一个画布并以rtmp流输出

    1.将其中一个视频置于画布右下角(这种情况直播用的最多,这也是我用FFmpeg想要实现的效果) 命令如下: ./ffmpeg -i 飞驰人生HD国语中字.mkv -i 小丑BD中英双字.mp4 -fi ...

  8. 百度霸屏之视频被动引流实操总结

    传统人的思维是怎么找客户,而互联网人的套路是怎么让客户主动加我们.确实,客源问题一直让很多做项目的朋友闹心,有时他们怎么也不明白,拥有好项目,又有团队,还具备很强的销售能力,可业绩就是做不起来. 虽然 ...

  9. python使用方法视频-python读取视频流提取视频帧的两种方法

    本文实例为大家分享了python读取视频流提取视频帧的具体代码,供大家参考,具体内容如下 方法一:通过imageio库和skimage库 1. 安装环境: pip install imageio pi ...

最新文章

  1. 科研助力|计算机科学方向一对一科研项目
  2. asp自定义函数可以返回数组或者对象
  3. 河南经济管理学校2001级计算机,懂得取舍,习得自主——访管信2001级经英奖学金得主张瑞娟...
  4. 牛客网 【每日一题】5月11日题目精讲 Moovie Mooving
  5. 我好像明白了如何画序列图了
  6. 卡耐基梅隆计算机学院,卡内基梅隆计算机学院--计算机系简介
  7. gatk过滤_重测序2--看了不后悔的gatk-变异检测
  8. lnmp python _mysql web_Nginx+uWSGI+DJango+Python+ Mysql 搭建可靠的python web服务器
  9. MySQL四种事务隔离级的说明
  10. pdf格式文件转换成mobi
  11. 编程中怎么理解抽象的概念
  12. python日历代码_python日历代码
  13. IOS菜鸟初学第八篇:接入京东联盟sdk,可打开任意京东的链接
  14. Spring-IoC注解
  15. 免费图书的检索和获取途径
  16. Java各种学习资源(视频+文档)
  17. vue滑动窗口_vue-floating 浮窗组件、封装基于better-scroll的滑动组件、vue自定义手势指令...
  18. 【Eclipse下载与安装教程】
  19. 自己写的基金投资分析系统,这只基你们觉得怎么样?
  20. 雷神ZERO游戏本和ROG冰刃5Plus的 区别 选哪个

热门文章

  1. 提取文档中关键词所在行
  2. ✨ StarRocks 9 月社区动态
  3. Python easyOCR图像文本提取 初识
  4. 按防电击类型分类的II设备(无保护接地线缆)可免于线对地的浪涌实验
  5. 阿兰•图灵与人工智能
  6. bootstrap表单验证
  7. 华为nqa和bfd实际应用配置案例
  8. n行Python代码系列专栏文章目录
  9. 北京租房心经--教你如何北京租房
  10. 松松软文:媒介编辑管理系统上线