WebRTC学习笔记七 pion/webrtc

news2024/11/24 20:35:36

一、Usage用法

1.使用Go Modules

Go Modules are mandatory for using Pion WebRTC. So make sure you set export GO111MODULE=on, and explicitly specify /v2 or /v3 when importing.

2.常见示例

example applications contains code samples of common things people build with Pion WebRTC.

3.更多示例

example-webrtc-applications contains more full featured examples that use 3rd party libraries.

4.真实案例

awesome-pion contains projects that have used Pion, and serve as real world examples of usage.

5.GoDoc

GoDoc is an auto generated API reference. All our Public APIs are commented.

6.FAQ

FAQ has answers to common questions. If you have a question not covered please ask in Slack we are always looking to expand it.

7.我还没搞清这些特性有没有实现……

Now go build something awesome! Here are some ideas to get your creative juices flowing:

Send a video file to multiple browser in real time for perfectly synchronized movie watching. Send a webcam on an embedded device to your browser with no additional server required! Securely send data between two servers, without using pub/sub. Record your webcam and do special effects server side. Build a conferencing application that processes audio/video and make decisions off of it. Remotely control a robots and stream its cameras in realtime.

二、Features特性

1.PeerConnection API

  • Go implementation of webrtc-pc and webrtc-stats

  • DataChannels

  • Send/Receive audio and video

  • Renegotiation 重连??

  • Plan-B and Unified Plan

  • SettingEngine for Pion specific extensions

2.Connectivity

  • Full ICE Agent

  • ICE Restart

  • Trickle ICE ??

  • STUN

  • TURN (UDP, TCP, DTLS and TLS)

  • mDNS candidates

3.DataChannels

  • Ordered/Unordered 有序/无序

  • Lossy/Lossless 有损/无损

4.Media

  • API with direct RTP/RTCP access

  • Opus, PCM, H264, VP8 and VP9 packetizer

  • API also allows developer to pass their own packetizer

  • IVF, Ogg, H264 and Matroska provided for easy sending and saving

  • getUserMedia implementation (Requires Cgo)

  • Easy integration with x264, libvpx, GStreamer and ffmpeg.

  • Simulcast SFU的概念

  • SVC SFU的概念

  • NACK 断线重连??

  • Full loss recovery and congestion control is not complete, see pion/interceptor for progress

  • See ion for how an implementor can do it today

5.Security

  • TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 and TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA for DTLS v1.2

  • SRTP_AEAD_AES_256_GCM and SRTP_AES128_CM_HMAC_SHA1_80 for SRTP

  • Hardware acceleration available for GCM suites

【学习地址】:

FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
【文章福利】:

免费领取更多音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击1079654574加群领取哦~

  

三、Samples

1.使用go run examples.go启动webserver,然后打开127.0.0.1:8080

2.部分示例需要复制浏览器的SDP,手动生成Go服务器的SDP再复制回来

3.Linux/macOS参照readme

Run echo $BROWSER_SDP | insertable-streams

个人推测,有可能是Go的环境变量没配置好,有点麻烦……

4.Windows参照readme

  • Paste the SessionDescription into a file.

  • Run

    insertable-streams < my_file

    使用power shell不行

使用Cmd是可以的

将生成的SDP复制到Golang base64 Session Description即可连接

四、ION

ION的来由和发展https://zhuanlan.zhihu.com/p/206492402 ION-SFU整体流程https://zhuanlan.zhihu.com/p/258559751

五、源码阅读

https://github.com/63isOK/pion-log

说明:

  • 粉底是第三方库,天蓝底是pion的库

  • 红色框中的randutil/testify/logging,是基础库,很多库都依赖这3个库

分析:

  • 核心都是以x/net库为中心,一步步扩展

  • 直接依赖x/net的有4个库,transport/mdns/ice/dtls

    • 其中mdns/ice/dtls都依赖transport

    • ice依赖dtls/mdns

    • 总的来说.ice依赖mdns/dtls,她们都依赖transport

    • 依赖x/net的库,要么使用了网络连接,要么使用了网络工具库的功能

  • transport作为传输对象的封装,有以下库使用

    • quic, quic协议的实现

    • dtls, udp 安全传输协议的实现

    • srtp, 安全rtp传输协议的实现

    • ice, p2p连接解决方案的实现

    • turn, p2p中继协议的实现

    • mdns, 多播dns协议的实现

    • datachannel/sctp, webrtc数据传输通道的实现

    • transport作为传输对象的封装,屏蔽了底层网络传输细节

      • 让webrtc上层诸多传输协议复用,大大提高了效率

  • 按webrtc功能分

    • datachannel/sctp 对应webrtc datachannel

    • srtp/rtp/rtcp 对应webrtc媒体数据的传输

    • ice 对应p2p连通性解决方案

    • dlts 对应udp安全传输

