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 相关文章推荐
MySQLdb ImportError: libmysqlclient.so.18解决方法
Aug 21 Python
基于wxpython实现的windows GUI程序实例
May 30 Python
python实现二叉树的遍历
Dec 11 Python
python文件操作之批量修改文件后缀名的方法
Aug 10 Python
wxpython绘制圆角窗体
Nov 18 Python
wxpython实现按钮切换界面的方法
Nov 19 Python
python3实现elasticsearch批量更新数据
Dec 03 Python
Python利用逻辑回归模型解决MNIST手写数字识别问题详解
Jan 14 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
Feb 11 Python
python实现一次性封装多条sql语句(begin end)
Jun 06 Python
4款Python 类型检查工具,你选择哪个呢?
Oct 30 Python
Python matplotlib多个子图绘制整合
Apr 13 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设计模式 Delegation(委托模式)
2011/06/26 PHP
Joomla简单判断用户是否登录的方法
2016/05/04 PHP
把html页面的部分内容保存成新的html文件的jquery代码
2009/11/12 Javascript
使用jQuery向asp.net Mvc传递复杂json数据-ModelBinder篇
2010/05/07 Javascript
javascript与CSS复习(二)
2010/06/29 Javascript
基于jquery实现的一个选择中国大学的弹框 (数据、步骤、代码)
2012/07/26 Javascript
Node.js和PHP根据ip获取地理位置的方法
2014/03/14 Javascript
Javascript实现Web颜色值转换
2015/02/05 Javascript
jQuery对html元素的取值与赋值实例详解
2015/12/18 Javascript
全面解析Bootstrap中transition、affix的使用方法
2016/05/30 Javascript
JS实现图片上传预览功能
2016/11/21 Javascript
浅谈使用React.setState需要注意的三点
2017/12/18 Javascript
webpack 模块热替换原理
2018/04/09 Javascript
vue-router 起步步骤详解
2019/03/26 Javascript
微信小程序数据统计和错误统计的实现方法
2019/06/26 Javascript
ES6中异步对象Promise用法详解
2019/07/31 Javascript
vue实现鼠标移过出现下拉二级菜单功能
2019/12/12 Javascript
node+multer实现图片上传的示例代码
2020/02/18 Javascript
vue+ESLint 配置保存 自动格式化代码
2020/03/17 Javascript
JS性能优化实现方法及优点进行
2020/08/30 Javascript
Django-Rest-Framework 权限管理源码浅析(小结)
2018/11/12 Python
Python基础知识点 初识Python.md
2019/05/14 Python
pytorch-神经网络拟合曲线实例
2020/01/15 Python
tensorflow使用CNN分析mnist手写体数字数据集
2020/06/17 Python
如何用python开发Zeroc Ice应用
2021/01/29 Python
viagogo意大利票务平台:演唱会、体育比赛、戏剧门票
2018/01/26 全球购物
美国背景检查、公共记录和人物搜索网站:BeenVerified
2018/02/25 全球购物
2013年大学生的自我鉴定
2013/10/24 职场文书
实习教师自我鉴定
2013/12/09 职场文书
实习单位鉴定评语
2014/04/26 职场文书
超市促销活动总结
2014/07/01 职场文书
教师纪念9.18事件演讲稿范文
2014/09/14 职场文书
国家机关领导干部民主生活会对照检查材料思想汇报
2014/09/17 职场文书
收款授权委托书
2014/10/02 职场文书
党支部群众路线整改措施思想汇报
2014/10/10 职场文书
离婚案件被告代理词
2015/05/23 职场文书