mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-12-16 14:03:03 +03:00
@@ -1132,30 +1132,30 @@ namespace Jellyfin.Api.Controllers
|
||||
|
||||
var builder = new StringBuilder();
|
||||
|
||||
builder.AppendLine("#EXTM3U");
|
||||
builder.AppendLine("#EXT-X-PLAYLIST-TYPE:VOD");
|
||||
builder.AppendLine("#EXT-X-VERSION:3");
|
||||
builder.AppendLine("#EXT-X-TARGETDURATION:" + Math.Ceiling(segmentLengths.Length > 0 ? segmentLengths.Max() : state.SegmentLength).ToString(CultureInfo.InvariantCulture));
|
||||
builder.AppendLine("#EXT-X-MEDIA-SEQUENCE:0");
|
||||
builder.AppendLine("#EXTM3U")
|
||||
.AppendLine("#EXT-X-PLAYLIST-TYPE:VOD")
|
||||
.AppendLine("#EXT-X-VERSION:3")
|
||||
.Append("#EXT-X-TARGETDURATION:")
|
||||
.Append(Math.Ceiling(segmentLengths.Length > 0 ? segmentLengths.Max() : state.SegmentLength))
|
||||
.AppendLine()
|
||||
.AppendLine("#EXT-X-MEDIA-SEQUENCE:0");
|
||||
|
||||
var queryString = Request.QueryString;
|
||||
var index = 0;
|
||||
|
||||
var segmentExtension = GetSegmentFileExtension(streamingRequest.SegmentContainer);
|
||||
var queryString = Request.QueryString;
|
||||
|
||||
foreach (var length in segmentLengths)
|
||||
{
|
||||
builder.AppendLine("#EXTINF:" + length.ToString("0.0000", CultureInfo.InvariantCulture) + ", nodesc");
|
||||
builder.AppendLine(
|
||||
string.Format(
|
||||
CultureInfo.InvariantCulture,
|
||||
"hls1/{0}/{1}{2}{3}",
|
||||
name,
|
||||
index.ToString(CultureInfo.InvariantCulture),
|
||||
segmentExtension,
|
||||
queryString));
|
||||
|
||||
index++;
|
||||
builder.Append("#EXTINF:")
|
||||
.Append(length.ToString("0.0000", CultureInfo.InvariantCulture))
|
||||
.AppendLine(", nodesc")
|
||||
.Append("hls1/")
|
||||
.Append(name)
|
||||
.Append('/')
|
||||
.Append(index++)
|
||||
.Append(segmentExtension)
|
||||
.Append(queryString)
|
||||
.AppendLine();
|
||||
}
|
||||
|
||||
builder.AppendLine("#EXT-X-ENDLIST");
|
||||
|
||||
@@ -1017,9 +1017,9 @@ namespace Jellyfin.Api.Controllers
|
||||
[FromQuery] bool validateListings = false,
|
||||
[FromQuery] bool validateLogin = false)
|
||||
{
|
||||
using var sha = SHA1.Create();
|
||||
if (!string.IsNullOrEmpty(pw))
|
||||
{
|
||||
using var sha = SHA1.Create();
|
||||
listingsProviderInfo.Password = Hex.Encode(sha.ComputeHash(Encoding.UTF8.GetBytes(pw)));
|
||||
}
|
||||
|
||||
|
||||
@@ -281,7 +281,8 @@ namespace Jellyfin.Api.Controllers
|
||||
var builder = new StringBuilder();
|
||||
builder.AppendLine("#EXTM3U")
|
||||
.Append("#EXT-X-TARGETDURATION:")
|
||||
.AppendLine(segmentLength.ToString(CultureInfo.InvariantCulture))
|
||||
.Append(segmentLength)
|
||||
.AppendLine()
|
||||
.AppendLine("#EXT-X-VERSION:3")
|
||||
.AppendLine("#EXT-X-MEDIA-SEQUENCE:0")
|
||||
.AppendLine("#EXT-X-PLAYLIST-TYPE:VOD");
|
||||
@@ -296,8 +297,9 @@ namespace Jellyfin.Api.Controllers
|
||||
var lengthTicks = Math.Min(remaining, segmentLengthTicks);
|
||||
|
||||
builder.Append("#EXTINF:")
|
||||
.Append(TimeSpan.FromTicks(lengthTicks).TotalSeconds.ToString(CultureInfo.InvariantCulture))
|
||||
.AppendLine(",");
|
||||
.Append(TimeSpan.FromTicks(lengthTicks).TotalSeconds)
|
||||
.Append(',')
|
||||
.AppendLine();
|
||||
|
||||
var endPositionTicks = Math.Min(runtime, positionTicks + segmentLengthTicks);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user