Explainer parses WebRTC Offers/Answers then provides summaries and suggestions

Overview


Explainer

Explainer decodes WebRTC... so you don't have too!

Explainer Slack Widget
GoDoc Coverage Status Go Report Card License: MIT


Explainer provides a PeerConnection Explainer that parses WebRTC Offers/Answers then provides summaries and suggestions. It returns information like what codecs are supported, how many tracks each peer is attempting to send and ICE information. It also provides suggestions to fix common errors.

The goal of this project is to make learning and debugging WebRTC easier.

Use Cases

  • Debugging - Discover common errors without having to read and compare SDP values.
  • Learning - Learn SDP keys and values and how they effect your WebRTC sessions.
  • Passive Monitoring - Add Explainer to your existing Signaling and Media servers. Surface and fix existing issues.
  • Custom Tooling - Include Explainer with your own UI in an existing project. Make it easier for your customers to use WebRTC.

Features

  • Session Description Parsing - Human readable JSON output explaining your Offer/Answer
  • Session Description Suggestions - Searches for errors and possible improvements, not just explaining the current values.
  • Made for Learning - Returns line numbers for suggestion and parsing.
  • Portable - Available in Browser, Go, nodejs, C/C++, Java, C# and more thanks to WASM.
  • Interactive - Web demo provides interactive discovery of the SessionDescription.
  • Flexible - Accepts SesionDescriptions or SDP, either value can be base64
  • Decoupled - Easily ship your own UI, Explainer can run on clients or servers

Future Features

  • getStats Parsing - Human readable JSON output explaining the status of your PeerConnection. What it is sending and why.
  • getStats Suggestions - Understand why a certain bitrate is being sent or why you are seeing video corruption.
  • getStats Graphing - Generate values that are easily plottable in your tool of choice.

Running

Examples for different languages are in the examples directory. A Web UI is provided in the web directory.

Each example will have a README.md describing its specific setup.

