python+ffmpeg视频并发直播压力测试


Posted in Python onMarch 06, 2018

通过python与ffmpeg结合使用,可生成进行视频点播、直播的压力测试脚本。可支持不同类型的视频流,比如rtmp或者hls形式。
通过如下方式执行脚本:python multiRealPlay.py [rtmp|http] [thread counts] [interval Time]
[rtmp | http]:视频播放的不同形式
[thread counts]:并发线程数
[interval Time]:启动每个线程的间隔时间

代码:

#!/usr/bin/python
# -*- coding: utf-8 -*-  
'''
Created on 2015年7月22日

@author: LiBiao
'''
import datetime,time
import threading
import subprocess
import os, base64
import sys
import Queue

queue = Queue.Queue()


#需要手动配置的参数

#启动序号
SLEEP_TIME = 0

#直播地址
FULL_ADDR = {}

#需要手动配置的参数
RTMP_ADDR = 'rtmp://192.168.1.208:1935/live/'
HTTP_ADDR = 'http://192.168.1.208:80/live'
liveID = '100002750'  #来自于万视无忧中创建的直播
urlKey = 'a1e5c680f7bfc85851de8ab2e63b0a33'  #来自于万视无忧安全设置模块
liveResCode = '71ac6c06d3'  #直播源码


#生成MD5值
def getMD5_Value(inputdata):
  try:
    import hashlib
    hash = hashlib.md5(inputdata.encode('utf-8'))
  except ImportError:
    #for python << 2.5
    import md5
    hash = md5.new()

  return hash.hexdigest()


#直播地址组装
def build_live_addr():
  t = time.strftime('%Y%m%d%H%M%S',time.localtime())[2:]
  data = '%s#%s#%s' %(liveID, t, urlKey)
  secret = getMD5_Value(data)
  rtmp_addr = '%s%s?liveID=%s&time=%s&secret=%s' %(RTMP_ADDR, liveResCode, liveID, t, secret)
  http_addr = '%s/%s/playlist.m3u8?liveID=%s&time=%s&secret=%s' %(HTTP_ADDR, liveResCode, liveID, t, secret)
  FULL_ADDR['rtmp'] = rtmp_addr
  FULL_ADDR['http'] = http_addr
  return FULL_ADDR

#获取本机ip地址,用来产生区别于其他机器的数据
def get_local_ip():
  try:
    ip = os.popen("ifconfig | grep 'inet addr' | awk '{print $2}'").read()
    ip = ip[ip.find(':') + 1:ip.find('\n')]
  except Exception,e:
    print e
  return ip


class Video_To_Live(threading.Thread):
  def __init__(self,queue):
    threading.Thread.__init__(self)
    self.queue = queue

  def run(self):
    liveAddr = self.queue.get()
    #print liveAddr
    try:
      print liveAddr
      subprocess.call('./ffmpeg -i \"%s\" -c:v copy -c:a copy -bsf:a aac_adtstoasc -y -f flv -timeout 4000 /dev/null 2>/dev/null' %liveAddr,stdout=subprocess.PIPE,shell=True)
    except Exception as e:
      wiriteLog('ERROR',str(e))
    self.queue.task_done()