源码阅读顺序:

  • 基础公共库

    • randutil

    • testify

    • logging

  • 基础库

    • x/net

    • transport

    • dtls

  • p2p

    • stun/turn

    • ice

  • rtp

    • rtp/rtcp/srtp

    • interceptor

  • sdp

  • 其他功能

    • mdns

    • datachannel/sctp

    • agoutil

    • quic

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/48809.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Web3.0带来天翻地覆的变化?全面科普!所谓的Web3.0到底是什么?

Web3.0在2021年尾声突然蹿红&#xff0c;在美国国会的听证会里&#xff0c;一句“我们如何确保web3革命发生在美国”引发了大家对于Web3.0的关注&#xff0c;而后马斯克一篇内容为“有人看过web3.0吗? 我没有找到”的推文&#xff0c;将关于Web3.0的讨论推向了高潮。 甚至于这…

零基础入门JavaWeb——CSS相关知识

一、CSS的作用 SS是用于设置HTML页面标签的样式&#xff0c;用于美化HTML页面。 二、CSS的引入方式 2.1 行内样式 在要设置样式的标签中添加style属性&#xff0c;编写css样式&#xff1b;行内样式仅对当前标签生效。 <div style"border: 1px solid red;width: 10…

「MySQL高级篇」SQL优化

大家好&#xff0c;我是Zhan&#xff0c;一名个人练习时长一年半的大二后台练习生&#xff0c;最近在学MySQL高级篇&#xff0c;欢迎各路大佬一起交流讨论 &#x1f449;本篇速览 在前面对索引的的学习中&#xff0c;我们学习到了从MySQL“底层”优化了SQL执行查询的算法&…

认识微服务

认识微服务&#xff1a; 背景&#xff1a;随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。 这些架构之间有怎样的差别呢&#xff1f; 单体架构&#xff1a; 单体架构&#xff1a;将业务的所有功…

颜色的感知

人体内有三种颜色感知细胞&#xff0c;能感知红、绿、蓝三种颜色。 人体内还有一种光强感知细胞&#xff0c;这种关光的波长刚好和绿光接近。 椎状感应颜色 柱状感应强度。

[附源码]Python计算机毕业设计Django的专业技能认证系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

RocketMQ 的消费者类型详解与最佳实践

作者&#xff1a;凌楚 在 RocketMQ 5.0 中&#xff0c;更加强调了客户端类型的概念&#xff0c;尤其是消费者类型。为了满足多样的 RocketMQ 中一共有三种不同的消费者类型&#xff0c;分别是 PushConsumer、SimpleConsumer 和 PullConsumer。不同的消费者类型对应着不同的业务…

AI美颜SDK算法详解

AI美颜SDK是近几年兴起的新兴美颜方式&#xff0c;区别于传统的美颜工具&#xff0c;AI美颜采用人工智能的深度学习算法实现智能化美颜&#xff0c;下文小编将为大家讲解一下AI美颜SDK相关的知识。 一、与传统美颜的区别之处 从宏观角度来讲&#xff0c;AI美颜技术与传统美颜…

高维多元时序数据聚类

1. 简介 收集数据的能力不断增强&#xff0c;使我们有可能收集大量的异构数据。在可用的异构数据中&#xff0c;时间序列代表着尚未被充分探索的信息母体。当前的数据挖掘技术在分析时间序列时存在多个缺点&#xff0c;尤其是在应同时分析多个时间序列&#xff08;即多维时间序…

C# Winform控件库分享,免费开源,支持中文!(附DLL及教程)

这款控件包是基于MaterialSkin2二次开发的&#xff0c;可以更换想要的皮肤主题&#xff0c;一键转换暗色系&#xff0c;还拥有非常炫酷的动画&#xff0c;非常好看&#xff0c;原本的MaterialSkin2是国外团队开发的&#xff0c;不支持中文&#xff0c;所以我在里面加了几款中文…

springboot学生宿舍报修换宿管理系统-宿管

宿舍管理系统设计与实现由管理员和学生、宿管交互构成。学生对于本系统的使用&#xff0c;学生可以通过系统注册、登录&#xff0c;修改个人信息&#xff0c;查看学生宿舍、消息通知、换宿申请等功能。 宿管对于本系统的使用&#xff0c;宿管可以通过系统登录&#xff0c;修改个…

RabbitMQ如何确保消息发送 ? 消息接收?

发送方确认机制&#xff1a; 信道需要设置为 confirm 模式&#xff0c;则所有在信道上发布的消息都会分配⼀个唯⼀ ID。⼀旦消息被投递到queue&#xff08;可持久化的消息需要写⼊磁盘&#xff09;&#xff0c;信道会发送⼀个确认给⽣产者&#xff08;包含消息唯⼀ ID&#xff…

Codeforces Round #719 (Div. 3) E. Arranging The Sheep

翻译&#xff1a; 你正在玩“安排羊”游戏。这个游戏的目标是让羊排好队。游戏中的关卡是由长度为&#x1d45b;的字符串描述的&#xff0c;由角色的’组成。(空格)和*(绵羊)。在一个动作中&#xff0c;你可以移动任何羊向左或向右移动一个方格&#xff0c;如果相应的方格存在…

Paper写作怎么按照要求来具体分析?

许多留学生通常面临写学术Paper的问题&#xff0c;而大多数都不知道Paper如何写&#xff0c;因为写Paper并不是容易的事情。学术Paper应按照严格要求和规则撰写&#xff0c;而其应提供扎实&#xff0c;有争议的论点&#xff0c;然后由相关的无论是来自其他来源还是自己研究的证…

流媒体直播播放协议:HLS、RTMP、HTTP-FLV

流媒体直播播放协议&#xff1a;HLS、RTMP、HTTP-FLV一、推拉流二、协议介绍1. HLS2. RTMP3. HDL (HTTP-FLV)一、推拉流 在开始之前&#xff0c;先把流媒体服务中的双端关系说一下&#xff1a;在一个完整的流媒体服务框架中&#xff0c;角色就是“两端加一服”。推流端、拉流端…

httpclient

1.什么是httpclient HttpClient 是Apache Jakarta Common 下的子项目&#xff0c;可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包&#xff0c;并且它支持 HTTP 协议最新的版本和建议。 2.http请求&#xff08;结合spring的注解&#xff09; 2-1GET请…

相对位置编码之RPR式:《Self-Attention with Relative Position Representations》论文笔记

&#x1f604; 额&#xff0c;本想学学XLNet的&#xff0c;然后XLNet又是以transformer-XL为主要结构&#xff0c;然后transformer-XL做了两个改进&#xff1a;一个是结构上做了segment-level的循环机制&#xff0c;一个是在attention机制里引入了相对位置编码信息来避免不同se…

AutoCAD Electrical 2022—源箭头和目标箭头

在一张图纸上插入源 箭头&#xff1b; 选中一根导线&#xff1b; 如果源和目标在同一张图纸上&#xff0c;则可以点击确定&#xff0c;插入目标箭头&#xff1b; 如果不在同一张图纸上&#xff0c;则点击否&#xff0c;后面在插入目标箭头&#xff1b; 在另一张图纸上插入目标…

学习笔记:引用

概念 引用的作用是给一个变量起别名 格式&#xff1a; type & 别名 原名 引用必须初始化&#xff0c;在初始化后不能改变 int &b;ba;错误 int& b a; bc;不是将b从a的别名变为c的别名 而是将c的值赋给a int a 10; int& b a; b 20;//用别名改数据&…

Apifox:详细使用教程,带你轻松拿捏

目录 Apifox简介 Apifox的安装与使用 Apifox新建项目的流程 编写接口文档 Apifox简介 我们在日常编程开发过程中经常实行的是前后端分离架构的模式&#xff0c;一个项目的落地会通过产品、开发、测试三方会审&#xff0c;对项目需求评审过后&#xff0c;前后端开发会制定一…