go語言視頻直播服務(wù),go語言教學(xué)視頻

go語言適合做什么

go語言適用的領(lǐng)域有:

專業(yè)領(lǐng)域包括成都網(wǎng)站制作、做網(wǎng)站、外貿(mào)營銷網(wǎng)站建設(shè)、商城網(wǎng)站開發(fā)、微信營銷、系統(tǒng)平臺開發(fā), 與其他網(wǎng)站設(shè)計及系統(tǒng)開發(fā)公司不同,創(chuàng)新互聯(lián)建站的整合解決方案結(jié)合了幫做網(wǎng)絡(luò)品牌建設(shè)經(jīng)驗和互聯(lián)網(wǎng)整合營銷的理念,并將策略和執(zhí)行緊密結(jié)合,為客戶提供全網(wǎng)互聯(lián)網(wǎng)整合方案。

Go語言主要用作服務(wù)器端開發(fā),其定位是用來開發(fā)“大型軟件”的,適合于很多程序員一起開發(fā)大型軟件,并且開發(fā)周期長,支持云計算的網(wǎng)絡(luò)服務(wù)。

Go語言作為服務(wù)器編程語言,很適合處理日志、數(shù)據(jù)打包、虛擬機(jī)處理、文件系統(tǒng)、分布式系統(tǒng)、數(shù)據(jù)庫代理等;網(wǎng)絡(luò)編程方面,Go語言廣泛應(yīng)用于Web應(yīng)用、API應(yīng)用、下載應(yīng)用等;除此之外,Go語言還可用于內(nèi)存數(shù)據(jù)庫和云平臺領(lǐng)域,目前國外很多云平臺都是采用Go開發(fā)。

Go語言能夠讓程序員快速開發(fā),并且在軟件不斷的增長過程中,它能讓程序員更容易地進(jìn)行維護(hù)和修改。它融合了傳統(tǒng)編譯型語言的高效性和腳本語言的易用性和富于表達(dá)性。

Go語言作為一門大型項目開發(fā)語言,在很多大公司相繼使用,甚至完全轉(zhuǎn)向Go開發(fā),其中代表有Google、Facebook、騰訊、百度、阿里巴巴、京東、小米以及360、美團(tuán)、滴滴以及新浪等,因此,Go語言的開發(fā)前景還是很不錯的!

Go 語言自我提升 (三次握手 - 四次揮手 - TCP狀態(tài)圖 - udp - 網(wǎng)絡(luò)文件傳輸)

三次握手:

1. 主動發(fā)起連接請求端(客戶端),發(fā)送 SYN 標(biāo)志位,攜帶數(shù)據(jù)包、包號

2. 被動接收連接請求端(服務(wù)器),接收 SYN,回復(fù) ACK,攜帶應(yīng)答序列號。同時,發(fā)送SYN標(biāo)志位,攜帶數(shù)據(jù)包、包號

3. 主動發(fā)起連接請求端(客戶端),接收SYN 標(biāo)志位,回復(fù) ACK。

被動端(服務(wù)器)接收 ACK —— 標(biāo)志著 三次握手建立完成( Accept()/Dial() 返回 )

四次揮手:

1. 主動請求斷開連接端(客戶端), 發(fā)送 FIN標(biāo)志,攜帶數(shù)據(jù)包

2. 被動接受斷開連接端(服務(wù)器), 發(fā)送 ACK標(biāo)志,攜帶應(yīng)答序列號。 —— 半關(guān)閉完成。

3. 被動接受斷開連接端(服務(wù)器), 發(fā)送 FIN標(biāo)志,攜帶數(shù)據(jù)包

4. 主動請求斷開連接端(客戶端), 發(fā)送 最后一個 ACK標(biāo)志,攜帶應(yīng)答序列號?!?發(fā)送完成,客戶端不會直接退出,等 2MSL時長。

等 2MSL待目的:確保服務(wù)器 收到最后一個ACK

滑動窗口:

通知對端本地存儲數(shù)據(jù)的 緩沖區(qū)容量?!?write 函數(shù)在對端 緩沖區(qū)滿時,有可能阻塞。

TCP狀態(tài)轉(zhuǎn)換:

1. 主動發(fā)起連接請求端:

CLOSED —— 發(fā)送SYN —— SYN_SENT(了解) —— 接收ACK、SYN,回發(fā) ACK —— ESTABLISHED (數(shù)據(jù)通信)

2. 主動關(guān)閉連接請求端:

ESTABLISHED —— 發(fā)送FIN —— FIN_WAIT_1 —— 接收ACK —— FIN_WAIT_2 (半關(guān)閉、主動端)

—— 接收FIN、回復(fù)ACK —— TIME_WAIT (主動端) —— 等 2MSL 時長 —— CLOSED

3. 被動建立連接請求端:

CLOSED —— LISTEN —— 接收SYN、發(fā)送ACK、SYN —— SYN_RCVD —— 接收 ACK —— ESTABLISHED (數(shù)據(jù)通信)

4. 被動斷開連接請求端:

ESTABLISHED —— 接收 FIN、發(fā)送 ACK —— CLOSE_WAIT —— 發(fā)送 FIN —— LAST_ACK —— 接收ACK —— CLOSED

windows下查看TCP狀態(tài)轉(zhuǎn)換:

netstat -an | findstr? 端口號

Linux下查看TCP狀態(tài)轉(zhuǎn)換:

netstat -an | grep? 端口號

TCP和UDP對比:?

TCP: 面向連接的可靠的數(shù)據(jù)包傳遞。 針對不穩(wěn)定的 網(wǎng)絡(luò)層,完全彌補(bǔ)。ACK

UDP:無連接不可靠的報文傳輸。 針對不穩(wěn)定的 網(wǎng)絡(luò)層,完全不彌補(bǔ)。還原網(wǎng)絡(luò)真實狀態(tài)。

優(yōu)點???????????????????????????????????????????????????????????? 缺點

TCP: 可靠、順序、穩(wěn)定 ???????????????????????????????????? 系統(tǒng)資源消耗大,程序?qū)崿F(xiàn)繁復(fù)、速度慢

UDP:系統(tǒng)資源消耗小,程序?qū)崿F(xiàn)簡單、速度快 ???????????????????????? 不可靠、無序、不穩(wěn)定

使用場景:

TCP:大文件、可靠數(shù)據(jù)傳輸。 對數(shù)據(jù)的 穩(wěn)定性、準(zhǔn)確性、一致性要求較高的場合。

UDP:應(yīng)用于對數(shù)據(jù)時效性要求較高的場合。 網(wǎng)絡(luò)直播、電話會議、視頻直播、網(wǎng)絡(luò)游戲。

UDP-CS-Server實現(xiàn)流程:

1.? 創(chuàng)建 udp地址結(jié)構(gòu) ResolveUDPAddr(“協(xié)議”, “IP:port”) —— udpAddr 本質(zhì) struct{IP、port}

2.? 創(chuàng)建用于 數(shù)據(jù)通信的 socket ListenUDP(“協(xié)議”, udpAddr ) —— udpConn (socket)

3.? 從客戶端讀取數(shù)據(jù),獲取對端的地址 udpConn.ReadFromUDP() —— 返回:n,clientAddr, err

4.? 發(fā)送數(shù)據(jù)包給 客戶端 udpConn.WriteToUDP("數(shù)據(jù)", clientAddr)

UDP-CS-Client實現(xiàn)流程:

1.? 創(chuàng)建用于通信的 socket。 net.Dial("udp", "服務(wù)器IP:port") —— udpConn (socket)

2.? 以后流程參見 TCP客戶端實現(xiàn)源碼。

UDPserver默認(rèn)就支持并發(fā)!

------------------------------------

命令行參數(shù): 在main函數(shù)啟動時,向整個程序傳參。 【重點】

語法: go run xxx.go ? argv1 argv2? argv3? argv4 。。。

xxx.exe:? 第 0 個參數(shù)。

argv1 :第 1 個參數(shù)。

argv2 :第 2 個參數(shù)。

argv3 :第 3 個參數(shù)。

argv4 :第 4 個參數(shù)。

使用: list := os.Args? 提取所有命令行參數(shù)。

獲取文件屬性函數(shù):

os.stat(文件訪問絕對路徑) —— fileInfo 接口

fileInfo 包含 兩個接口。

Name() 獲取文件名。 不帶訪問路徑

Size() 獲取文件大小。

網(wǎng)絡(luò)文件傳輸 —— 發(fā)送端(客戶端)

1.? 獲取命令行參數(shù),得到文件名(帶路徑)filePath list := os.Args

2.? 使用 os.stat() 獲取 文件名(不帶路徑)fileName

3.? 創(chuàng)建 用于數(shù)據(jù)傳輸?shù)?socket? net.Dial("tcp", “服務(wù)器IP+port”) —— conn

4.? 發(fā)送文件名(不帶路徑)? 給接收端, conn.write()

5.? 讀取 接收端回發(fā)“ok”,判斷無誤。封裝函數(shù) sendFile(filePath, conn) 發(fā)送文件內(nèi)容

6.? 實現(xiàn) sendFile(filePath,? conn)

1) 只讀打開文件 os.Open(filePath)

for {

2) 從文件中讀數(shù)據(jù)? f.Read(buf)

3) 將讀到的數(shù)據(jù)寫到socket中? conn.write(buf[:n])

4)判斷讀取文件的 結(jié)尾。 io.EOF. 跳出循環(huán)

}

網(wǎng)絡(luò)文件傳輸 —— 接收端(服務(wù)器)

1. 創(chuàng)建用于監(jiān)聽的 socket net.Listen() —— listener

2. 借助listener 創(chuàng)建用于 通信的 socket listener.Accpet()? —— conn

3. 讀取 conn.read() 發(fā)送端的 文件名, 保存至本地。

4. 回發(fā) “ok”應(yīng)答 發(fā)送端。

5. 封裝函數(shù),接收文件內(nèi)容 recvFile(文件路徑)

1) f = os.Create(帶有路徑的文件名)

for {

2)從 socket中讀取發(fā)送端發(fā)送的 文件內(nèi)容 。 conn.read(buf)

3)? 將讀到的數(shù)據(jù) 保存至本地文件 f.Write(buf[:n])

4)? 判斷 讀取conn 結(jié)束, 代表文件傳輸完成。 n == 0? break

}

go是什么編程語言?主要應(yīng)用于哪些方面?

Go語言由Google公司開發(fā),并于2009年開源,相比Java/Python/C等語言,Go尤其擅長并發(fā)編程,性能堪比C語言,開發(fā)效率肩比Python,被譽為“21世紀(jì)的C語言”。

Go語言在云計算、大數(shù)據(jù)、微服務(wù)、高并發(fā)領(lǐng)域應(yīng)用應(yīng)用非常廣泛。BAT大廠正在把Go作為新項目開發(fā)的首選語言。

Go語言能干什么?

1、服務(wù)端開發(fā):以前你使用C或者C++做的那些事情,用Go來做很合適,例如日志處理、文件系統(tǒng)、監(jiān)控系統(tǒng)等;

2、DevOps:運維生態(tài)中的Docker、K8s、prometheus、grafana、open-falcon等都是使用Go語言開發(fā);

3、網(wǎng)絡(luò)編程:大量優(yōu)秀的Web框架如Echo、Gin、Iris、beego等,而且Go內(nèi)置的 net/http包十分的優(yōu)秀;

4、Paas云平臺領(lǐng)域:Kubernetes和Docker Swarm等;

5、分布式存儲領(lǐng)域:etcd、Groupcache、TiDB、Cockroachdb、Influxdb等;

6、區(qū)塊鏈領(lǐng)域:區(qū)塊鏈里面有兩個明星項目以太坊和fabric都使用Go語言;

7、容器虛擬化:大名鼎鼎的Docker就是使用Go語言實現(xiàn)的;

8、爬蟲及大數(shù)據(jù):Go語言天生支持并發(fā),所以十分適合編寫分布式爬蟲及大數(shù)據(jù)處理。

gopro連接什么屏幕直播

gopro連接電腦普通屏幕直播,比如三星顯示器。而且現(xiàn)在gopro不僅可以連電腦直播了,連手機(jī)都可以。說在直播app已經(jīng)開發(fā)出了手機(jī)直播支持gopro接入的功能了。可以去試試直播。

GoPro Hero 7 Black:支持GPS,10米防水,語音控制,視頻直播,視頻穩(wěn)定:HyperSmooth。

GoPro Hero8 Black:支持GPS,10米防水,語音喚醒,視頻穩(wěn)定:HyperSmooth2.0。

主要優(yōu)勢:

新的GoPro相機(jī)提供了多種裁剪模式,比如超寬的170度視角、中等的127度視角和窄的79度視角,Hero6 Black和新款的Hero7 Black甚至有模仿傳統(tǒng)變焦鏡頭的觸控變焦功能,利用不同的視野是另一種混合你的照片的方法。

別忘了你甚至可以把你的GoPro倒掛起來,它會自動翻轉(zhuǎn)鏡頭,以正確的方式顯示它,這里有一個簡單的方法來記住你應(yīng)該選擇哪個視場:如果你不確定你的框架,想知道你得到了所有的動作,選擇超寬,當(dāng)你對畫面有了更多的控制,想要專注于某個特定的主題或場景區(qū)域時,較窄的視野是很好的選擇。

rtsp流瀏覽器播放方案

rtsp流在主流瀏覽器并不支持直接播放。比如大華的視頻流:rtsp://admin:123456@

192.168.10.129/cam/realmonitor?channel=1subtype=0,用vlc可以直接播放。但在瀏覽器會報ERR_UNKNOWN_URL_SCHEME。那如何在瀏覽器中播放呢。

以下列出幾種方案。

1、安裝插件(chrome最新版基本都不支持)

類如:kurento,vlc插件(谷歌瀏覽器版本41以下),vgx插件(不支持高版本,chrome72.0版本可用)等。

2、安裝軟件(中間件,基本都付費)

類如:Appemit(調(diào)用vlc插件播放rtsp),可以免安裝的,目前只能windows,免費版會有提示。

猿大師中間件(底層調(diào)用VLC的ActiveX控件,實現(xiàn)在主流瀏覽器網(wǎng)頁中內(nèi)嵌播放多路RTSP的實時視頻流),中間件收費的。

PluginOK(牛插)中間件。底層調(diào)用ActiveX控件VlcOcx.dll。(商業(yè)用途需付費使用)

3、服務(wù)器拉流轉(zhuǎn)發(fā)及協(xié)議轉(zhuǎn)換

示意圖如下所示:

推流--------------服務(wù)器轉(zhuǎn)發(fā)--------------拉流

方法一覽:

a,vlc軟件串流到http協(xié)議 ,網(wǎng)頁顯示幾個視頻需啟動幾個vlc,只適合應(yīng)急場景。

b,html5 + websocket_rtsp_proxy 實現(xiàn)視頻流直播 ,基于MSE(Media Source Extensions,W3C),擴(kuò)展H5的功能。

步驟:服務(wù)器安裝streamedian服務(wù)器,客戶端通過video標(biāo)簽播放。

原型圖:

價格:

c.基于nginx的rsmp轉(zhuǎn)發(fā)

基于nginx實現(xiàn)rtmp轉(zhuǎn)化,用flash實現(xiàn)播放。由于flash目前大多瀏覽器默認(rèn)禁用,不推薦此方式。

步驟:安裝ffmpeg工具,安裝nginx。

另外nginx-rtmp-module也支持HLS協(xié)議,可以搭建基于hls的直播服務(wù)器。

d.rtsp轉(zhuǎn)hls播放,通過ffmpeg轉(zhuǎn)碼

步驟:安裝ffmpeg工具,ffmpeg轉(zhuǎn)碼。

形如:

ffmpeg -i "rtsp://admin:123456@192.168.10.129/cam/realmonitor?channel=1subtype=0" -c copy -f hls -hls_time 2.0 -hls_list_size 0 -hls_wrap 15 "D:/hls/test.m3u8"

缺點是直播流延時很大,對實時要求比較高的不滿足要求。

案例:基于EasyDarwin拾建轉(zhuǎn)碼服務(wù)器。參考地址:

通過存儲的m3u8去讀取。

e.websocket代理推送,F(xiàn)FMPEG轉(zhuǎn)碼

此方法與a,b類似。但更實用。

以下提供兩種方案:

(1)Gin+WebSocket+FFMPEG實現(xiàn)rtsp轉(zhuǎn)碼,參考:

通過FFMPEG把rstp轉(zhuǎn)成http,ginrtsp作為轉(zhuǎn)發(fā)服務(wù)器,但需要自己寫相應(yīng)接口,需要了解go語言。

(2)node + ffmpeg + websocket + flv.js,參考:

步驟:在node服務(wù)中建立websocket;通過fluent-ffmpeg轉(zhuǎn)碼,將RTSP 流轉(zhuǎn)為flv格式;通過flv.js連接websocket,并對獲取的flv格式視頻數(shù)據(jù)進(jìn)行渲染播放。

import WebSocket from 'ws'import webSocketStream from 'websocket-stream/stream'import ffmpeg from 'fluent-ffmpeg'// 建立WebSocket服務(wù)const wss = new WebSocket.Server({ port: 8888, perMessageDeflate: false })// 監(jiān)聽連接wss.on('connection', handleConnection)// 連接時觸發(fā)事件function handleConnection (ws, req) {? // 獲取前端請求的流地址(前端websocket連接時后面帶上流地址)? const url = req.url.slice(1)? // 傳入連接的ws客戶端 實例化一個流? const stream = webSocketStream(ws, { binary: true })? // 通過ffmpeg命令 對實時流進(jìn)行格式轉(zhuǎn)換 輸出flv格式? const ffmpegCommand = ffmpeg(url)? ? .addInputOption('-analyzeduration', '100000', '-max_delay', '1000000')? ? .on('start', function () { console.log('Stream started.') })? ? .on('codecData', function () { console.log('Stream codecData.') })? ? .on('error', function (err) {? ? ? console.log('An error occured: ', err.message)? ? ? stream.end()? ? })? ? .on('end', function () {? ? ? console.log('Stream end!')? ? ? stream.end()? ? })? ? .outputFormat('flv').videoCodec('copy').noAudio()? stream.on('close', function () {? ? ffmpegCommand.kill('SIGKILL')? })? try {? ? // 執(zhí)行命令 傳輸?shù)綄嵗髦蟹祷亟o客戶端? ? ffmpegCommand.pipe(stream)? } catch (error) {? ? console.log(error)? }}

優(yōu)點全部基于js。前端即可搞定。

參考:

極客時間的GO語言進(jìn)階訓(xùn)練營怎么樣?

極客時間的GO語言進(jìn)階訓(xùn)練營是很不錯,知識內(nèi)容涉及比較全面,從編程語言到中間件、系統(tǒng)設(shè)計再到架構(gòu)都安排了相關(guān)課程,老師們在課程中不講語法和用法,重點傳遞設(shè)計原理和最佳實踐,講課的過程中貼合工作場景,分享真實的干貨案例,啟發(fā)學(xué)員的思維讓其自主進(jìn)行學(xué)習(xí),還幫學(xué)員建立系統(tǒng)大局觀,有助于學(xué)員深層次的提升。

網(wǎng)站題目:go語言視頻直播服務(wù),go語言教學(xué)視頻
轉(zhuǎn)載源于:http://muchs.cn/article2/hcjeic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、用戶體驗、網(wǎng)站維護(hù)品牌網(wǎng)站制作、網(wǎng)站策劃、移動網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司