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 urlopen 使用小示例
Sep 06 Python
Python实现Tab自动补全和历史命令管理的方法
Mar 12 Python
python xml.etree.ElementTree遍历xml所有节点实例详解
Dec 04 Python
Tensorflow实现卷积神经网络用于人脸关键点识别
Mar 05 Python
Python面向对象之类和实例用法分析
Jun 08 Python
python pyinstaller 加载ui路径方法
Jun 10 Python
深入浅析python3中的unicode和bytes问题
Jul 03 Python
python爬虫的一个常见简单js反爬详解
Jul 09 Python
python循环输出三角形图案的例子
Nov 22 Python
Python自省及反射原理实例详解
Jul 06 Python
如何用python 操作zookeeper
Dec 28 Python
Python控制台输出俄罗斯方块的方法实例
Apr 17 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图片上传存储源码并且可以预览
2011/08/26 PHP
PHP中的魔术方法总结和使用实例
2015/05/11 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
laravel 解决后端无法获取到前端Post过来的值问题
2019/10/22 PHP
php-7.3.6 编译安装过程
2020/02/11 PHP
用Juery网页选项卡实现代码
2011/06/13 Javascript
最佳6款用于移动网站开发的jQuery 图片滑块插件小结
2012/07/20 Javascript
多个datatable共存造成多个表格的checkbox都被选中
2013/07/11 Javascript
JQ实现新浪游戏首页幻灯片
2015/07/29 Javascript
javascript函数命名的三种方式及区别介绍
2016/03/22 Javascript
JS生成不重复的随机数组的简单实例
2016/07/10 Javascript
Javascript中arguments对象的详解与使用方法
2016/10/04 Javascript
JS禁止查看网页源代码的实现方法
2016/10/12 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
2017/06/15 Javascript
jQuery实现的简单无刷新评论功能示例
2017/11/08 jQuery
微信小程序登录session的使用
2019/03/17 Javascript
详解基于React.js和Node.js的SSR实现方案
2019/03/21 Javascript
node.JS路径解析之PATH模块使用方法详解
2020/02/06 Javascript
Vue状态模式实现窗口停靠功能(灵动、自由, 管理后台Admin界面)
2020/03/06 Javascript
Node.js API详解之 console模块用法详解
2020/05/12 Javascript
[04:50]DOTA2亚洲邀请赛小组赛第四日 TOP10精彩集锦
2015/02/02 DOTA
python实现通过pil模块对图片格式进行转换的方法
2015/03/24 Python
浅谈机器学习需要的了解的十大算法
2017/12/15 Python
python 不以科学计数法输出的方法
2018/07/16 Python
使用python PIL库实现简单验证码的去噪方法步骤
2019/05/10 Python
python函数修饰符@的使用方法解析
2019/09/02 Python
Python tkinter布局与按钮间距设置方式
2020/03/04 Python
基于Python爬取fofa网页端数据过程解析
2020/07/13 Python
CSS3绘制有活力的链接下划线
2016/07/14 HTML / CSS
导出HTML5 Canvas图片并上传服务器功能
2019/08/16 HTML / CSS
安踏官方商城:anta.cn
2019/12/16 全球购物
异常和异常类的概念
2014/09/12 面试题
工商管理实习自我鉴定
2013/09/28 职场文书
同事去世追悼词
2015/06/23 职场文书
公司周年庆典致辞
2015/07/30 职场文书
数据设计之权限的实现
2022/08/05 MySQL