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根据开头和结尾字符串获取中间字符串的方法
Mar 26 Python
Python 实现随机数详解及实例代码
Apr 15 Python
HTML中使用python屏蔽一些基本功能的方法
Jul 07 Python
在Python中使用AOP实现Redis缓存示例
Jul 11 Python
详解Django rest_framework实现RESTful API
May 24 Python
Python3.4学习笔记之列表、数组操作示例
Mar 01 Python
对python3.4 字符串转16进制的实例详解
Jun 12 Python
Ubuntu下Anaconda和Pycharm配置方法详解
Jun 14 Python
python将excel转换为csv的代码方法总结
Jul 03 Python
python 比较2张图片的相似度的方法示例
Dec 18 Python
Python for循环通过序列索引迭代过程解析
Feb 07 Python
python 用opencv实现图像修复和图像金字塔
Nov 27 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守护进程 加linux命令nohup实现任务每秒执行一次
2011/07/04 PHP
对淘宝URL中ID提取的PHP代码
2013/09/01 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
2014/06/19 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
2016/11/14 PHP
JavaScript 设计模式学习 Factory
2009/07/29 Javascript
jQuery EasyUI API 中文文档 可调整尺寸
2011/09/29 Javascript
使用jQuery简单实现模拟浏览器搜索功能
2014/12/21 Javascript
去除html代码里面的script正则方法
2016/05/19 Javascript
javascript简易画板开发
2020/04/12 Javascript
关于Node.js的events.EventEmitter用法介绍
2017/04/01 Javascript
JS字符串去除连续或全部重复字符的实例
2018/03/08 Javascript
使用webpack3.0配置webpack-dev-server教程
2018/05/29 Javascript
在Angular中使用JWT认证方法示例
2018/09/10 Javascript
微信小程序提取公用函数到util.js及使用方法示例
2019/01/10 Javascript
Nodejs核心模块之net和http的使用详解
2019/04/02 NodeJs
vue实现两个组件之间数据共享和修改操作
2020/11/12 Javascript
[01:00:14]DOTA2官方TI8总决赛纪录片 真视界True Sight
2019/01/16 DOTA
python操作xml文件示例
2014/04/07 Python
python图片验证码生成代码
2016/07/02 Python
Python通过matplotlib画双层饼图及环形图简单示例
2017/12/15 Python
Python实现的生成格雷码功能示例
2018/01/24 Python
python遍历文件夹找出文件夹后缀为py的文件方法
2018/10/21 Python
Python爬虫学习之翻译小程序
2019/07/30 Python
Python浮点数四舍五入问题的分析与解决方法
2019/11/19 Python
python双向链表原理与实现方法详解
2019/12/03 Python
PyTorch 普通卷积和空洞卷积实例
2020/01/07 Python
python3.8下载及安装步骤详解
2020/01/15 Python
python利用opencv保存、播放视频
2020/11/02 Python
基于python爬取梨视频实现过程解析
2020/11/09 Python
英国No.1文具和办公用品在线:Euroffice
2016/09/21 全球购物
新闻网站实习自我鉴定
2013/09/25 职场文书
羽毛球比赛策划方案
2014/06/13 职场文书
考研英语辞职信
2015/05/13 职场文书
2016年11月份红领巾广播稿
2015/12/21 职场文书
教您怎么制定西餐厅运营方案 ?
2019/07/05 职场文书
阿里云服务器部署RabbitMQ集群的详细教程
2022/06/01 Servers