pion / webrtc

Pure Go implementation of the WebRTC API
https://pion.ly
MIT License
13.91k stars 1.66k forks source link

Roadmap #9

Open Sean-Der opened 6 years ago

Sean-Der commented 6 years ago

This is a covering ticket for the Pion WebRTC roadmap. If you have any requests feel free to leave them here/vote on others.

Planet Strike -- 1.0.0 (2018-06-20)

Aliens of Gold -- 1.1.0 (2018-09-00)

Quest for the Sigil -- 1.2.0 (2018-12-00)

Spear of Destiny -- 2.0.0 (2019-04-00)

Beyond Heretic -- 2.1.0 (2019-08-00)

The HUNT Begins - 2.2.0 (2019-11-00)

Future Shock - 3.0.0 (2020-12-14)

Plutonia - 3.1.0 (2021-08-01)

System Shock 3.2.0 (2023-04-25)

4.0.0 (2024-10-01)

No date picked


These things are ordered in the importance we have gotten from feedback. If you are building something and need a feature sooner please comment and we can move things around!

notedit commented 6 years ago

It seems it is a webrtc golang version. Any plan on SFU media server?

Sean-Der commented 6 years ago

Hey @notedit

Currently no, we may build an SFU using pions-WebRTC in the future though. You are right though, pions-WebRTC is a Golang version of libwebrtc (instead we don't use any libraries)

The goal is that people will be able to just do one go build and not have to worry about anything else, and other cool things like that!

If you do want to build an SFU would love to help! Can add features/debug things as needed

notedit commented 6 years ago

Thanks, I may try SFU media server based on your lib. Great work.

ghost commented 6 years ago

Dumb question ! Whats an SFU - am curious.... got a good link ?

On Mon, 18 Jun 2018 at 10:57 notedit notifications@github.com wrote:

Thanks, I may try SFU media server based on your lib. Great work.

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/pions/webrtc/issues/9#issuecomment-397987194, or mute the thread https://github.com/notifications/unsubscribe-auth/ATuCwr6MNYloOIZSGBOyCK2AipNk3l7mks5t92t2gaJpZM4UloWh .

ghost commented 6 years ago

https://bloggeek.me/webrtc-multiparty-video-alternatives/

?

On Mon, 18 Jun 2018 at 11:17 Ged Wed gedw99@gmail.com wrote:

Dumb question ! Whats an SFU - am curious.... got a good link ?

On Mon, 18 Jun 2018 at 10:57 notedit notifications@github.com wrote:

Thanks, I may try SFU media server based on your lib. Great work.

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/pions/webrtc/issues/9#issuecomment-397987194, or mute the thread https://github.com/notifications/unsubscribe-auth/ATuCwr6MNYloOIZSGBOyCK2AipNk3l7mks5t92t2gaJpZM4UloWh .

ghost commented 6 years ago

it looks to me like an SFU scales out better ?

On Mon, 18 Jun 2018 at 11:18 Ged Wed gedw99@gmail.com wrote:

https://bloggeek.me/webrtc-multiparty-video-alternatives/

?

On Mon, 18 Jun 2018 at 11:17 Ged Wed gedw99@gmail.com wrote:

Dumb question ! Whats an SFU - am curious.... got a good link ?

On Mon, 18 Jun 2018 at 10:57 notedit notifications@github.com wrote:

Thanks, I may try SFU media server based on your lib. Great work.

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/pions/webrtc/issues/9#issuecomment-397987194, or mute the thread https://github.com/notifications/unsubscribe-auth/ATuCwr6MNYloOIZSGBOyCK2AipNk3l7mks5t92t2gaJpZM4UloWh .

Sean-Der commented 6 years ago

@gedw99 An SFU is so your users only have to upload video once (and can selectively download)

this is a good visualization

ghost commented 6 years ago

Thank you - appreciated the learning.

This is really a great system. I will be helping. I think I can build a flutter GUI for mobile and desktop.

If you want something like this as a PR let me know.

On Tue, 19 Jun 2018, 07:32 Sean DuBois, notifications@github.com wrote:

@gedw99 https://github.com/gedw99 An SFU is so your users only have to upload video once (and can selectively download)

this https://thenewdialtone.com/wp-content/uploads/2016/04/SFU-Video-Conferencing.jpg is a good visualization

— You are receiving this because you were mentioned.

Reply to this email directly, view it on GitHub https://github.com/pions/webrtc/issues/9#issuecomment-398279207, or mute the thread https://github.com/notifications/unsubscribe-auth/ATuCwh-Otx3SlTD9aReAFkOeXV1SzgxKks5t-IzzgaJpZM4UloWh .

shazow commented 6 years ago

Pretty excited about this. Personally I'm waiting for DataChannel support.

Many p2p projects (libp2p/ipfs, openbazaar, etc) rely on datachannels to create DHTs of peers, and end up having segregated networks between browser-based WebRTC peers vs native UDP-based peers, only being able to talk to each other over bridges that support both (usually NodeJS).

Having a robust Go-native WebRTC implementation with DataChannel support would be a huge milestone for all of these projects. Most of these projects are written in Go, too.

https://github.com/libp2p/go-libp2p/issues/188 for example.

Sean-Der commented 6 years ago

@shazow Hey thanks for checking us out :)