Issues
  • Should I/O be Serialized, or should we accept text/base64/etc.. and parse?

    Should I/O be Serialized, or should we accept text/base64/etc.. and parse?

    It might be nice to have an API that accepts anything and does heuristics. If that fails it will return an error.

    That could be frustrating for users that already have a SessionDescription/JSON though? We could provide two APIs (one for JSON/one for text?)

    opened by Sean-Der 3
  • Update CI configs to v0.6.5

    Update CI configs to v0.6.5

    Update lint scripts and CI configs.

    opened by pionbot 1
  • Reduce build size

    Reduce build size

    tinygo build -o wasm.wasm -target wasm  -size full github.com/pion/explainer/pkg/wasm/
       code  rodata    data     bss |   flash     ram | package
    ------------------------------- | --------------- | -------
      26786       0    7750   81310 |   34536   89060 | (unknown)
          8       0       0       0 |       8       0 | /home/sean/go/src/github.com/tinygo/tinygo/lib/wasi-libc/libc-top-half/musl/src/exit
       1938       0       0       0 |    1938       0 | /home/sean/go/src/github.com/tinygo/tinygo/lib/wasi-libc/libc-top-half/musl/src/string
       3282       0       0       0 |    3282       0 | bufio
         13       0       0       0 |      13       0 | bytes
       3246       0       0       0 |    3246       0 | encoding/base64
         60       0       0       0 |      60       0 | encoding/binary
        429       0       0       0 |     429       0 | errors
       3093       0       0       0 |    3093       0 | github.com/CosmWasm/tinyjson/buffer
      23307       0       8       0 |   23315       8 | github.com/CosmWasm/tinyjson/jlexer
       1759       0     256       0 |    2015     256 | github.com/CosmWasm/tinyjson/jwriter
       3189       0       0       0 |    3189       0 | github.com/pion/explainer
       9958       0       0       0 |    9958       0 | github.com/pion/explainer/internal/sdp
         87       0       0       0 |      87       0 | internal/bytealg
       1291       0       0       4 |    1291       4 | internal/task
       2109       0       0  500000 |    2109  500000 | main
         33       0       0       0 |      33       0 | os
      11186       0       0       0 |   11186       0 | reflect
      11600       0      12     156 |   11612     168 | runtime
       8118       0       0       0 |    8118       0 | strconv
        254       0       0       0 |     254       0 | strings
        812       0       0       0 |     812       0 | sync
      11789       0       0      40 |   11789      40 | syscall/js
        181       0       0       0 |     181       0 | time
         30       0       0       0 |      30       0 | unicode/utf16
        732       0     288       0 |    1020     288 | unicode/utf8
    ------------------------------- | --------------- | -------
     125290       0    8314  581510 |  133604  589824 | total
    

    We should see if we can drop the github.com/CosmWasm/tinyjson/jlexer dependency. We are adding 35Kb just for that. I think it would be fine to just have code that walks the entire string and extracts sdp+type.

    This is our current gzip size

    tinygo build -o wasm.wasm -target wasm  -no-debug --panic trap github.com/pion/explainer/pkg/wasm
    
     gzip -9 < wasm.wasm | wc -c
    34059
    
    opened by Sean-Der 1
  • Configure Renovate - autoclosed

    Configure Renovate - autoclosed

    WhiteSource Renovate

    Welcome to Renovate! This is an onboarding PR to help you understand and configure settings before regular Pull Requests begin.

    🚦 To activate Renovate, merge this Pull Request. To disable Renovate, simply close this Pull Request unmerged.


    Detected Package Files

    • go.mod (gomod)

    Configuration Summary

    Based on the default config's presets, Renovate will:

    • Start dependency updates only once this onboarding PR is merged
    • Enable Renovate Dependency Dashboard creation
    • If semantic commits detected, use semantic commit type fix for dependencies and chore for all others
    • Ignore node_modules, bower_components, vendor and various test/tests directories
    • Autodetect whether to pin dependencies or maintain ranges
    • Rate limit PR creation to a maximum of two per hour
    • Limit to maximum 10 open PRs at any time
    • Group known monorepo packages together
    • Use curated list of recommended non-monorepo package groupings
    • Fix some problems with very old Maven commons versions
    • Ignore spring cloud 1.x releases
    • Ignore http4s digest-based 1.x milestones
    • Use node versioning for @types/node
    • Limit concurrent requests to reduce load on Repology servers until we can fix this properly, see issue 10133

    🔡 Would you like to change the way Renovate is upgrading your dependencies? Simply edit the renovate.json in this branch with your custom config and the list of Pull Requests in the "What to Expect" section below will be updated the next time Renovate runs.


    What to Expect

    It looks like your repository dependencies are already up-to-date and no Pull Requests will be necessary right away.


    ❓ Got questions? Check out Renovate's Docs, particularly the Getting Started section. If you need any further assistance then you can also request help here.


    This PR has been generated by WhiteSource Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Added react version of the web app

    Added react version of the web app

    Created a react version of the web explainer. Please let me know if there is anything that needs to be changed

    https://user-images.githubusercontent.com/36244069/149459967-3eb5e168-f3f6-49c9-9700-6eb804c2f31c.mov

    opened by ahmed-adly-khalil 4
  • Errors/Warnings/Suggestions and PeerDetails/SessionDetails definitions

    Errors/Warnings/Suggestions and PeerDetails/SessionDetails definitions

    List of all the things we can surface to users.

    Errors

    • [x] Two Offers or Two Answers were provided
    • [ ] Mismatch on Transceiver Count
    • [ ] Answerer using incorrect PayloadTypes

    Warnings

    Suggestions

    PeerDetails

    • DataChannel enabled?
      • MediaSection ID
      • MediaSection Order
    • How many tracks wish to be sent?
    • How many tracks are able to be received?
    • Audio+Video Codecs
      • Are they all the same for each MediaSection?
    • DTLS Fingerprint
      • At Media or Global?
      • Are they all the same?
    • ICE ufrag+pwd
      • At Media or Global?
      • Are they all the same?

    SessionDetails

    opened by Sean-Der 0
  • Return errors with context

    Return errors with context

    We should return line numbers if possible for every warning/error/suggestion.

    When we build a SDP Explorer it would allow people to highlight a field and it could tell people exactly what it means.

    opened by Sean-Der 0
