GithubHelp home page GithubHelp logo

glimesh / glimesh.tv Goto Github PK

View Code? Open in Web Editor NEW
456.0 456.0 76.0 42.71 MB

Glimesh is a next generation live streaming platform built by the community, for the community.

Home Page: https://glimesh.tv

License: Other

Elixir 64.71% Dockerfile 0.07% JavaScript 1.90% HTML 31.27% Shell 0.05% SCSS 2.00% CSS 0.01% Batchfile 0.01%
elixir streaming

glimesh.tv's People

Contributors

acpixel avatar adamhebby avatar amytho avatar cactysman avatar clone1018 avatar coredreamstudios avatar danstiner avatar deerock94 avatar dependabot[bot] avatar drehd avatar eein avatar embershadow avatar hahkeye avatar haydenmc avatar heiwa1580 avatar jfarre20 avatar kianmeng avatar littletooncat avatar megami-studios avatar memoryleakdeath avatar mja00 avatar pinhotx avatar ponkey364 avatar ramireztime avatar ribenaberri avatar shrink avatar tjcasey avatar tortlewortle avatar wolfcomp avatar zaeo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

glimesh.tv's Issues

Store bans persistently on a per-channel location

Currently, bans are stored globally on a temporary :ets table. We created a user_moderation_log channel, but I think we'll need something a bit faster for checking if a user is banned in a specific channel.

Moderation tools

Not just moderation tools for channel mods but moderation tools for global mods. IE: A way for global mods/staff to shut a stream down and ban them from the platform. Various tools for staff to use to moderate channels themselves.

