go語言並發擷取hls,測試流媒體服務的拉流壓力

來源:互聯網
上載者:User

標籤:find   new   com   UI   輸入   bsp   for   自己   Golan   

前兩天,我們的開發的兄弟們終於將我們的流媒體整體方案實現並部署了,雖然都是用的開源的項目,但是我們內部還是要測試服務表現的,這個任務就被扔給我了。

先不看內部各個鏈路的效能損耗,先測試單源,多路點播取流的情境。

使用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處理一下,應該效果更好。

 

 

go語言並發擷取hls,測試流媒體服務的拉流壓力

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.