Owner
Pion
The Open Source, Cross Platform Stack for Real-time Media and Data Communication.
Pion
Production-Grade Container Scheduling and Management

Kubernetes (K8s) Kubernetes, also known as K8s, is an open source system for managing containerized applications across multiple hosts. It provides ba

Kubernetes 84.5k Jan 17, 2022
Run the same Docker images in AWS Lambda and AWS ECS

serverlessish tl;dr Run the exact same image for websites in Lambda as you do in ECS, Kubernetes, etc. Just add this to your Dockerfile, listen on por

Glass Echidna 179 Nov 20, 2021
JuiceFS is a distributed POSIX file system built on top of Redis and S3.

JuiceFS is an open-source POSIX file system built on top of Redis and object storage (e.g. Amazon S3), designed and optimized for cloud native environ

Juicedata, Inc 4.7k Jan 18, 2022
Cloud cost estimates for Terraform in your CLI and pull requests 💰📉

Infracost shows cloud cost estimates for Terraform projects. It helps developers, devops and others to quickly see the cost breakdown and compare different options upfront.

Infracost 4.6k Jan 16, 2022
Fleex allows you to create multiple VPS on cloud providers and use them to distribute your workload.

Fleex allows you to create multiple VPS on cloud providers and use them to distribute your workload. Run tools like masscan, puredns, ffuf, httpx or anything you need and get results quickly!

null 123 Jan 16, 2022
☁️🏃 Get up and running with Go on Google Cloud.

Get up and running with Go and gRPC on Google Cloud Platform, with this lightweight, opinionated, batteries-included service SDK.

Einride 11 Jan 13, 2022
Elkeid is a Cloud-Native Host-Based Intrusion Detection solution project to provide next-generation Threat Detection and Behavior Audition with modern architecture.

Elkeid is a Cloud-Native Host-Based Intrusion Detection solution project to provide next-generation Threat Detection and Behavior Audition with modern architecture.

Bytedance Inc. 1k Jan 13, 2022
Sample apps and code written for Google Cloud in the Go programming language.

Google Cloud Platform Go Samples This repository holds sample code written in Go that demonstrates the Google Cloud Platform. Some samples have accomp

Google Cloud Platform 3.2k Jan 23, 2022
Use Google Cloud KMS as an io.Reader and rand.Source.

Google Cloud KMS Go io.Reader and rand.Source This package provides a struct that implements Go's io.Reader and math/rand.Source interfaces, using Goo

Seth Vargo 4 Nov 10, 2021
A Cloud Native Buildpack that contributes SDKMAN and uses it to install dependencies like the Java Virtual Machine

gcr.io/paketo-buildpacks/sdkman A Cloud Native Buildpack that contributes SDKMAN and uses it to install dependencies like the Java Virtual Machine. Be

Daniel Mikusa 1 Jan 8, 2022
Microshift is a research project that is exploring how OpenShift1 Kubernetes can be optimized for small form factor and edge computing.

Microshift is a research project that is exploring how OpenShift1 Kubernetes can be optimized for small form factor and edge computing.

Oleg Silkin 0 Nov 1, 2021
Contentrouter - Protect static content via Firebase Hosting with Cloud Run and Google Cloud Storage

contentrouter A Cloud Run service to gate static content stored in Google Cloud

G. Hussain Chinoy 0 Jan 2, 2022
A simple WebRTC Signaling server for flutter-webrtc and html5

