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挑选文件夹里宽大于300图片的方法
Mar 05 Python
python处理html转义字符的方法详解
Jul 01 Python
Pycharm学习教程(6) Pycharm作为Vim编辑器使用
May 03 Python
老生常谈进程线程协程那些事儿
Jul 24 Python
Python3 循环语句(for、while、break、range等)
Nov 20 Python
Python同步遍历多个列表的示例
Feb 19 Python
python利用selenium进行浏览器爬虫
Apr 25 Python
Django 使用easy_thumbnails压缩上传的图片方法
Jul 26 Python
python 实现list或string按指定分段
Dec 25 Python
python使用turtle库绘制奥运五环
Feb 24 Python
Python读入mnist二进制图像文件并显示实例
Apr 24 Python
解决Python数据可视化中文部分显示方块问题
May 16 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
上海永华YH-R296(华普R-96)12波段立体声收音机的分析和打理
2021/03/02 无线电
PHP使用CURL_MULTI实现多线程采集的例子
2014/07/29 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
2019/07/24 PHP
腾讯与新浪的通过IP地址获取当前地理位置(省份)的接口
2010/07/26 Javascript
AlertBox 弹出层信息提示框效果实现步骤
2010/10/11 Javascript
Javascript验证上传图片大小[前台处理]
2014/07/18 Javascript
javascript实现捕捉键盘上按下的键
2015/05/05 Javascript
jQuery 判断图片是否加载完成方法汇总
2015/08/10 Javascript
javascript实现别踩白块儿小游戏程序
2015/11/22 Javascript
jquery彩色投票进度条简单实例演示
2020/07/23 Javascript
Bootstrap多级导航栏(级联导航)的实现代码
2016/03/08 Javascript
javascript数组拍平方法总结
2018/01/20 Javascript
vue-lazyload图片延迟加载插件的实例讲解
2018/02/09 Javascript
vue iview实现动态路由和权限验证功能
2018/04/17 Javascript
百度小程序自定义通用toast组件
2019/07/17 Javascript
操作按钮悬浮固定在微信小程序底部的实现代码
2019/08/02 Javascript
使用layui定义一个模块并使用的例子
2019/09/14 Javascript
IntelliJ IDEA编辑器配置vue高亮显示
2019/09/26 Javascript
JavaScript判断数组类型的方法
2019/10/23 Javascript
Python的Django框架中设置日期和字段可选的方法
2015/07/17 Python
详解Python中映射类型的内建函数和工厂函数
2015/08/19 Python
Python实现更改图片尺寸大小的方法(基于Pillow包)
2016/09/19 Python
Python+Wordpress制作小说站
2017/04/14 Python
Python中文分词工具之结巴分词用法实例总结【经典案例】
2017/04/15 Python
Python 异常处理的实例详解
2017/09/11 Python
Python无损音乐搜索引擎实现代码
2018/02/02 Python
python openCV自制绘画板
2020/10/27 Python
python uuid生成唯一id或str的最简单案例
2021/01/13 Python
劳资人员岗位职责
2013/12/19 职场文书
留学自荐信写作方法
2014/01/27 职场文书
总经理司机职责
2014/02/02 职场文书
学校卫生检查制度
2014/02/03 职场文书
领导班子作风建设年个人整改措施
2014/09/29 职场文书
房屋出售授权委托书
2014/10/12 职场文书
省级三好学生主要事迹材料
2015/11/03 职场文书
MySQL表字段数量限制及行大小限制详情
2022/07/23 MySQL