FIXA-懒得写了
This commit is contained in:
@@ -579,6 +579,10 @@ header p {
|
||||
transition: opacity 0.3s ease;
|
||||
}
|
||||
|
||||
.player-section {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.player-overlay h3 {
|
||||
margin-bottom: 0.5rem;
|
||||
font-weight: 600;
|
||||
@@ -590,7 +594,7 @@ header p {
|
||||
}
|
||||
|
||||
.now-playing {
|
||||
margin-top: 1.5rem;
|
||||
margin-top: 2.5rem;
|
||||
padding-top: 1.5rem;
|
||||
border-top: 1px solid var(--panel-border);
|
||||
}
|
||||
@@ -609,11 +613,14 @@ header p {
|
||||
}
|
||||
|
||||
.custom-controls {
|
||||
margin-top: 0.9rem;
|
||||
position: relative;
|
||||
z-index: 12;
|
||||
margin: -5.75rem 1rem 0;
|
||||
padding: 0.9rem 1rem;
|
||||
border-radius: 14px;
|
||||
border: 1px solid var(--panel-border);
|
||||
background: rgba(15, 23, 42, 0.72);
|
||||
background: linear-gradient(180deg, rgba(15, 23, 42, 0.18), rgba(15, 23, 42, 0.86));
|
||||
backdrop-filter: blur(10px);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
@@ -627,7 +634,7 @@ header p {
|
||||
.custom-controls.controls-faded,
|
||||
.custom-seek-container.controls-faded {
|
||||
opacity: 0;
|
||||
transform: translateY(8px);
|
||||
transform: translateY(12px);
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
@@ -989,6 +996,7 @@ header p {
|
||||
|
||||
.custom-controls {
|
||||
align-items: center;
|
||||
margin: -6.25rem 0.75rem 0;
|
||||
}
|
||||
|
||||
.controls-left,
|
||||
|
||||
@@ -110,6 +110,21 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
}
|
||||
};
|
||||
|
||||
const createStreamSessionId = () => `${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
|
||||
|
||||
const buildStreamUrl = (targetSeconds = null) => {
|
||||
const codec = codecSelect?.value || 'h264';
|
||||
const encoder = encoderSelect?.value || 'software';
|
||||
const streamSessionId = createStreamSessionId();
|
||||
let streamUrl = `/api/stream?bucket=${encodeURIComponent(selectedBucket)}&key=${encodeURIComponent(selectedKey)}&codec=${encodeURIComponent(codec)}&encoder=${encodeURIComponent(encoder)}&streamSessionId=${encodeURIComponent(streamSessionId)}`;
|
||||
if (typeof targetSeconds === 'number' && Number.isFinite(targetSeconds) && targetSeconds > 0) {
|
||||
streamUrl += `&ss=${targetSeconds}`;
|
||||
}
|
||||
if (s3Username) streamUrl += `&username=${encodeURIComponent(s3Username)}`;
|
||||
if (s3Password) streamUrl += `&password=${encodeURIComponent(s3Password)}`;
|
||||
return streamUrl;
|
||||
};
|
||||
|
||||
const updatePlayControls = () => {
|
||||
if (controlPlayToggle) {
|
||||
controlPlayToggle.textContent = videoPlayer.paused ? 'Play' : 'Pause';
|
||||
@@ -510,11 +525,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
}
|
||||
|
||||
// Build new stream URL with ss parameter
|
||||
const codec = codecSelect?.value || 'h264';
|
||||
const encoder = encoderSelect?.value || 'software';
|
||||
let streamUrl = `/api/stream?bucket=${encodeURIComponent(selectedBucket)}&key=${encodeURIComponent(selectedKey)}&codec=${encodeURIComponent(codec)}&encoder=${encodeURIComponent(encoder)}&ss=${targetSeconds}`;
|
||||
if (s3Username) streamUrl += `&username=${encodeURIComponent(s3Username)}`;
|
||||
if (s3Password) streamUrl += `&password=${encodeURIComponent(s3Password)}`;
|
||||
const streamUrl = buildStreamUrl(targetSeconds);
|
||||
|
||||
// Changing src automatically aborts the previous HTTP request,
|
||||
// which triggers res.on('close') on the server, killing the old ffmpeg process
|
||||
@@ -876,9 +887,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
const codec = codecSelect?.value || 'h264';
|
||||
const encoder = encoderSelect?.value || 'software';
|
||||
if (!selectedBucket) throw new Error('No bucket selected');
|
||||
let streamUrl = `/api/stream?bucket=${encodeURIComponent(selectedBucket)}&key=${encodeURIComponent(selectedKey)}&codec=${encodeURIComponent(codec)}&encoder=${encodeURIComponent(encoder)}`;
|
||||
if (s3Username) streamUrl += `&username=${encodeURIComponent(s3Username)}`;
|
||||
if (s3Password) streamUrl += `&password=${encodeURIComponent(s3Password)}`;
|
||||
const streamUrl = buildStreamUrl();
|
||||
videoPlayer.src = streamUrl;
|
||||
videoPlayer.load();
|
||||
videoPlayer.addEventListener('loadedmetadata', () => {
|
||||
|
||||
Reference in New Issue
Block a user