• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

go语言并发获取hls,测试流媒体服务的拉流压力

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

前两天,我们的开发的兄弟们终于将我们的流媒体整体方案实现并部署了,虽然都是用的开源的项目,但是我们内部还是要测试服务表现的,这个任务就被扔给我了。

先不看内部各个链路的性能损耗,先测试单源,多路点播取流的场景。

使用golang,写程序如下:

package main

import (
	"bytes"
	"fmt"
	"io"
	"net/http"
	"os"
	"regexp"
	"strconv"
	"time"
)

/*this application is used to get rtsp stream data for me*/

func main() {
	var Host = ""
	var Tim = 1
	for _, a := range os.Args[1:] {
		if string(a) == "--help" {
			fmt.Println("用法为-g 输入goal")
			fmt.Println("用法为-t 输入threat num")
		}
		if string(a) == "/?" {
			fmt.Println("用法为-g 输入goal")
			fmt.Println("用法为-t 输入threat num")
		}
		m, err := regexp.MatchString("^-[g,t]", string(a))
		reg := regexp.MustCompile(`^-[g,t]`)
		if m {
			host := reg.FindAllString(string(a), -2)[0]
			if host == "-g" {
				pp := []rune(a)
				Host = string(pp[2:len(pp)])
			}
			if host == "-t" {
				pp := []rune(a)
				tim, err := strconv.Atoi(string(pp[2:len(pp)]))
				Tim = tim
				if err != nil {
					fmt.Printf("输入数字哦")
					return
				}
			}
		}
		if err != nil {
			fmt.Println(err)
			return
		}
	}

	if Host == "" {
		fmt.Println("please input /? for help")
		fmt.Println(string(Tim))
		return
	} else {
		for i := 1; i < Tim; i++ {
			fmt.Printf("拉起第%d个文件流\n", i)
			go getHttpHls(Host)
		}
		fmt.Println("拉起主线程文件流")
		getHttpHls(Host)
	}
}

func getHttpHls(h string) {
	req, _ := http.NewRequest("GET", h, nil)
	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		// handle error
		fmt.Println(err)
		return
	}
	defer resp.Body.Close()

	//here we open a loop to read stream
	buffer := make([]byte, 8192)
	for {
		time.Sleep(500)
		_, _ = resp.Body.Read(buffer)
	}
}

  

 使用步骤:
1、使用命令:go build get_hls.go,编译
2、使用:./get_hls  -ghttp://127.0.0.1:8082/live/20_unv01_1.flv -t1000,通过这样的方式来获取1000个流,并将流直接抛弃
 

 

 

 

说明:

1、我这边自己到网上下载了一个流媒体拉流的工具,使用的时候,流媒体拉流工具的性能消耗比我的srs消耗还要大,而且一段时间会自动kill掉,所以写以上程序来埋坑

2、因为公司局域网是百兆局域网,是没有办法测试出我们服务的压力的,所以这里都是使用还回的方式在用,单路码率为4Mbps左右,拉22路码流就上不去了

 

上面这个程序很鄙陋,希望能够有高手予以指导,程序中,后面的buffer是读取到垃圾里面的,但是如果能够不读取,直接new处理一下,应该效果更好。

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
GO语言入门发布时间:2022-07-10
下一篇:
Go get unrecognized import path &quot;gopkg.in/yaml.v2&quot;发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap