项目原因,测试了Pion流媒体服务器,将测试过程记录一下,方便日后查阅。

1)概述

Pion是一套WebRtc框架API,由Go语言编写。原文的描述:A pure Go implementation of the WebRTC API。大部分人对于没有main或者多个main函数的go工程不太好理解,本项目就是其一。也是搜索了好多资料才明白如何使用。总体来说使用起来还是相对比较简单,起码比kurento的API简单,自然也没有kurento功能强大。

2)代码获取

https://github.com/pion/webrtc

3)代码结构

示例代码均在examples文件夹下,从示例看起更加容易上手。

4)准备工作

CMD进入项目目录,通过go mod 更新项目依赖。不清楚的,可以自行搜索。

go mod tidy

5)运行

cmd进入examples目录,运行“go run examples.go”。

在浏览器输入“http://localhost:8081”,如下图所示。

Data Channels、Data Channels Create、Data Channels Close、Data Channels Detach四个模块是数据通信模块,用于收发消息使用。

Reflect模块,反射模块,自己发送的音视频数据,服务端再返回给客户端显示。

Pion to Poin模块,主要用于服务间数据互通。

Play from Disk模块:通过webrtc播放本地的音视频文件。

Broadcast模块:用于多调一,一人发布视频,多人调阅查看。

RTP Forwarder:用于将webrtc视频流转化为RTP视频流,发送到固定的端口。

RTP to WebRtc:从固定端口接收RTP视频流,并将其转化为Webrtc视频流。

其他的几个模块没有测试,不再介绍。本次测试重点内容为音视频测试,操作步骤和音视频的类似。

6)测试

Pion客户端与服务端互通的核心思想是,SDP的交换(SDP通过base64编码)。只要客户端与服务端SDP能够交换成功,双方便可以连接成功。

测试1:Broadcast模块测试

a)Web打开broadcast模块,选择“Publish a Broadcast”。Browser base64 Session Description中就是网页本地的SDP信息。

注:网页打开一会后才会出现。如要加速,可将jsfiddle目录下的demo.js中的iceservers删除掉,对应go文件中也是同样的方法加速sdp生成,但是公网测试时,需要搭建一个可用的ICE服务器。

b)cmd进入Broadcast目录下,输入go run main.go。运行服务。

c)在postman中输入http://localhost:8080/sdp,POST方法,在body中选择raw,将网页中的sdp粘贴进入,之后点击发送请求。(官方推荐的是curl localhost:8080/sdp -d "$BROWSER_OFFER"`命令发送请求,但windows平台还是postman比较方便。)

d)在go界面便会生成Answer sdp消息,在cmd界面右键标记,选择cmd窗口生成的SDP消息,再点击右键复制。(无需调整格式)将answer sdp复制到web界面的Golang base64 Session Description文本框中,点击“Start session”,如果出现connected,则说明视频发布成功。

e)新打开web界面访问Broadcast->Join a Broadcast。

f)将界面生成的Browser base64 Session Description复制出来。

g)重新执行步骤c,在cmd页面复制新生成的answer sdp消息。

h)将复制的sdp消息填入Golang base64 Session Description文本框中,点击“start Session”按钮,即可查看到Publish发布的视频。

测试2:RTP Forwarder模块发送RTP,RTP to WebRtc接收RTP数据并播放。

a)Web打开RTP Forwarder模块,界面如下图所示。

Browser base64 Session Description中就是网页本地的SDP信息。

let pc = new RTCPeerConnection({iceServers: [{urls: 'stun:stun.l.google.com:19302'}]
})修改成如下:
let pc = new RTCPeerConnection()

b)在rtp-forward文件夹中,创建a.txt,将网页中Browser base64 Session Description对应文本框内的文本粘贴进入保存。

c)cmd进入rtp-forward文件夹,go run main.go<a.txt。

右键标记,选择cmd窗口生成的SDP消息,再点击右键复制。(无需调整格式)

d)回到刚才的网页,将SDP内容直接粘贴到Golang base64 Session Description文本框中,点击“Start Session”即可建立连接。

e)界面出现“connected”,表示连接成功。在该模块的main.go中查看rtp的接收端口。

f)新打开浏览器,打开Broadcast->Join a Broadcast来查看rtp to webrtc输出的视频流。

复制该页面生成的Browser base64 Session Description,将其复制到rtp to webrtc模块的文件夹中创建a.txt,保存。

g)修改rtp to webrtc模块的main.go文件夹中监听的rtp端口,和上面的端口保持一致。

音频端口,暂且不处理。

h)cmd 进入rtp to webrtc目录,go run main.go< a.txt。运行程序。

i)将生成的answer sdp,同样的方法,复制,粘贴到broadcast页面的Golang base64 Session Description文本框中,点击查看,即可查看到对端的视频。

7)总结

针对上述测试2,看起来好像是多余的无用过程,但是如果能将webrtc转化为rtp,我们是不是可以对rtp做一些处理后,在通过rtp to webrtc发布出去呢。毕竟我们对于rtp更加的熟悉,留给有需要的人思考吧。

