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字符串关键点
Dec 13 Python
在Ubuntu系统下安装使用Python的GUI工具wxPython
Feb 18 Python
用python编写第一个IDA插件的实例
May 29 Python
Tensorflow 实现修改张量特定元素的值方法
Jul 30 Python
Python面向对象之类的定义与继承用法示例
Jan 14 Python
解决pyqt5中QToolButton无法使用的问题
Jun 21 Python
使用python进行广告点击率的预测的实现
Jul 04 Python
python实现异常信息堆栈输出到日志文件
Dec 26 Python
python使用HTMLTestRunner导出饼图分析报告的方法
Dec 30 Python
python实现凯撒密码、凯撒加解密算法
Jun 11 Python
使用Pytorch搭建模型的步骤
Nov 16 Python
Python数据模型与Python对象模型的相关总结
Jan 26 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批量添加数据与批量更新数据的实现方法
2014/12/16 PHP
php编写的一个E-mail验证类
2015/03/25 PHP
PHP基于curl模拟post提交json数据示例
2018/06/22 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
2019/06/08 PHP
javascript 获取表单file全路径
2009/12/31 Javascript
javascript获取当前日期时间及其它操作函数
2011/01/11 Javascript
js函数定时器实现定时读取系统实时连接数
2014/04/30 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
2014/05/28 Javascript
Javascript中判断对象是否为空
2015/06/10 Javascript
jQuery匹配文档链接并添加class的方法
2015/06/26 Javascript
微信小程序 网络API 上传、下载详解
2016/11/09 Javascript
详解JS-- 浮点数运算处理
2016/11/28 Javascript
简单谈谈CommonsChunkPlugin抽取公共模块
2017/12/31 Javascript
jquery实现购物车基本功能
2019/10/25 jQuery
原生javascript制作的拼图游戏实现方法详解
2020/02/23 Javascript
[01:36]DOTA2完美大师赛趣味视频之与队友相处的十万个技巧
2017/11/19 DOTA
[01:26]DOTA2荣耀之路2:iG,China
2018/05/24 DOTA
[45:10]NB vs Liquid Supermajor小组赛 A组胜者组决赛 BO3 第二场 6.2
2018/06/04 DOTA
深入理解Python中的元类(metaclass)
2015/02/14 Python
Python Requests模拟登录实现图书馆座位自动预约
2018/04/27 Python
python 用lambda函数替换for循环的方法
2018/06/09 Python
pandas 选取行和列数据的方法详解
2019/08/08 Python
TensorFLow 变量命名空间实例
2020/02/11 Python
文件上传服务器-jupyter 中python解压及压缩方式
2020/04/22 Python
python 录制系统声音的示例
2020/12/21 Python
python爬虫scrapy框架之增量式爬虫的示例代码
2021/02/26 Python
香港时尚女装购物网站:ZAFUL
2017/07/19 全球购物
Farfetch阿联酋:奢侈品牌时尚购物平台
2019/07/26 全球购物
水毁工程实施方案
2014/04/01 职场文书
学校国庆节活动总结
2015/03/23 职场文书
创建文明城市倡议书
2015/04/28 职场文书
担保公司2015年终工作总结
2015/10/14 职场文书
写给消防战士们的一封慰问信
2019/10/07 职场文书
PySwarms(Python粒子群优化工具包)的使用:GlobalBestPSO例子解析
2021/04/05 Python
Vue组件更新数据v-model不生效的解决
2022/04/02 Vue.js
vscode远程免密登入Linux服务器的配置方法
2022/06/28 Servers