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

Posted wency

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go语言并发获取hls,测试流媒体服务的拉流压力相关的知识,希望对你有一定的参考价值。

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

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

使用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个文件流 ", 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处理一下,应该效果更好。

 

技术分享图片

 

以上是关于go语言并发获取hls,测试流媒体服务的拉流压力的主要内容,如果未能解决你的问题,请参考以下文章

Windows实现流媒体服务器搭建 ngnix+rtmp+ffmpg+hls实现播放rtmp和HLS/m3u8直播流

流媒体服务海康摄像头RTSP视频推流转码拉流直播综合应用:VLC+FFMPEG+Nginx实现RTSP到RTMP网页直播

Qt推流程序自动生成网页远程查看实时视频流(视频文件/视频流/摄像头/桌面转成流媒体rtmp+hls+webrtc)

从MediaRecord录像中读取H264参数

TSINGSEE青犀视频开发单通道 Go WebRTC服务端拉流接口无响应导致程序堵塞如何处理?

Mac搭建Nginx流媒体服务器,进行推流,拉流