Just moved it up! I will work on datachannels right after I finish sending video. I have had multiple people reach out to me about wanting that the most, so seems the right choice.

I will try to reach out to any projects that are looking for datachannels. It would be great if they had input on what features they needed most, so I could get it good enough as soon as possible.

silbinarywolf commented 6 years ago

Hey @Sean-Der, very very keen to see Data Channels implemented in this library as I'm aiming to build a real-time browser-based game in Golang.

I want Data Channels / UDP to avoid hitches and non-responsiveness when building games with an authoritative server model. (Source if you're interested: https://new.gafferongames.com/post/why_cant_i_send_udp_packets_from_a_browser/ )

As of right now, there's no "off the shelf" libraries I can use to get here. The only other library that seemed reasonable was keroserene/go-webrtc, but unfortunately it has no pre-built Windows binaries so it's a non-starter for me as I dev' on Windows.

If donations will help get this done quicker, I'm more than happy to contribute some money!

ghost commented 6 years ago

All. Did you also see that the libp2p library also now has QUIC. It's a pure golang alternative to webrtc data channels. Huge

shazow commented 6 years ago

@gedw99 QUIC is not an alternative to WebRTC Data Channels. Browsers can't use QUIC to establish peer-to-peer connections with each other.

Sean-Der commented 6 years ago

@silbinarywolf Hey!

Thanks for checking us out :) That's really cool, I am excited to hear about all the use cases like this.

What I was thinking about doing was starting a bountysource (I personally don't need the money/will not incentive me anymore) but was hoping to incentive other contributors. I also might not be presenting work in a way that others can take on.

I think if others could make money AND I could say this could be really good for a resume/career etc... I could get some good Golang devs to help out. But not exactly sure where to start with that.

ghost commented 6 years ago

@shazow since your into libp2p repo then their QUIC implementation might be of interest. https://github.com/libp2p/go-libp2p-quic-transport

And yes QUIC is not supported in all browsers, but it is supported on all mobiles and desktops because it has no dependencies at all. NOt even kernel level for the networking.

All i am saying is that its quite feasible that pions can support both webrtc and quic through an interface. Not saying it has to be this way but just leaving options on the table.

kafein commented 6 years ago

Hi @Sean-Der. Thanks for your effort. Just wondering, is it possible to build a live steaming / broadcasting system with this library? I want to record video with Navigator.getUserMedia() then stream (via webrtc) to server then distribute to clients.

Sean-Der commented 6 years ago

@kafein Hey!

Yes you can (and pretty easily!) would you mind posting to our mailing list happy to answer any questions there.


We have got quite a lot of questions in this issue, I am going to hide everything for now. I would love to discuss anything on the mailing list though! I just don't want new users to be overwhelmed by unrelated conversations.

Thanks everyone.

Sean-Der commented 6 years ago

Good news!

1.0.0 has officially landed you can see the announcement here look forward to hearing what people think!

Sean-Der commented 6 years ago

I am excited to announce that @nicolai86 has landed STUN support for pion-WebRTC in master! We are still adding tests/improving things but it works.


DataChannels is coming along nicely. I would estimate ~2 weeks, me and @kc5nra are making good progress. We have to fully implement an SCTP parser, but after that should be smooth sailing!


@backkem is also making HUGE progress with his SDP improvements. Currently things in that area are MVP at best, but after his work lands you should expect an API that looks pretty much exactly like WebRTC in the browser.

Sean-Der commented 6 years ago

DataChannels has landed!

You can now use WebRTC DataChannels in master, there are still plenty of things to improve but it works :) if you get a chance try it out and report any bugs! It isn't production ready yet, but getting there. There is an example application here

chrisprobst commented 6 years ago

Hi! Awesome project! What would be necessary for mobile support? Shouldn't it work out of the box, since it is Go only?