if __name__ == "__main__":
  time.sleep(SLEEP_TIME)
  parser = argparse.ArgumentParser(description = "Live Play")
  parser.add_argument('--liveType',action = "store",dest = "liveType",required = False)
  parser.add_argument('--pnum',action = "store",dest = "pnum",type = int,required = False)
  parser.add_argument('--itime',action = "store",dest = "itime",required = False)
  given_args = parser.parse_args()

  liveType = given_args.liveType 
  threadNum = given_args.pnum
  intervalTime = given_args.itime

  print "%d 个 %s 进程开始运行........" %(threadNum, Video_To_Live)
  for i in xrange(threadNum):
    videotolive = Video_To_Live(queue)
    videotolive.setDaemon(True)
    videotolive.start()

  for i in xrange(threadNum):
    if liveType in ["http","rtmp"]:
        addr = build_live_addr()
      liveaddr = addr[liveType]
    queue.put(liveaddr)
    time.sleep(intervalTime)
  queue.join()
  print "进程退出"

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 实现插入排序算法
Jun 05 Python
Python模仿POST提交HTTP数据及使用Cookie值的方法
Nov 10 Python
探索Python3.4中新引入的asyncio模块
Apr 08 Python
Python找出9个连续的空闲端口
Feb 01 Python
Python基础语言学习笔记总结(精华)
Nov 14 Python
django 解决manage.py migrate无效的问题
May 27 Python
Python3中的列表生成式、生成器与迭代器实例详解
Jun 11 Python
浅谈Python大神都是这样处理XML文件的
May 31 Python
python笔记_将循环内容在一行输出的方法
Aug 08 Python
Python使用scipy模块实现一维卷积运算示例
Sep 05 Python
django 模版关闭转义方式
May 14 Python
python读取excel进行遍历/xlrd模块操作
Jul 12 Python
小白如何入门Python? 制作一个网站为例
Mar 06 #Python
python调用系统ffmpeg实现视频截图、http发送
Mar 06 #Python
Python从零开始创建区块链
Mar 06 #Python
Django 实现下载文件功能的示例
Mar 06 #Python
python入门前的第一课 python怎样入门
Mar 06 #Python
详解Python判定IP地址合法性的三种方法
Mar 06 #Python
Python中enumerate()函数编写更Pythonic的循环
Mar 06 #Python
You might like
PHP获取http请求的头信息实现步骤
2012/12/16 PHP
ThinkPHP权限认证Auth实例详解
2014/07/22 PHP
PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)
2014/09/12 PHP
PHP给文字内容中的关键字进行套红处理
2016/04/12 PHP
javascript Excel操作知识点
2009/04/24 Javascript
jQuery ajax 路由和过滤器使用说明
2011/08/02 Javascript
JQuery入门——事件切换之hover()方法应用介绍
2013/02/05 Javascript
kindeditor编辑器点中图片滚动条往上顶的bug
2015/07/05 Javascript
BootStrap中Datetimepicker和uploadify插件应用实例小结
2016/05/26 Javascript
jQuery中实现prop()函数控制多选框(全选,反选)
2016/08/19 Javascript
vue mixins组件复用的几种方式(小结)
2017/09/06 Javascript
详解Vue路由钩子及应用场景(小结)
2017/11/07 Javascript
详解微信小程序-canvas绘制文字实现自动换行
2019/04/26 Javascript
JS实现简单打字测试
2020/06/24 Javascript
vuex存取值和映射函数使用说明
2020/07/24 Javascript
[01:17]炒鸡美酒第四天TA暴走
2018/06/05 DOTA
python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
2013/12/06 Python
Python查看多台服务器进程的脚本分享
2014/06/11 Python
Python的Django中django-userena组件的简单使用教程
2015/05/30 Python
Python HTTP客户端自定义Cookie实现实例
2017/04/28 Python
python3之模块psutil系统性能信息使用
2018/05/30 Python
flask框架json数据的拿取和返回操作示例
2019/11/28 Python
windows python3安装Jupyter Notebooks教程
2020/04/13 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
2020/11/17 Python
HTML5新特性之用SVG绘制微信logo
2016/02/03 HTML / CSS
详解快速开发基于 HTML5 网络拓扑图应用
2018/01/08 HTML / CSS
美国知名艺术画网站:Art.com
2017/02/09 全球购物
俄罗斯女装店:12storeez
2019/10/25 全球购物
阿里巴巴的Oracle DBA笔试题答案-SQL tuning类
2016/04/03 面试题
学校安全工作制度
2014/01/19 职场文书
九年级科学教学反思
2014/01/29 职场文书
红色故事演讲稿
2014/05/22 职场文书
法学院毕业生求职信
2014/06/25 职场文书
园艺专业毕业生求职信
2014/09/02 职场文书
奥巴马开学演讲观后感
2015/06/12 职场文书
新闻通讯稿范文
2015/07/22 职场文书