Skip to content

Commit

Permalink
Extract HLS stream test function
Browse files Browse the repository at this point in the history
  • Loading branch information
dmitrylyzo committed Sep 13, 2023
1 parent b2c7d93 commit 251a601
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 5 deletions.
9 changes: 4 additions & 5 deletions src/plugins/htmlVideoPlayer/plugin.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import { setBackdropTransparency, TRANSPARENCY_LEVEL } from '../../components/ba
import { PluginType } from '../../types/plugin.ts';
import Events from '../../utils/events.ts';
import { includesAny } from '../../utils/container.ts';
import { isHls } from '../../utils/mediaSource.ts';
import debounce from 'lodash-es/debounce';

/**
Expand Down Expand Up @@ -74,7 +75,7 @@ function enableNativeTrackSupport(mediaSource, track) {
return true;
}

if (browser.firefox && (mediaSource?.TranscodingSubProtocol || mediaSource?.Container) === 'hls') {
if (browser.firefox && isHls(mediaSource)) {
return false;
}

Expand Down Expand Up @@ -344,12 +345,10 @@ export class HtmlVideoPlayer {
const mediaSource = streamInfo.mediaSource;
const item = streamInfo.item;

const isHls = (mediaSource?.TranscodingSubProtocol || mediaSource?.Container) === 'hls';

// Huge hack alert. Safari doesn't seem to like if the segments aren't available right away when playback starts
// This will start the transcoding process before actually feeding the video url into the player
// Edit: Also seeing stalls from hls.js
if (mediaSource && item && !mediaSource.RunTimeTicks && isHls && streamInfo.playMethod === 'Transcode' && (browser.iOS || browser.osx)) {
if (mediaSource && item && !mediaSource.RunTimeTicks && isHls(mediaSource) && streamInfo.playMethod === 'Transcode' && (browser.iOS || browser.osx)) {
const hlsPlaylistUrl = streamInfo.url.replace('master.m3u8', 'live.m3u8');

loading.show();
Expand Down Expand Up @@ -513,7 +512,7 @@ export class HtmlVideoPlayer {
elem.crossOrigin = crossOrigin;
}

if (enableHlsJsPlayer(options.mediaSource.RunTimeTicks, 'Video') && (options.mediaSource.TranscodingSubProtocol || options.mediaSource.Container) === 'hls') {
if (enableHlsJsPlayer(options.mediaSource.RunTimeTicks, 'Video') && isHls(options.mediaSource)) {
return this.setSrcWithHlsJs(elem, options, val);
} else if (options.playMethod !== 'Transcode' && options.mediaSource.Container === 'flv') {
return this.setSrcWithFlvJs(elem, options, val);
Expand Down
10 changes: 10 additions & 0 deletions src/utils/mediaSource.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { MediaSourceInfo } from '@jellyfin/sdk/lib/generated-client';

/**
* Checks if the media source is an HLS stream.
* @param mediaSource The media source.
* @returns _true_ if the media source is an HLS stream, _false_ otherwise.
*/
export function isHls(mediaSource: MediaSourceInfo|null|undefined): boolean {
return (mediaSource?.TranscodingSubProtocol || mediaSource?.Container) === 'hls';
}

0 comments on commit 251a601

Please sign in to comment.