总体来说,Pion还是使用起来还是比较简单方便的,没有复杂的交互流程,仅需要双方交换sdp即可联通。但有一个问题是Pion不支持trickle ice。在存在私网穿越的应用场景下,可能会耗费更多的ICE candidate搜集时间以及连接建立时间。

Pion流媒体服务测试相关推荐

  1. GB28181开放流媒体服务平台LiveGBS实际测试时问题排查

    背景 在安防监控行业中GB28181协议可以实现获取直播流.录像.报警信息.通道状态等各种信息,基本满足了监控行业中的全部需求.LiveGBS就是一套开放的GB28181流媒体服务平台,提供用户私有化 ...

  2. 使用LoadRunner测试WMS

    LoadRunner是一款非常强大的测试工具,本文为笔者在对LoadRunner有了初步了解后对WMS的压力测试过程,因为接触时间比较短,不对之处欢迎大家指出.由于Licence的原因,对WMS的测试 ...

  3. TikTok测试三分钟视频、Reddit首次公布DAU、谷歌解雇人工智能领头人、年度最受欢迎应用|Decode the Week...

    Decode the Week≠音视频技术周刊  从独特的自我逃向平均的他者--No Way. Picture from Mikko Heino News Briefing 1. 消息应用程序的使用量 ...

  4. 天猫、京东双十一总交易额7697亿元;苹果测试可折叠iPhone显示屏,或将于2022年问世;.NET 5.0发布|极客头条

    整理 | 郑丽媛 头图 | CSDN 下载自东方 IC 快扫描二维码来收听极客头条音频版吧,智能播报由出门问问「魔音工坊」提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早 ...

  5. 车载以太网测试知识点

      相比于传统总线技术,车载以太网不仅可以满足汽车制造商对带宽的需求同时还能降低车内的网络成本,是未来整车网络架构设计的趋势.目前,车载以太网主要用于诊断.车载信息娱乐系统(IV1)以及驾驶辅助系统. ...

  6. Go webrtc项目pion创始人专访 | Gopher Daily (2021.04.07) ʕ◔ϖ◔ʔ

    每日一谚:Go makes error handling as important as any other code Go技术生态 go webrtc项目pion的创始人专访 - https://w ...

  7. pion demo运行

    pion demo运行 pion介绍 运行 demo 拉 pion 代码 编译 运行 examples.exe 运行 data-channels.go pion介绍 pion 是 go 语言写的 we ...

  8. 【车载以太网】【测试】架构及测试工具

    什么是车载以太网 随着近年汽车电子的快速发展,车内ECU数量的持续增加,带宽需求也随之不断增长.对此,汽车制造商的电子系统.线束系统等成本也在提高.而相比于传统总线技术,车载以太网不仅可以满足汽车制造 ...

  9. windows 下用开源流媒体压力测试工具 rtmpstress 测试RTMP媒体服务器负载性能

    最近笔者的朋友需要部署流媒体服务作运营,从国外购买了几套流媒体服务器软件,该流媒体服务器软件是基于java开发的,他向笔者咨询,如何检测该流媒体服务器软件是否能支持1000以上并发,笔者建议找一个RT ...

最新文章

  1. java方法中 thread,Java中的線程Thread方法之---join()
  2. file input 点击没反应_动态input file多文件上传到后台没反应的解决方法!!!
  3. 字符串之字符判断以及字母的大小写转换
  4. linux服务器进虚拟机,初次登录 Linux 服务器马上要做的 9 件事|Linux 中国
  5. Python入门学习笔记(4)
  6. 英伟达RTX 2080 Ti值得买么?深度学习测试来了!
  7. 知乎回答:为什么微博很难起到社交的作用?
  8. NWT融资一百万,被老张嘲笑了
  9. 为什么 Math.min() 比 Math.max() 大?
  10. 《C陷阱与缺陷》学习笔记(1):这本书值得看吗?
  11. 世界杯要来了,先跟梅西来个热身吧_数字体验_新浪博客
  12. 6个步骤教你用Python解数独!(含实例代码)
  13. 怎么把画好的流程图插入到Word中?
  14. C++:编程题:魔兽世界之一:备战
  15. 计算机对学生的影响英语作文,电脑游戏对孩子学习及生活的影响英语作文
  16. C# Aplayer开发笔记(一)
  17. 18年程序员生涯,读了200多本编程书,挑出一些精华分享给大家
  18. PW5410A原厂低噪声DC-DC升压开关电容倍压器
  19. SQL语句 存在就更新不存在就插入
  20. c语言,从“hello word“开始//1

热门文章

  1. 平板电脑win10 android比较好,华为MateBook名不副实!Win10平板电脑最合适
  2. 经典垃圾收集器(三)
  3. 读取NTFS的USN(获取文件的历史操作记录,即使这个文件已被删除)
  4. python能代替ps吗_Python中怎么像PS一样处理图像
  5. 【最全】you-get和youtube-dl的安装和使用
  6. 已经提交到gitlab上的代码如何撤回
  7. CBS paper防伪安全纸
  8. 5G的速度到底能有多快
  9. Vue父传子详细教程
  10. ubuntu 20.04开启echo和daytime服务,亲测可用