List of tools that would be needed:

  • Temp ban streamer(when you view the stream page it returns a message stating they're currently banned)
  • Perm ban streamers(Same as above but they'll only ever be unbanned manually)
  • Stop stream(if someone hijacks someone else's stream, allowing staff to cut the stream off)
  • Chat moderation tools(timeout, ban, slowmode, follower only mode, sub mode, etc.)

These tools would be placed behind a staff dashboard and I would recommend requiring something like Cloudflare Access(like a company VPN but not garbage) to be used to lock people out of the panel even if they somehow get the staff's login credentials.

Login with Twitter

Should allow for Twitter as a social login that users can use to get started a bit quicker. This should also replace the current "type in your username" method.

Login with Twitch & migrate

This is an early idea, but we could offer a login with Twitch button that allows users to automatically pull over any data we can get from them, and load it up into the users profile.

There's also a potential here of using this as a discovery feature, so you can immediately find your friends on Glimesh!

socials on profile page should automatically strip out @ symbols

when adding your social accounts it does not strip out the @ character at the beginning of the account name. it is quite common for users to refer to their twitter/instagram page(maybe others too) prefixed with an @ symbol. when the link is generated for the profile page it also includes the extra character

Load balancing mechanism for Janus streams

This issue tracks implementing a load balancing solution for the Janus streaming back-end so that streams that are ingested can be replicated across several "edge" nodes that users will connect to via WebRTC for viewing.

Self host Google Fonts

Right now, we're using Google's CDN for serving fonts to our users. This also means we are sending them data about our traffic, usage and users.

I do not want to utilize Google as a CDN provider. So we need to self-host these fonts on our platform.

validate registration email addresses server-side

email addresses are validated only to contain an alphanumeric prefix, an @ symbol, and an alphanumeric suffix. cykotiq@localhost would be valid for example. At minimum it should check for a valid iana TLD (.com, .net, etc)

Redirect to primary domain name

We're getting a lot of people hit www. our domain, which causes Phoenix to freak out a bit.

app_1  | 21:50:50.251 [error] Could not check origin for Phoenix.Socket transport.
app_1  |
app_1  | Origin of the request: https://www.glimesh.tv
app_1  |
app_1  | This happens when you are attempting a socket connection to
app_1  | a different host than the one configured in your config/
app_1  | files. For example, in development the host is configured
app_1  | to "localhost" but you may be trying to access it from
app_1  | "127.0.0.1". To fix this issue, you may either:
app_1  |
app_1  |   1. update [url: [host: ...]] to your actual host in the
app_1  |      config file for your current environment (recommended)
app_1  |
app_1  |   2. pass the :check_origin option when configuring your
app_1  |      endpoint or when configuring the transport in your
app_1  |      UserSocket module, explicitly outlining which origins
app_1  |      are allowed:
app_1  |
app_1  |         check_origin: ["https://example.com",
app_1  |                        "//another.com:888", "//other.com"]
app_1  |
app_1  |

Seems like https://hexdocs.pm/plug_canonical_host/readme.html might fix it?

Migrate to open-sourceable CSS design

Currently, the use of a purchased CSS theme prevents us from open sourcing the entire repository. We should really spend some time redesigning the interface to by owned by Glimesh.

Add database-driven categories of streams

Key Description
id id
slug url safe name
name human friendly name (i18n key)
image preview card image
parent_id if this is owned by another category, which?

We can also decide if the primary nav should be driven by this table, or hardcoded for performance.

Add blog

I can be convinced this doesn't fit into Glimesh, but I want to blog about our recent streaming success & help drive traffic to the site.

Issues/PR templates and a CONTRIBUTING.md file

These would be nice to have to keep code contributions consistent. I can handle drafting them up, but clone would have to ultimately be the one to implement the templates. CONTRIBUTING.md I can make a PR for.

Internationalization!

We must support other languages! Part of the scope of this ticket is figuring out how custom languages work with Phoenix.

Pop-out chat

Allow users to pop-out chat into it's own responsive window.

๐ŸŽฅ Video Streaming Infrastructure

I'm starting this issue to track and discuss the approach for the video streaming infrastructure behind Glimesh.

AKA, how do the bits get from the streamer's OBS instance to an ingest server to the viewer's browser?

Today, for demo streams, we are utilizing OvenMediaEngine's fantastic software, which allows for RTMP ingest, routing from origin server to various edge servers, and playback via WebRTC in the browser. The latency is impressive, but still a tad above 1 second. I suspect this is at least in part due to the RTMP protocol used to transmit from OBS to the OME Origin server. Unlike FTL, RTMP utilizes TCP transport, which introduces some additional latency in order to guarantee delivery of packets and packet ordering.

FTL utilized a UDP transport, which does not guarantee packet delivery or packet ordering, but operates at maximum speed. This is the transport utilized by most real-time applications (gaming, audio/video chat, etc.)

A quick test utilizing Janus WebRTC gateway with an RTP (UDP-based) ingest showed some very promising latency (disclaimers being that this is 1 viewer, no load balancing, Seattle<->SFO connection):

Janus RTP latency test

It may be possible to create a Janus plugin to accept FTL connections and use this to ingest streams on a UDP transport - effectively what Mixer was doing. This also means that the existing FTL output plugins on OBS would be supported, so streamers wouldn't need to use any additional software to enjoy low latency streaming on Glimesh. Currently investigating this option!

Add streamer subscriptions

Users should be able to support their favorite streamers through a monthly subscription to their content.

Add auth / load balancing layer microservice ahead of OME

OvenMediaEngine has been a great software that has successfully hosted numerous streams for Glimesh. However there are a couple of mis-fits of our product's requirements.

  1. No authentication support
    There's preliminary support for signed keys, AirenSoft/OvenMediaEngine#68 but the implementation is not entirely clear yet.
  2. No native load balancing between origins / clients
    Need some mechanism for load balancing clients geographically and based on load.

I'm proposing we create a middleware microservice to handle the authentication handshake based on the stream key, and locate the streamer geographically. The ideal state is then the microservice just proxies packets directly to OME.

Untitled Diagram

Janus FTL Plugin

This issue tracks developing a Janus FTL plugin so we can ingest FTL streams via Janus.

Add follow functionality

You should be able to follow with your favorite content creators, and view a listing of which of them are live.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.