Files
old-holivud2/app/models/mux_live_stream.rb
2020-08-20 06:50:51 +02:00

84 lines
2.3 KiB
Ruby

class MuxLiveStream
attr_accessor :simulcast_id, :simulcast_destination
def self.create_with_simulcast(destination = nil)
destination ||= MillicastDestination.create
MuxLiveStream.new.tap do |stream|
stream.id # force the live stream to be created by calling for its id
stream.create_simulcast(destination)
end
end
def id
live_stream.data.id
end
def key
live_stream.data.stream_key
end
def playback_id
playback.data.id
end
def destroy_stream(stream_uid)
client.delete_live_stream(stream_uid)
end
def create_simulcast(destination)
return if test_mode_enabled?
request = MuxRuby::CreateSimulcastTargetRequest.new(stream_key: destination.key, url: destination.url)
result = client.create_live_stream_simulcast_target(id, request)
self.simulcast_destination = destination
self.simulcast_id = result.data.id
end
private
def live_stream
@live_stream ||= create_live_stream
end
def playback
@playback ||= create_playback
end
# Source: https://github.com/muxinc/mux-ruby/blob/1.4.0/examples/video/exercise-live-streams.rb
def create_live_stream
create_asset_request = MuxRuby::CreateAssetRequest.new
create_asset_request.playback_policy = [MuxRuby::PlaybackPolicy::PUBLIC]
create_asset_request.mp4_support = "standard"
create_live_stream_request = MuxRuby::CreateLiveStreamRequest.new
create_live_stream_request.new_asset_settings = create_asset_request
create_live_stream_request.playback_policy = [MuxRuby::PlaybackPolicy::PUBLIC]
create_live_stream_request.reduced_latency = reduced_latency_enabled?
create_live_stream_request.test = test_mode_enabled?
client.create_live_stream(create_live_stream_request)
end
def create_playback
create_playback_id_request = MuxRuby::CreatePlaybackIDRequest.new
# TODO: Use signed policy in the future
# create_playback_id_request.policy = MuxRuby::PlaybackPolicy::SIGNED
create_playback_id_request.policy = MuxRuby::PlaybackPolicy::PUBLIC
client.create_live_stream_playback_id(live_stream.data.id, create_playback_id_request)
end
def reduced_latency_enabled?
ENV["MUX_REDUCED_LATENCY_ENABLED"].present?
end
def test_mode_enabled?
!ENV["MUX_TEST_MODE_DISABLED"].present?
end
def client
@client ||= MuxRuby::LiveStreamsApi.new
end
end