We really need mobile functionality and want to cooperate with that. I saw that it is not part of the road map, but if we are willing to help, what would be a good starting point?

Best, Chris

backkem commented 6 years ago

Hi @chrisprobst, we definitely want to support your use-case. Can you elaborate a bit more wat exactly you want to accomplish? E.g.: connect with mobile browsers, compile with go-mobile or ...? Please also consider joining us in the #pion channel of the gophers slack. We're really active on there.

chrisprobst commented 6 years ago

Hi @backkem , nice to hear from you!

Yes, gomobile is our target. We are StriveCDN and building a Go-based SDK for P2P live streaming optimization. Connection would be between SDK (Android and iOS) <-> Web Browsers on Desktop.

I'll join you guys on slack, perfect!

ghost commented 6 years ago

There is a flutter webrtc plugin

https://github.com/cloudwebrtc/flutter-webrtc

It should be reasonably easy to get the flutter client talking to pions. I will be working on it in my spare time.

If anyone in the team wants this +1 this

On Fri, 3 Aug 2018, 16:49 Christopher Probst, notifications@github.com wrote:

Hi @backkem https://github.com/backkem , nice to hear from you!

Yes, gomobile is our target. We are StriveCDN and building a Go-based SDK for P2P live streaming optimization. Connection would be between SDK (Android and iOS) <-> Web Browsers on Desktop.

I'll join you guys on slack, perfect!

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/pions/webrtc/issues/9#issuecomment-410275843, or mute the thread https://github.com/notifications/unsubscribe-auth/ATuCwscOjlFJnRaPnchdAv97jIaIwcDyks5uNGLtgaJpZM4UloWh .

backkem commented 6 years ago

We'll move the go-mobile conversation to #64. I'll hide the conversation here to keep this topic clean.

Sean-Der commented 6 years ago

pion-WebRTC is officially 100% Go, our OpenSSL dependency is gone! I am really excited to announce we have a beta version here I would really appreciate if people could test it. If no issues comes up I plan on merging this around December 1st.

I also need help getting pions/dtls accepted into x/net. You can see the issue here. If you know anyone working on the Go team, please reach out to them! I wouldn't like pion to own the DTLS package long term. Lots of other projects would benefit from it, and putting it into x/net would benefit everyone. It would also benefit greatly from a security review.

Lastly (and most importantly) a big thank you to @backkem without him this wouldn't have happened. He worked very hard on both design+code, so if you are benefiting from this change... send him a thank you!

Sean-Der commented 5 years ago

1.2.0 has officially landed you can see the announcement here look forward to hearing what people think!

Thank you to everyone who has contributed. The team gets so much joy every time we get feedback (good or bad!) and seeing every ones projects makes it all worth it. Enjoy your holidays!

Sean-Der commented 5 years ago

2.0.0 is coming along nicely!

With this release we are going to be making some breaking changes that we have documented here

While building Pion WebRTC I made some mistakes, and taking this chance to fix them! We will also be including ORTC and QUIC support with this release. After this lands we will start working on TURN support (and this will not break the public API)

If anyone has any feedback I would love to hear from you via GitHub issues or on Slack. Thanks again for using Pion.

rebootcode commented 5 years ago

Looks like 2.0.0 is now here

Sean-Der commented 5 years ago

Hey @rebootcode

It is available! We are still working on some SCTP improvements before we do a big announce, but there will be zero public API changes going forward.

jinleileiking commented 5 years ago

No plan for gcc? pcc?

Sean-Der commented 5 years ago

v2.0.* has officially landed and stabilized! Multiple large production users have migrated to it and we fixed all the bugs we found along the way.

This was a really big release, you can see the full release notes here here are some exciting parts though.

We are also starting work on v2.1.* which so far will include the following. If you have a feature that you think is important we would love to hear!

porjo commented 5 years ago

Don't forget to publish the v2.0 release here: https://github.com/pion/webrtc/releases/ :+1:

Sean-Der commented 5 years ago

TURN support has landed in master! Pion WebRTC can now connect to a TURN server and maintain an allocation (TURN session).

If you are using an older version of Pion WebRTC it is still possible to use TURN! The remote WebRTC session has to maintain the allocation however. Pion WebRTC can accept relay candidates sent from the other side, but before couldn't create them itself.


