From 9a8aca72ab8fb4e15d05277f22a776f0b4ad508e Mon Sep 17 00:00:00 2001 From: Kieran Date: Mon, 31 Jul 2023 15:14:13 +0100 Subject: [PATCH] Use stream id in streaming url --- .../Controllers/PlaylistController.cs | 27 +++++++++++++++---- NostrStreamer/Services/StreamEventBuilder.cs | 2 +- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/NostrStreamer/Controllers/PlaylistController.cs b/NostrStreamer/Controllers/PlaylistController.cs index 7aa3b24..f5c592d 100644 --- a/NostrStreamer/Controllers/PlaylistController.cs +++ b/NostrStreamer/Controllers/PlaylistController.cs @@ -112,13 +112,30 @@ public class PlaylistController : Controller } [HttpGet("{pubkey}.m3u8")] - public async Task CreateMultiBitrate([FromRoute] string pubkey) + public async Task GetCurrentStreamRedirect([FromRoute] string pubkey) { try { var streamManager = await _streamManagerFactory.ForCurrentStream(pubkey); - var userStream = streamManager.GetStream(); + return Redirect($"{userStream.Id}.m3u8"); + } + catch (Exception ex) + { + _logger.LogWarning("Failed to get stream for {pubkey} {message}", pubkey, ex.Message); + } + + return NotFound(); + } + + [HttpGet("{id:guid}.m3u8")] + public async Task CreateMultiBitrate([FromRoute] Guid id) + { + try + { + var streamManager = await _streamManagerFactory.ForStream(id); + var userStream = streamManager.GetStream(); + var hlsCtx = await GetHlsCtx(userStream); if (string.IsNullOrEmpty(hlsCtx)) { @@ -156,7 +173,7 @@ public class PlaylistController : Controller } catch (Exception ex) { - _logger.LogWarning("Failed to get stream for {pubkey} {message}", pubkey, ex.Message); + _logger.LogWarning("Failed to get stream for {id} {message}", id, ex.Message); Response.StatusCode = 404; } } @@ -191,7 +208,7 @@ public class PlaylistController : Controller Response.StatusCode = 404; return; } - + // https://developer.apple.com/documentation/http-live-streaming/video-on-demand-playlist-construction Response.ContentType = "application/vnd.apple.mpegurl"; await using var sw = new StreamWriter(Response.Body); @@ -231,7 +248,7 @@ public class PlaylistController : Controller var frag = MP4Stream.Open(tmpFrag, FileMode.Open, FileAccess.Read); var boxes = frag.ReadRootBoxes(); - + Response.ContentType = "video/mp4"; using var outStream = new MemoryStream(); foreach (var box in boxes.Take(2)) diff --git a/NostrStreamer/Services/StreamEventBuilder.cs b/NostrStreamer/Services/StreamEventBuilder.cs index 5d83f68..2a4fcc2 100644 --- a/NostrStreamer/Services/StreamEventBuilder.cs +++ b/NostrStreamer/Services/StreamEventBuilder.cs @@ -47,7 +47,7 @@ public class StreamEventBuilder { var viewers = _viewCounter.Current(stream.Id); var starts = new DateTimeOffset(stream.Starts).ToUnixTimeSeconds(); - tags.Add(new("streaming", new Uri(_config.DataHost, $"{user.PubKey}.m3u8").ToString())); + tags.Add(new("streaming", new Uri(_config.DataHost, $"{stream.Id}.m3u8").ToString())); tags.Add(new("starts", starts.ToString())); tags.Add(new("current_participants", viewers.ToString()));