Real-Distributed RTC System by pure Go and Flutter

Last update: Aug 11, 2022
Comments
  • 1. Demo PC/JS doesn't work correctly in FireFox

    Linux "Ubuntu 16.04.6 LTS" 75.0 (64-bit) Mozilla Firefox for Ubuntu canonical-1.0

    I create room with more than one members I expect watching all members streams

    In Google Chrome all is Ok. But firefox shows me only LocalStream

    There are some errors in developer's console: Warning: This page uses the non standard property “zoom”. Consider using calc() in the relevant property values, or using “transform” along with “transform-origin: 0 0” Warning: onaddstream is deprecated! Use peerConnection.ontrack instead. Error: InvalidAccessError: Answer tried to set recv when offer did not set send

    I'am not javascript ninja... I can't explain this behavior

    Reviewed by schors at 2020-04-18 12:18
  • 2. User authentication

    Summary

    User authentication, internally and/or externally would be great, as meetings are often confidential.

    • [ ] Internal Users
    • [ ] LDAP
    • [ ] Oauth2
    • [ ] Kerberos
    • [ ] JWT
    • [ ] Others?
    Reviewed by maxnoe at 2020-03-26 10:40
  • 3. RTCPeerConnection addTransceiver method not found

    Your environment.

    • Version: iOS
    • Browser: Safari
    • Other Information - error: The method 'addTransceiver' isn't defined for the class 'RTCPeerConnection'. (undefined_method at [brodacaster] lib/src/client.dart:216)

    What did you do?

    I just cloned the repo and tried running example on iOS simulator

    What did you expect?

    I expect it to at least build successfully

    What happened?

    It gives me error on building and i am unable to install

    Reviewed by Faiyyaz at 2020-03-18 04:31
  • 4. Not found any node for islb

    DEBUG: Recivied data: {"response":true,"id":2462221,"ok":false,"errorCode":500,"errorReason":"Not found any node for islb."}
    [VERBOSE-2:ui_dart_state.cc(157)] Unhandled Exception: {code: 500, error: Not found any node for islb.}
    

    I am getting the above error after 2 or 3 days of the server running. To fix this again I have to do docker-compose up.

    Reviewed by rajababu3 at 2020-06-16 01:34
  • 5. Docker hosting updates

    Expose Biz websocket under a path on web, not a separate port. Switch to standard web ports for http/https. This simplifies prod hosting as only the two common ports must be exposed for the web service.

    For local dev the 8443 websocket port is routed directly to the biz container. This port should not be exposed in production / external hosting.

    This required some minor client updates. The changes made here will use the host:port combination that the page is currently served on to request the /ws path. A better long term solution would be to provide these as defaults but allow the clients to specify an override url for the biz ws location.

    The web dockerfile was reworked to use multistage builds. I grabbed the code from the previous version, before space reduction, and simply updated to use pre-built docker images for node and caddy server. Overall the image size should be similar, but with the benefit of docker layer caching for node builds.

    Additionally the Caddyfile was update to version 2.0 to support the versions available from dockerhub. The Caddy files have been split into a local and remote version with http port 8080 for localhost. The docker-compose file has both with remote currently commented out. For prod, port 8080 should not be exposed publicly.

    This should fit most cases, but could use some feedback on how people are hosting remote and locally for dev.

    Fixes #75

    Reviewed by jbrady42 at 2020-04-27 15:48
  • 6. Ion nodes die without logs

    It seems that after an extended period of time sitting idle, the nodes go down. This is the logs i see

    biz_1    | 2020-04-03 02:39:23.533 INF handleSFUBroadCast: method=stream-remove, data=map[mid:f6e16f25-1756-450b-83d0-017030fe68ef#BEPCHN]
    redis_1  | 1:M 03 Apr 2020 12:41:52.438 * 1 changes in 3600 seconds. Saving...
    redis_1  | 1:M 03 Apr 2020 12:41:52.690 * Background saving started by pid 22
    redis_1  | 22:C 03 Apr 2020 12:41:52.857 * DB saved on disk
    redis_1  | 22:C 03 Apr 2020 12:41:52.864 * RDB: 0 MB of memory used by copy-on-write
    redis_1  | 1:M 03 Apr 2020 12:41:52.918 * Background saving terminated with success
    biz_1    | 2020-04-03 12:41:52.932 INF DELETE "/dc1/node/islb-EeZD7mgaPPsR":""
    islb_1   | 2020-04-03 12:41:53 INF DELETE "/dc1/node/islb-EeZD7mgaPPsR":""
    islb_1   | 2020-04-03 12:41:53.011 INF Node [/dc1/node/islb-EeZD7mgaPPsR] Down
    islb_1   | 2020-04-03 12:41:53.027 INF DELETE "/dc1/node/sfu-sAWekEXhrOXb":""
    islb_1   | 2020-04-03 12:41:53.038 INF Node [/dc1/node/sfu-sAWekEXhrOXb] Down
    islb_1   | 2020-04-03 12:41:53.043 INF DELETE "/dc1/node/biz-bV3fgNOqiN7l":""
    islb_1   | 2020-04-03 12:41:53.044 INF Node [/dc1/node/biz-bV3fgNOqiN7l] Down
    islb_1   | 2020-04-03 12:41:53.044 INF removeStreamsByNode: node => sfu-sAWekEXhrOXb
    biz_1    | 2020-04-03 12:41:52.953 INF Node [/dc1/node/islb-EeZD7mgaPPsR] Down
    

    Any ideas why this might be?

    Reviewed by tarrencev at 2020-04-03 13:59
  • 7. User pub dies but is still subscribed

    I'm seeing an intermittent issue when a users pub seems to die, they stop streaming video/audio, but their subs are still active, so they can see everyone else in the room. When this happens, their stream freezes for everyone else but they can still hear everyone else. It seems to happen more frequently with bad internet (lossy/slow).

    I've seen this issue brought up a bit is slack too.

    Reviewed by tarrencev at 2020-05-13 18:53
  • 8. Docker updates

    Re-opening this so we can move hosting forward. I have seen a few users having trouble hosting, and had quite a time getting it set up myself the first time. These changes represent a fairly standard way of web hosting and I think they are very beneficial to new users.

    As I mentioned in the last PR the port change on the clients is intentional in order to use standard web ports (443 in prod) for hosting. If you are having issues with your hosting I would be glad to go through it and work out changes to support it.

    I have been hosting using this docker setup for weeks now and have had zero issue. Please update with what issues you are running into so we can get this merged and out to the community.

    Reviewed by jbrady42 at 2020-05-03 00:46
  • 9. Add Python script to stress test the Ion web stack

    Description

    Simple Python script that uses Selenium and Chromedriver to generate multiple user sessions and stress test the Ion JS Demo code and underlying Docker containers.

    Useful to diagnose #135.

    Reviewed by barronbud at 2020-04-24 20:09
  • 10. Update golang.org/x/crypto commit hash to 75b2880 - reopen

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | golang.org/x/crypto | require | digest | 279210d -> 75b2880 |


    Renovate configuration

    :date: Schedule: "on the first day of the month" (UTC).

    :vertical_traffic_light: Automerge: Disabled by config. Please merge this manually once you are satisfied.

    :recycle: Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    :no_bell: Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

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

    Reviewed by renovate[bot] at 2020-07-01 00:17
  • 11. sfu panic when a second user joins via the demo app

    Your environment.

    • Version: e936c2a
    • Browser: Chrome 80.0.3987.149 macOS
    • Other Information:
    sfu_1    | 2020-04-07 02:18:30.871 INF rtc.GetOrNewRouter id=02121ce9-7ebb-46fa-9af9-96b321bf03d5#LNPHGT
    sfu_1    | 2020-04-07 02:18:30.871 INF rtc.GetRouter id=02121ce9-7ebb-46fa-9af9-96b321bf03d5#LNPHGT
    sfu_1    | 2020-04-07 02:18:30.871 INF rtc.AddRouter id=02121ce9-7ebb-46fa-9af9-96b321bf03d5#LNPHGT
    sfu_1    | 2020-04-07 02:18:30.871 INF NewRouter id=02121ce9-7ebb-46fa-9af9-96b321bf03d5#LNPHGT
    sfu_1    | 2020-04-07 02:18:30.872 INF subscribe tracks=map[eI5U01z2tJlCU1ikLuNVeAFZMp18njodeUMJ 066a306c-c5f5-4b93
    -ad09-766dd9383657:[map[id:066a306c-c5f5-4b93-ad09-766dd9383657 pt:111 ssrc:4.273608241e+09 type:audio]] eI5U01z2tJ
    lCU1ikLuNVeAFZMp18njodeUMJ e02b1007-9974-4d61-859b-b4d52a39e2ed:[map[id:e02b1007-9974-4d61-859b-b4d52a39e2ed pt:96 
    ssrc:1.143603203e+09 type:video]]]
    sfu_1    | panic: interface conversion: interface {} is nil, not string
    sfu_1    | 
    sfu_1    | goroutine 32 [running]:
    sfu_1    | github.com/pion/ion/pkg/node/sfu.subscribe(0xc0003b92f0, 0x9, 0xf2a2c2)
    sfu_1    |      /go/src/github.com/pion/ion/pkg/node/sfu/internal.go:205 +0x1630
    sfu_1    | github.com/pion/ion/pkg/node/sfu.handleRequest.func1(0xc0003b92c0, 0xc0003b93e0, 0xc0003b9410)
    sfu_1    |      /go/src/github.com/pion/ion/pkg/node/sfu/internal.go:35 +0x2d8
    sfu_1    | github.com/cloudwebrtc/nats-protoo.(*NatsProtoo).handleRequest(0xc000173e60, 0xc0003b92c0, 0xc0003ccbc0, 0x14, 0xc0003ccbe0, 0x19)
    sfu_1    |      /go/pkg/mod/github.com/cloudwebrtc/[email protected]/protoo.go:150 +0x1d4
    sfu_1    | github.com/cloudwebrtc/nats-protoo.(*NatsProtoo).handleMessage(0xc000173e60, 0xc0003ce000, 0x16db, 0x16db, 0xc0003ccbc0, 0x14, 0xc0003ccbe0, 0x19)
    sfu_1    |      /go/pkg/mod/github.com/cloudwebrtc/[email protected]/protoo.go:105 +0x156
    sfu_1    | github.com/cloudwebrtc/nats-protoo.(*NatsProtoo).onRequest(0xc000173e60, 0xc0003cac30)
    sfu_1    |      /go/pkg/mod/github.com/cloudwebrtc/[email protected]/protoo.go:96 +0x198
    sfu_1    | github.com/nats-io/nats%2ego.(*Conn).waitForMsgs(0xc0000b7b80, 0xc00016a240)
    sfu_1    |      /go/pkg/mod/github.com/nats-io/[email protected]/nats.go:2147 +0x330
    sfu_1    | created by github.com/nats-io/nats%2ego.(*Conn).subscribe
    

    Seems like it's panicking here because the msg didn't contain a codec in the tracks map, line with timestamp 2020-04-07 02:18:30.872 in the stacktrace.

    What did you do?

    1. docker-compose up on a GCP compute engine node.
    2. Accessed ion at https://mydomain:8080 created a room 'test' with a display name.
    3. From another tab (or incognito mode) accessed ion at https://mydomain:8080 joined room 'test' with a different display name.

    What did you expect?

    Seeing both users' video tracks.

    What happened?

    sfu crashed.

    Reviewed by alexferl at 2020-04-07 02:42
  • 12. The 'ontrackevent' event is called regardless of the session

    The 'ontrackevent' event is called regardless of the session. Even if users in another session then for all sessions will be called. Is it not sopposed to be called according to session?

    rtc.ontrackevent

    Reviewed by flyingdove at 2022-06-30 11:45
  • 13. ERROR: for redis Cannot start service redis

    Your environment.

    • Version: I am using docker so I assume it's the recent. I would love to learn how to use different versions!

    What did you do?

    git clone https://github.com/pion/ion
    cd ion
    sudo make docker-start-services
    
    /bin/sh: 1: go: not found
    docker-compose pull
    Pulling nats     ... done
    Pulling redis    ... done
    Pulling islb     ... done
    Pulling app-room ... done
    Pulling signal   ... done
    Pulling sfu      ... done
    docker network create ionnet
    8a6f31d3b875c2a53772b023567d90f66cd2bea939707aa436d867ac553a3fcc
    docker-compose -f docker-compose.yml up
    Starting ion_redis_1 ... error
    Starting ion_nats_1  ...
    
    Starting ion_nats_1  ... done
    
    ERROR: for redis  Cannot start service redis: network e3256c5fed9f7e7017135563e5037117082af044028b722ac8c15a451204a831 not found
    ERROR: Encountered errors while bringing up the project.
    make: *** [Makefile:34: docker-start-services] Error 1
    

    What did you expect?

    not to see an error

    What happened?

    i see error in the terminal:

    ERROR: for redis  Cannot start service redis: network e3256c5fed9f7e7017135563e5037117082af044028b722ac8c15a451204a831 not found
    
    Reviewed by oren at 2022-05-10 04:05
  • 14. 使用nginx代理5551端口流量,默认一分钟关闭连接,是否有心跳 api?

    1、/rtc.RTC/ 这个ws接口是否有心跳接口? 2、/room.RoomSignal/ 这个ws是否有心跳接口?

    demo 使用的是 examples\ion-pubsub

    nginx.config

        location ^~ /room.RoomSignal/ {
            #这里需要说明一下,由于docker的网络问题,我们填127.0.0.1是不可行的
            #因为127.0.0.1是docker容器内的网络,不是我们宿主机的网络,所以就不能指向正确的路径
            #我们需要填内网的ip地址例如:192.168.1.222,这样才是可以行的
    
            proxy_redirect off;
            proxy_pass http://172.25.158.83:5551/room.RoomSignal/;      # 转发
            proxy_set_header Host $host;
            proxy_set_header X-Real_IP $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr:$remote_port;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;   # 升级协议头
            proxy_set_header Connection upgrade;
         }
    
    
        #截取url开头匹配/rtc.RTC/,然后转发到http://172.25.158.83:5551/rtc.RTC/
        location ^~ /rtc.RTC/ {
            #这里需要说明一下,由于docker的网络问题,我们填127.0.0.1是不可行的
            #因为127.0.0.1是docker容器内的网络,不是我们宿主机的网络,所以就不能指向正确的路径
            #我们需要填内网的ip地址例如:192.168.1.222,这样才是可以行的
    
            proxy_redirect off;
            proxy_pass http://172.25.158.83:5551/rtc.RTC/;      # 转发
            proxy_set_header Host $host;
            proxy_set_header X-Real_IP $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr:$remote_port;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;   # 升级协议头
            proxy_set_header Connection upgrade;
         }
    
        location /ion-pubsub/ {
            #这里需要说明一下,由于docker的网络问题,我们填127.0.0.1是不可行的
            #因为127.0.0.1是docker容器内的网络,不是我们宿主机的网络,所以就不能指向正确的路径
            #我们需要填内网的ip地址例如:192.168.1.222,这样才是可以行的
           # proxy_pass http://172.16.99.219:8080;
           # proxy_set_header   Host             $host;
           # proxy_set_header   X-Real-IP        $remote_addr;
           # proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;   # 升级协议头
            proxy_set_header Connection upgrade;
    
            #项目添加到容器,这是容器的路径
            root /usr/local/docker/ion/ion/examples/;
            index index.html;
         }
    
    Reviewed by luo199393 at 2022-05-03 08:34
  • 15. fix: rooms not created TTL Expired

    Description

    When a user joins the room while the room TTL expires, Redis entry for the room is not created as the checking is happing only on user profile SID insted of checking in redis as like v1.

    So added a check from redis for rooms.

    Reviewed by hariprasath2603 at 2022-02-21 07:22
  • 16. AWS Ec2 Deployement

    I deployed the ion server on ec2. The security group allowed all traffic. I tried running the echo and other program.. i was receiving text messages at the remote end. but video stream was not coming in the remote end. i tried running the server on local everything worked perfectly

    Reviewed by vmwsree at 2022-01-15 21:05

Related

Figma API client written in pure Dart

figma A library for interacting with Figma APIs. Created from templates made available by Stagehand under a BSD-style license. Usage A simple usage ex

Aug 9, 2022
‎‎‎‎‎Create a serverless Discord bot in pure dart using Discord Interactions webhooks

Create a serverless Discord bot in pure dart using Discord Interactions webhooks Features Feature Status Manage Application Commands Full support (uni

Dec 9, 2021
Simple Chat Application using pure Firebase.

chat_app A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if this

Dec 29, 2021
A Flutter plugin for handling Connectivity and REAL Connection state in the mobile, web and desktop platforms. Supports iOS, Android, Web, Windows, Linux and macOS.
A Flutter plugin for handling Connectivity and REAL Connection state in the mobile, web and desktop platforms. Supports iOS, Android, Web, Windows, Linux and macOS.

cross_connectivity A Flutter plugin for handling Connectivity and REAL Connection state in the mobile, web and desktop platforms. Supports iOS, Androi

Jul 24, 2022
Real short video app with firebase and pixels API.Where you can create a short video with pixels' stock videos and also merge your audio.
Real short video app with firebase and pixels API.Where you can create a short video with pixels' stock videos and also merge your audio.

Flutter Short Videos Platform Short videos platform with Flutter and Firebase. About Real short video app with firebase and pixels API.Where you can c

Aug 7, 2022
Real-world movie database mobile application with the Flutter SDK and DDD clean architecture.
Real-world movie database mobile application with the Flutter SDK and DDD clean architecture.

Moving Pictures Moving Pictures is a mobile application built with the Flutter SDK for Android and iOS. It’s an application that gets the information

Aug 3, 2022
Easily scan your documents on the go with Paper. Scan those documents at ease with real-time document detection, multi paged pdfs, optimized and cleaner clicks from an easy to navigate UX
Easily scan your documents on the go with Paper. Scan those documents at ease with real-time document detection, multi paged pdfs, optimized and cleaner clicks  from an easy to navigate UX

Easily scan your documents on the go with Paper. Scan those documents at ease with real-time document detection, multi paged pdfs, optimized and cleaner clicks from an easy to navigate UX

May 6, 2022
A set of real world timelines to showcase the use of timeline_tile package, built with Flutter.
A set of real world timelines to showcase the use of timeline_tile package, built with Flutter.

beatiful_timelines Beautiful timelines built with Flutter and timeline_tile. Current examples: Timeline Showcase Football Timeline Activity Timeline S

Aug 8, 2022
Sistema de monitoramento de reservatório FLUTTER com banco de dados em tempo real (Firebase)

Internet das coisas Monitoramento de reservatório de água em tempo real Projeto Este aplicativo foi desenvolvido em Flutter. Telas do projeto ESP32 Pa

Dec 5, 2021
This is a mobile app created using Flutter, corona.lmao.ninja (Real Time News about Covid 19).
This is a mobile app created using Flutter, corona.lmao.ninja (Real Time News about Covid 19).

Covid 19 News This is a mobile app created using Flutter, corona.lmao.ninja (Real Time News about Covid 19). There are some test files that needed to

Jan 28, 2022
A Real-time Fps Tool for Android
A Real-time Fps Tool for Android

fpsviewer A Real-time Fps Tool for Android, 一个能实时显示fps,一段时间的平均帧率,以及帧率范围占比,并能获取卡顿堆栈的可视化工具。侵入性低,通过在异步线程采样获取堆栈,无代码侵入,性能消耗可忽略,对性能监控项的异常数据进行采集和分析,整理输出展示相应的

Aug 4, 2022
App de estudo para treino de layout e requisição de APIs. Faz conversão de real para 5 tipos de criptomoedas, exibe gráfico de evolução e as últimas notícias do mercado. Em construção.

cryptonight A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if t

Mar 5, 2022
Real estate listing app
Real estate listing app

Dufuna Real estate listing app Run Locally Clone the project

Aug 4, 2022
Clima ☁ A real-time weather app using OpenWeatherMap API
Clima ☁ A real-time weather app using OpenWeatherMap API

A real-time weather app Demo What I learned from this project How to use Dart to perform asynchronous tasks. Understand async and await.

Feb 21, 2022
A Flutter package that makes it easy to customize and work with your Flutter desktop app's system tray.
A Flutter package that makes it easy to customize and work with your Flutter desktop app's system tray.

system_tray A Flutter package that that enables support for system tray menu for desktop flutter apps. on Windows, macOS and Linux. Features: - Modify

Aug 15, 2022
A Music Recommendation System made using Flutter and backed by FastAPI.

ProjectX Music A Music Recommendation System made using Flutter and backed by FastAPI. Introduction ProjectX Music is an online mobile application tha

Jul 11, 2022
Plant-monitor - Plant monitoring system using IoT, MongoDB, and Flutter

Plant Monitor IoT based plant monitoring system which is connected to MongoDB. T

Jun 9, 2022
Naj - An open-source code generation and file management system written in Dart

Naj An open-source code generation and file management system written in Dart Ov

Feb 14, 2022
Paper is a implementation of Flx Design System for Flutter
Paper is a implementation of Flx Design System for Flutter

Paper is a implementation of Flx Design System for Flutter. Installing Add a lines like this to your pubspec.yaml. dependencies: paper: git:

Nov 21, 2021