mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-07-09 03:04:20 -04:00
Starting a stats menu.
This commit is contained in:
parent
3f284fad42
commit
d208f0f543
@ -1,6 +1,7 @@
|
||||
import { HttpClientModule } from '@angular/common/http';
|
||||
import { NgModule } from '@angular/core';
|
||||
import { MatButtonModule } from '@angular/material/button';
|
||||
import { MatCardModule } from '@angular/material/card';
|
||||
import { MatRippleModule } from '@angular/material/core';
|
||||
import { MatIconModule } from '@angular/material/icon';
|
||||
import { MatMenuModule } from '@angular/material/menu';
|
||||
@ -17,10 +18,10 @@ import { BrowseComponent } from './browse/browse.component';
|
||||
import { CollectionComponent } from './collection/collection.component';
|
||||
import { EpisodesListComponent } from './episodes-list/episodes-list.component';
|
||||
import { NotFoundComponent } from './not-found/not-found.component';
|
||||
import { PlayerComponent } from './player/player.component';
|
||||
import { ShowDetailsComponent } from './show-details/show-details.component';
|
||||
import { SearchComponent } from './search/search.component';
|
||||
import { PeopleListComponent } from './people-list/people-list.component';
|
||||
import { PlayerComponent } from './player/player.component';
|
||||
import { SearchComponent } from './search/search.component';
|
||||
import { ShowDetailsComponent } from './show-details/show-details.component';
|
||||
import { ShowsListComponent } from './shows-list/shows-list.component';
|
||||
|
||||
|
||||
@ -50,8 +51,9 @@ import { ShowsListComponent } from './shows-list/shows-list.component';
|
||||
MatMenuModule,
|
||||
MatSliderModule,
|
||||
MatTooltipModule,
|
||||
MatRippleModule
|
||||
],
|
||||
MatRippleModule,
|
||||
MatCardModule
|
||||
],
|
||||
providers: [],
|
||||
bootstrap: [AppComponent]
|
||||
})
|
||||
|
@ -16,6 +16,25 @@
|
||||
<h5>{{this.item.showTitle}}</h5>
|
||||
</div>
|
||||
|
||||
<mat-card class="d-none w-25 m-5" [ngClass]="{'d-block': this.displayStats}">
|
||||
<mat-card-header>
|
||||
<mat-card-title>Stats</mat-card-title>
|
||||
</mat-card-header>
|
||||
<mat-card-content>
|
||||
Play method: <span style="float: right">{{this.playMethod}}</span>
|
||||
<br />
|
||||
<br />
|
||||
Video Container: <span style="float: right"><i class="material-icons" style="vertical-align: middle">{{this.supportList?.container ? check_circle : cancel}}</i>{{this.item.container}}</span>
|
||||
<br />
|
||||
Video Codec: <span style="float: right"><i class="material-icons" style="vertical-align: middle">cancel</i> {{this.item.video.codec}}</span>
|
||||
<br />
|
||||
Audio Codec: <span style="float: right">{{this.item.audios[0].codec}}</span>
|
||||
<br />
|
||||
Subtitle Codec: <span style="float: right">{{this.selectedSubtitle ? this.selectedSubtitle.codec : "none"}}</span>
|
||||
<br/>
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
|
||||
<div class="controller container-fluid" id="controller">
|
||||
<div class="img d-none d-sm-block">
|
||||
<img src="poster/{{this.item.showSlug}}" />
|
||||
@ -72,7 +91,7 @@
|
||||
<button mat-icon-button matTooltipPosition="above" matTooltip="Cast">
|
||||
<mat-icon>cast</mat-icon>
|
||||
</button>
|
||||
<button mat-icon-button matTooltipPosition="above" matTooltip="Settings">
|
||||
<button mat-icon-button matTooltipPosition="above" [matMenuTriggerFor]="settings" matTooltip="Settings">
|
||||
<mat-icon>settings</mat-icon>
|
||||
</button>
|
||||
<button mat-icon-button matTooltipPosition="above" [matTooltip]="fullscreenTooltip" id="fullscreen" (click)="fullscreen()">
|
||||
@ -101,6 +120,31 @@
|
||||
</div>
|
||||
</ng-template>
|
||||
</mat-menu>
|
||||
|
||||
<mat-menu #settings="matMenu">
|
||||
<ng-template matMenuContent>
|
||||
<button mat-menu-item (click)="this.displayStats = !this.displayStats">
|
||||
<span>Stats</span>
|
||||
</button>
|
||||
<button mat-menu-item [matMenuTriggerFor]="method">
|
||||
<span>Method</span>
|
||||
</button>
|
||||
</ng-template>
|
||||
</mat-menu>
|
||||
|
||||
<mat-menu #method="matMenu">
|
||||
<ng-template matMenuContent>
|
||||
<button mat-menu-item (click)="selectPlayMethod('Direct Play')">
|
||||
<span>Direct Play</span>
|
||||
</button>
|
||||
<button mat-menu-item (click)="selectPlayMethod('Transmux')">
|
||||
<span>Transmux</span>
|
||||
</button>
|
||||
<button mat-menu-item (click)="selectPlayMethod('Transcode')">
|
||||
<span>Transcode</span>
|
||||
</button>
|
||||
</ng-template>
|
||||
</mat-menu>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -5,7 +5,7 @@ import { ActivatedRoute, Event, NavigationCancel, NavigationEnd, NavigationStart
|
||||
import { Track, WatchItem } from "../../models/watch-item";
|
||||
import { Location } from "@angular/common";
|
||||
import * as Hls from "hls.js"
|
||||
import { getPlaybackMethod, method } from "../../videoSupport/playbackMethodDetector";
|
||||
import { getPlaybackMethod, method, getWhatIsSupported, SupportList } from "../../videoSupport/playbackMethodDetector";
|
||||
|
||||
declare var SubtitleManager: any;
|
||||
|
||||
@ -40,7 +40,10 @@ export class PlayerComponent implements OnInit
|
||||
playTooltip: string = "Pause"; //Text used in the play tooltip
|
||||
fullscreenTooltip: string = "Fullscreen"; //Text used in the fullscreen tooltip
|
||||
|
||||
playMethod: method;
|
||||
playMethod: method = method.direct;
|
||||
|
||||
displayStats: boolean = false;
|
||||
supportList: SupportList;
|
||||
|
||||
private player: HTMLVideoElement;
|
||||
private hlsPlayer: Hls = new Hls();
|
||||
@ -75,8 +78,11 @@ export class PlayerComponent implements OnInit
|
||||
$("#fullscreen").addClass("d-none");
|
||||
$("#volume").addClass("d-none");
|
||||
}
|
||||
if (this.player)
|
||||
this.init();
|
||||
setTimeout(() =>
|
||||
{
|
||||
if (this.player)
|
||||
this.init();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@ -138,8 +144,11 @@ export class PlayerComponent implements OnInit
|
||||
}
|
||||
else
|
||||
{
|
||||
this.playMethod += 1;
|
||||
this.selectPlayMethod();
|
||||
if (this.playMethod == method.direct)
|
||||
this.playMethod = method.transmux;
|
||||
else
|
||||
this.playMethod = method.transcode;
|
||||
this.selectPlayMethod(this.playMethod);
|
||||
}
|
||||
}
|
||||
|
||||
@ -350,7 +359,10 @@ export class PlayerComponent implements OnInit
|
||||
}
|
||||
});
|
||||
|
||||
this.init();
|
||||
setTimeout(() =>
|
||||
{
|
||||
this.init();
|
||||
});
|
||||
}
|
||||
|
||||
init()
|
||||
@ -360,8 +372,8 @@ export class PlayerComponent implements OnInit
|
||||
this.playMethod = method[queryMethod];
|
||||
else
|
||||
this.playMethod = getPlaybackMethod(this.player, this.item);
|
||||
|
||||
this.selectPlayMethod();
|
||||
|
||||
this.selectPlayMethod(this.playMethod);
|
||||
|
||||
let sub: string = this.route.snapshot.queryParams["sub"];
|
||||
if (sub != null)
|
||||
@ -372,14 +384,17 @@ export class PlayerComponent implements OnInit
|
||||
this.selectSubtitle(this.item.subtitles.find(x => x.language == languageCode && x.isForced == forced), false);
|
||||
}
|
||||
|
||||
this.supportList = getWhatIsSupported(this.player, this.item);
|
||||
|
||||
setTimeout(() =>
|
||||
{
|
||||
this.snackBar.open("Playing: " + this.item.showTitle + " S" + this.item.seasonNumber + ":E" + this.item.episodeNumber, null, { verticalPosition: "top", horizontalPosition: "right", duration: 2000, panelClass: "info-panel" });
|
||||
}, 750);
|
||||
}
|
||||
|
||||
selectPlayMethod()
|
||||
selectPlayMethod(playMethod: method)
|
||||
{
|
||||
this.playMethod = playMethod;
|
||||
if (this.playMethod == method.direct)
|
||||
{
|
||||
this.player.src = "/video/" + this.item.link;
|
||||
|
@ -3,28 +3,45 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
||||
var detect_browser_1 = require("detect-browser");
|
||||
var method;
|
||||
(function (method) {
|
||||
method[method["direct"] = 0] = "direct";
|
||||
method[method["transmux"] = 1] = "transmux";
|
||||
method[method["transcode"] = 2] = "transcode";
|
||||
method["direct"] = "Direct Play";
|
||||
method["transmux"] = "Transmux";
|
||||
method["transcode"] = "Transcode";
|
||||
})(method = exports.method || (exports.method = {}));
|
||||
;
|
||||
var SupportList = /** @class */ (function () {
|
||||
function SupportList() {
|
||||
}
|
||||
return SupportList;
|
||||
}());
|
||||
exports.SupportList = SupportList;
|
||||
function getPlaybackMethod(player, item) {
|
||||
var browser = detect_browser_1.detect();
|
||||
// If we can't find the browser, transcode (It may or may not support containers/codecs)
|
||||
if (!browser)
|
||||
return method.transcode;
|
||||
if (containerIsSupported(player, item.container, browser.name) && item.audios.length <= 1) {
|
||||
if (videoCodecIsSupported(player, item.video.codec, browser.name) &&
|
||||
audioCodecIsSupported(player, item.audios.map(function (value) { return value.codec; }), browser.name))
|
||||
var supportList = getWhatIsSupported(player, item);
|
||||
if (supportList.container) {
|
||||
if (supportList.videoCodec && supportList.audioCodec)
|
||||
return method.direct;
|
||||
return method.transcode;
|
||||
}
|
||||
if (videoCodecIsSupported(player, item.video.codec, browser.name) &&
|
||||
audioCodecIsSupported(player, item.audios.map(function (value) { return value.codec; }), browser.name))
|
||||
if (supportList.videoCodec && supportList.audioCodec)
|
||||
return method.transmux;
|
||||
return method.transcode;
|
||||
}
|
||||
exports.getPlaybackMethod = getPlaybackMethod;
|
||||
function getWhatIsSupported(player, item) {
|
||||
var supportList = new SupportList();
|
||||
var browser = detect_browser_1.detect();
|
||||
if (!browser) {
|
||||
supportList.container = false;
|
||||
supportList.videoCodec = false;
|
||||
supportList.audioCodec = false;
|
||||
}
|
||||
else {
|
||||
supportList.container = containerIsSupported(player, item.container, browser.name) && item.audios.length <= 1;
|
||||
supportList.videoCodec = videoCodecIsSupported(player, item.video.codec, browser.name);
|
||||
supportList.videoCodec = audioCodecIsSupported(player, item.audios.map(function (value) { return value.codec; }), browser.name);
|
||||
}
|
||||
return (supportList);
|
||||
}
|
||||
exports.getWhatIsSupported = getWhatIsSupported;
|
||||
function containerIsSupported(player, container, browser) {
|
||||
var supported = false;
|
||||
switch (container) {
|
||||
|
@ -1 +1 @@
|
||||
{"version":3,"file":"playbackMethodDetector.js","sourceRoot":"","sources":["playbackMethodDetector.ts"],"names":[],"mappings":"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"}
|
||||
{"version":3,"file":"playbackMethodDetector.js","sourceRoot":"","sources":["playbackMethodDetector.ts"],"names":[],"mappings":"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"}
|
@ -1,35 +1,56 @@
|
||||
import { WatchItem, Track } from "../models/watch-item";
|
||||
import { detect, BrowserInfo } from "detect-browser";
|
||||
import { detect } from "detect-browser";
|
||||
import { Track, WatchItem } from "../models/watch-item";
|
||||
|
||||
export enum method
|
||||
{
|
||||
direct,
|
||||
transmux,
|
||||
transcode
|
||||
direct = "Direct Play",
|
||||
transmux = "Transmux",
|
||||
transcode = "Transcode"
|
||||
};
|
||||
|
||||
export class SupportList
|
||||
{
|
||||
container: boolean;
|
||||
videoCodec: boolean;
|
||||
audioCodec: boolean;
|
||||
}
|
||||
|
||||
export function getPlaybackMethod(player: HTMLVideoElement, item: WatchItem): method
|
||||
{
|
||||
let browser = detect();
|
||||
let supportList: SupportList = getWhatIsSupported(player, item);
|
||||
|
||||
// If we can't find the browser, transcode (It may or may not support containers/codecs)
|
||||
if (!browser)
|
||||
return method.transcode;
|
||||
|
||||
if (containerIsSupported(player, item.container, browser.name) && item.audios.length <= 1)
|
||||
if (supportList.container)
|
||||
{
|
||||
if (videoCodecIsSupported(player, item.video.codec, browser.name) &&
|
||||
audioCodecIsSupported(player, item.audios.map((value: Track) => value.codec), browser.name))
|
||||
if (supportList.videoCodec && supportList.audioCodec)
|
||||
return method.direct;
|
||||
return method.transcode;
|
||||
}
|
||||
|
||||
if (videoCodecIsSupported(player, item.video.codec, browser.name) &&
|
||||
audioCodecIsSupported(player, item.audios.map((value: Track) => value.codec), browser.name))
|
||||
if (supportList.videoCodec && supportList.audioCodec)
|
||||
return method.transmux;
|
||||
return method.transcode;
|
||||
}
|
||||
|
||||
export function getWhatIsSupported(player: HTMLVideoElement, item: WatchItem): SupportList
|
||||
{
|
||||
let supportList: SupportList = new SupportList();
|
||||
let browser = detect();
|
||||
|
||||
if (!browser)
|
||||
{
|
||||
supportList.container = false;
|
||||
supportList.videoCodec = false;
|
||||
supportList.audioCodec = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
supportList.container = containerIsSupported(player, item.container, browser.name) && item.audios.length <= 1;
|
||||
supportList.videoCodec = videoCodecIsSupported(player, item.video.codec, browser.name);
|
||||
supportList.videoCodec = audioCodecIsSupported(player, item.audios.map((value: Track) => value.codec), browser.name);
|
||||
}
|
||||
return (supportList);
|
||||
}
|
||||
|
||||
function containerIsSupported(player: HTMLVideoElement, container: string, browser: string): boolean
|
||||
{
|
||||
let supported: boolean = false;
|
||||
|
@ -52,13 +52,11 @@ namespace Kyoo.InternalAPI
|
||||
|
||||
if (File.Exists(manifest))
|
||||
return manifest;
|
||||
// Added an await and removed the while -> await because the dynamic dash file can't be played for now (maybe ffmpeg doesn't process in the playback order).
|
||||
/*await */Task.Run(() =>
|
||||
Task.Run(() =>
|
||||
{
|
||||
transmuxFailed = TranscoderAPI.transmux(episode.Path, manifest.Replace('\\', '/'), out playableDuration) != 0;
|
||||
//playableDuration = float.MaxValue;
|
||||
});
|
||||
while (playableDuration < 20 || (!File.Exists(manifest) && !transmuxFailed))
|
||||
while (playableDuration < 10 || (!File.Exists(manifest) && !transmuxFailed))
|
||||
await Task.Delay(10);
|
||||
return transmuxFailed ? null : manifest;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user