@porjo thanks for calling that out, sorry I completely missed the message :( will publish these!

gibson-luo commented 5 years ago

This's an amazing project! I am playing with some examples, it seems no QoS, any plan for that?

Sean-Der commented 5 years ago

Hey @gibson-luo

The plan is to have a user configurable jitterbuffer (so you can decide what latency you are willing to tolerate and get stats around jitter/bandwidth/latency)

For stuff like REMB I plan on emitting those stats to the user (and you can adjust the encoder accordingly) if you are interested in this I would love your feedback/opinions on Slack

gibson-luo commented 5 years ago

Sounds good. Yeah, I'm interested in this part, I will try to implement parts of them by myself, just for learning. Looking forward to it, thank you.

Sean-Der commented 5 years ago

mDNS support has landed!

Currently we only parse them, but don't emit them ourselves. We plan on making this an option that can be controlled via the SettingEngine turning them on by default has caused breakage for Chromium users and we don't want to do the same.

We have a dedicated Contributing page now. I would love to see more people getting involved. I would love to hear feedback if you are interested in getting involved, but we aren't providing the tools or information to make it possible.

@enobufs is working hard on vnet support which is an exciting new feature. You will be able to simulate network topologies (and their conditions) via code. This means you can test how your application will perform in the real world without having to test in the field.

I am going through and triaging issues. I don't plan on adding any new features (just bugfixes) until we release the next dot release.

Thanks for using Pion!

Sean-Der commented 5 years ago

v2.1.0 of Pion WebRTC has arrived!

This release features full TURN support, mDNS candidates, vnet and Trickle ICE! You can read the full release notes here

If you have questions about Pion WebRTC (or even just WebRTC in general!) we would love to have you in our Slack channel!

We also are always looking for more contributors, it is a great way to learn and we try to make it as easy as possible. You can read about that here here

I haven't planned the next release yet, I will announce the features here when we have a rough idea. Our roadmap is really driven by user need, so if you have something you think is important please reach out!

Sean-Der commented 5 years ago

We are closing in on releasing v2.2.0 of Pion WebRTC! Here are the major features we expect from this release. We also have had lots of great bug fixes along the way.

Updating to this release is suggested for everyone, we aim to have zero breaking changes with lots of improvements. Also starting with this release we are going to explore how we can better support business users.

We want to explore the idea of providing paid support. We also may be starting a low bandwidth mailing list where we announce upcoming Pion changes and let users who support the project drive the roadmap. We also want to share general WebRTC information that might help anyone who is depending on WebRTC.

chrisprobst commented 5 years ago

@Sean-Der Great, we are looking forward to the SCTP performance improvements! Can you already suggest when the release will be available? In the meantime, is there a tagged branch with this improvement :-) ?

Sean-Der commented 5 years ago

@chrisprobst Yes! I just pushed the tag v2.1.6 that has the SCTP changes.

https://github.com/pion/sctp/commit/fc51cd9ffe82c68e5a8e72b68c569ce1e58ba8d5 is the pion/sctp commit and https://github.com/pion/sctp/issues/62 is the tracking issue.

If you get a chance drop @enobufs a thank you! He is always looking for data points that can help make it better, he does some really amazing work :)

chrisprobst commented 5 years ago

@Sean-Der Wonderful, I will check it out! I will tell @enobufs how it worked out :-)

0x19 commented 5 years ago

@Sean-Der

Related to the

Explore providing easy bindings for other languages (Python, Java... ?)

My personal suggestion here would be to introduce gRPC (https://grpc.io/) due to numerous reasons. Some of them would be:

helisong427 commented 4 years ago

@Sean-Der I'm really looking forward to RtpEngine, when are you planning to release it?

Sean-Der commented 4 years ago

Pion WebRTC now allows you to Add/Remove tracks at anytime! You can call AddTrack/RemoveTrack on either side (Pion or Browser) and it should work :)

I have landed this in master, and will wait a week for it to stabilize. The next release of Pion WebRTC is going to be all media API improvements. Supporting multiple browsers is needlessly hard right now, and I want to fix that.

We also are going to work on bringing way more maturity to the getStats API. Pion WebRTC has seen lots of usage in load testing, bench marking, analytics and QA. If you are using Pion WebRTC for any of these we would love to hear your feedback about what would make it better for you!

Sean-Der commented 4 years ago

@helisong427 RtpEngine is something I hope to do before April! If it is blocking something you are trying to build I would love to do it sooner.

I am mostly driven by things people need, if you are able to get involved/explain your exact uses cases that would really be helpful! I am in Slack if you ever want to talk real-time :)

paralin commented 4 years ago

@Sean-Der just know that this is a really awesome project, and your work is greatly appreciated.

Sean-Der commented 4 years ago

@paralin thanks I appreciate it :)

vinhjaxt commented 4 years ago

Love this feature: