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实现扫描局域网活动ip(扫描在线电脑)
Apr 28 Python
python统计文本文件内单词数量的方法
May 30 Python
Python使用struct处理二进制的实例详解
Sep 11 Python
Django contenttypes 框架详解(小结)
Aug 13 Python
说说如何遍历Python列表的方法示例
Feb 11 Python
python文件写入write()的操作
May 14 Python
python语言元素知识点详解
May 15 Python
PyTorch: 梯度下降及反向传播的实例详解
Aug 20 Python
Python socket处理client连接过程解析
Mar 18 Python
如何一键升级Python所有包
Nov 05 Python
selenium携带cookies模拟登陆CSDN的实现
Jan 19 Python
Python实现随机生成迷宫并自动寻路
Jun 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最常用的ini函数分析 针对PHP.ini配置文件
2010/04/22 PHP
解析PHP中ob_start()函数的用法
2013/06/24 PHP
php实现文件编码批量转换
2014/03/10 PHP
php发送邮件的问题详解
2015/06/22 PHP
php实现博客,论坛图片防盗链的方法
2016/10/15 PHP
PHP count()函数讲解
2019/02/03 PHP
Draggable Elements 元素拖拽功能实现代码
2011/03/30 Javascript
ajax上传时参数提交不更新等相关问题
2012/12/11 Javascript
php与js的区别是什么
2013/08/05 Javascript
js实现照片墙功能实例
2015/02/05 Javascript
在linux中使用包管理器安装node.js
2015/03/13 Javascript
举例讲解JavaScript中将数组元素转换为字符串的方法
2015/10/25 Javascript
jQuery实现的导航动画效果(附demo源码)
2016/04/01 Javascript
JavaScript中0和&quot;&quot;比较引发的问题
2016/05/26 Javascript
JavaScript闭包实例详解
2016/06/03 Javascript
JavaScript表单验证完美代码
2017/03/02 Javascript
详解Vue-cli中的静态资源管理(src/assets和static/的区别)
2018/06/19 Javascript
推荐几个不错的console调试技巧实现
2019/12/20 Javascript
JS中多层次排序算法的实现代码
2021/01/06 Javascript
python判断端口是否打开的实现代码
2013/02/10 Python
python进阶教程之文本文件的读取和写入
2014/08/29 Python
Python文件处理
2016/02/29 Python
代码分析Python地图坐标转换
2018/02/08 Python
pandas.loc 选取指定列进行操作的实例
2018/05/18 Python
python日志logging模块使用方法分析
2019/05/23 Python
教你如何编写、保存与运行Python程序的方法
2019/07/12 Python
用 Django 开发一个 Python Web API的方法步骤
2020/12/03 Python
2014自荐信的写作技巧
2014/01/28 职场文书
初一学生期末评语
2014/04/24 职场文书
个人承诺书怎么写
2014/05/24 职场文书
安全目标责任书
2014/07/22 职场文书
2015年高二班主任工作总结
2015/05/25 职场文书
会计试用期工作总结2015
2015/05/28 职场文书
干货:如何写好工作总结报告!
2019/05/10 职场文书
2019教师的学习计划
2019/06/25 职场文书
基于Redis位图实现用户签到功能
2021/05/08 Redis