flutter-webrtc-server A simple WebRTC Signaling server for flutter-webrtc and html5. Online Demo: https://demo.cloudwebrtc.com:8086/ Features Support

wahaha 0 Dec 13, 2021
Fast, realtime regex-extraction, and aggregation into common formats such as histograms, numerical summaries, tables, and more!

rare A file scanner/regex extractor and realtime summarizor. Supports various CLI-based graphing and metric formats (histogram, table, etc). Features

Chris LaPointe 126 Dec 27, 2021
This is a brief tutorial I created for a couple friends to show how to do some stuff in go and ethereum. Feel free to do any PRs with suggestions

golang-tutorial This is a brief tutorial I created for a couple friends to show how to do some stuff in Go and Ethereum. Milestones Create the environ

Nico Cesar 5 Jan 3, 2022
Gopedia: an alternative to get summaries from Wikipedia API

Gopedia Gopedia is an alternative to get summaries from Wikipedia API ♻️ Changel

null 0 Jan 10, 2022
🤖 Chegg answers requested and sent by the Discord BOT to the targeted user.

"I believe that open-source resources are a must for everyone around. Especially in the field of education. As Chegg costs some money monthly, unfortunately, not all of us are capable of to charge ourselves that cost, which ends up blocking all those valuable resources to us. That is why, I have developed this bot, which unblurs the blurred question answers and sends them to you. I will develop it to a next level in the upcoming days, whereas, it will send the images/text, answers in short, directly through the Discord server you are in, or just DM/PM."

Vusal Ismayilov 33 Aug 20, 2021
Questions and answers example project.

Question Answer Service REST Service for questions and answers Database modeling Directory tree pkg: Here is the main source code. sql: Here are all t

Ken Esparta Ccorahua 1 Dec 17, 2021
A web server that sits beside jupyterhub and scrapes answers out of notebook files.

A Prototype grader tool that runs with jupyterhub that essentially parses jupyter notebooks and responds with a set of form fields automatically fille

Derek Rhodes 0 Dec 5, 2021
Zach Howell 0 Jan 4, 2022
Go-ipfs-cmds - Cmds offers tools for describing and calling commands both locally and remotely

Go-ipfs-cmds - Cmds offers tools for describing and calling commands both locally and remotely

y 0 Jan 18, 2022
An open source, online coding platform that offers code practice and tutoring in 50 different programming languages

Exercism Golang En este repositorio voy a subir los ejercicios de la plataforma

Lucas Frontalini 0 Jan 7, 2022
Get any cryptocurrencies ticker and trade data in real time from multiple exchanges and then save it in multiple storage systems.

Cryptogalaxy is an app which will get any cryptocurrencies ticker and trade data in real time from multiple exchanges and then saves it in multiple storage systems.

Pavan Shetty 84 Dec 31, 2021
Simple application that waits for a given time and attempts and then exits

Wait Simple application that waits for a given time and attempts and then exits. WAIT_HOSTS is a list of hosts to wait for. e.g. WAIT_HOSTS=tcp://app:

Altynbek Kaliakbarov 0 Nov 24, 2021
🛠 A configuration library for Go that parses environment variables, JSON files, and reloads automatically on SIGHUP

config A small configuration library for Go that parses environment variables, JSON files, and reloads automatically on SIGHUP. Example func main() {

Josh Betz 209 Dec 16, 2021
:evergreen_tree: Parses indented code and returns a tree structure.

codetree Parses indented code (Python, Pug, Stylus, Pixy, codetree, etc.) and returns a tree structure. Installation go get github.com/aerogo/codetree

Aero 18 Jan 5, 2022
Parses Go tracebacks and finds possible deadlocks

findlock Parses Go tracebacks and finds possible deadlocks This works by checking how many locks have the same memory address. If there are multiple g

Luka Napotnik 27 Jul 12, 2020