mirror of
https://github.com/arcodange-org/mediabunny.git
synced 2026-10-09 08:43:49 +02:00
Compare commits
18
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a1aaa8e36a | ||
|
|
aa4966a5f1 | ||
|
|
ff46a274b1 | ||
|
|
bf9e360587 | ||
|
|
1fd99b5015 | ||
|
|
6182af7c29 | ||
|
|
3e70e8912b | ||
|
|
a3aa6a69ac | ||
|
|
105a7dda2f | ||
|
|
0f6c374750 | ||
|
|
0cc564b47a | ||
|
|
57b265b897 | ||
|
|
631d207ca2 | ||
|
|
9a1b8b2602 | ||
|
|
c89e7429f7 | ||
|
|
15beb69137 | ||
|
|
dfdf7c5648 | ||
|
|
cf8cea2957 |
@@ -78,7 +78,7 @@ Mediabunny is a JavaScript library for reading, writing, and converting media (l
|
||||
|
||||
Core features include:
|
||||
|
||||
- **Wide format support**: Read **and** write MP4, MOV, WebM, MKV, WAVE, MP3, Ogg, ADTS, FLAC, MPEG-TS, HLS
|
||||
- **Wide format support**: Read **and** write MP4, MOV, WebM, MKV, HLS, WAVE, MP3, Ogg, ADTS, FLAC, MPEG-TS
|
||||
- **Built-in encoding & decoding**: Supports 25+ video, audio, and subtitle codecs, hardware-accelerated using the WebCodecs API
|
||||
- **High precision**: Fine-grained, microsecond-accurate reading and writing operations
|
||||
- **Conversion API**: Easy-to-use API with features such as transmuxing, transcoding, resizing, rotation, cropping, resampling, trimming, and more
|
||||
|
||||
+15
-25
@@ -6,7 +6,7 @@
|
||||
|
||||
<script type="module">
|
||||
//MediabunnyMp3Encoder.registerMp3Encoder();
|
||||
MediabunnyAc3.registerAc3Encoder();
|
||||
MediabunnyAc3.registerAc3Decoder();
|
||||
|
||||
const fileInput = document.createElement('input');
|
||||
fileInput.type = 'file';
|
||||
@@ -23,9 +23,7 @@
|
||||
chunked: true,
|
||||
chunkSize: 2**20
|
||||
});
|
||||
const outputFormat = new Mediabunny.HlsOutputFormat({
|
||||
segmentFormat: new Mediabunny.MpegTsOutputFormat(),
|
||||
});
|
||||
const outputFormat = new Mediabunny.WavOutputFormat();
|
||||
|
||||
const p = document.createElement('p');
|
||||
p.textContent = 'Capturing...';
|
||||
@@ -52,17 +50,16 @@
|
||||
|
||||
const output = new Mediabunny.Output({
|
||||
format: outputFormat,
|
||||
target: new Mediabunny.PathedTarget('master.m3u8', ({ path }) => new Mediabunny.BufferTarget()),
|
||||
target,
|
||||
});
|
||||
|
||||
let input;
|
||||
const tracks = [];
|
||||
let start = 0;
|
||||
|
||||
if (false) {
|
||||
if (true) {
|
||||
input = new Mediabunny.Input({
|
||||
entryPath: 'https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8',
|
||||
source: ({ path }) => new Mediabunny.UrlSource(path),
|
||||
source: new Mediabunny.UrlSource('http://localhost:8000/index.m3u8'),
|
||||
formats: Mediabunny.ALL_FORMATS,
|
||||
});
|
||||
|
||||
@@ -88,15 +85,15 @@
|
||||
});
|
||||
}
|
||||
|
||||
const primaryTrack = await input.getPrimaryAudioTrack();
|
||||
const startTime = await primaryTrack.getFirstTimestamp();
|
||||
console.log(startTime)
|
||||
|
||||
let ctx = null;
|
||||
let conversion = await Mediabunny.Conversion.init({
|
||||
input,
|
||||
output,
|
||||
audio: (track, n) => [{
|
||||
codec: 'aac',
|
||||
}, {
|
||||
codec: 'aac',
|
||||
}],
|
||||
audio: (track) => ({ discard: track.number !== primaryTrack.number }),
|
||||
/*
|
||||
video: {
|
||||
discard: true,
|
||||
@@ -121,13 +118,9 @@
|
||||
bitrate: 320000
|
||||
},
|
||||
*/
|
||||
video: [
|
||||
{ height: 1080 },
|
||||
{ height: 720 },
|
||||
{ height: 480 },
|
||||
{ height: 360 },
|
||||
{ height: 240 },
|
||||
],
|
||||
video: {
|
||||
discard: true,
|
||||
},
|
||||
tags: {} ?? {
|
||||
title: 'Bigggy',
|
||||
artist: 'Buck Bunny',
|
||||
@@ -146,11 +139,8 @@
|
||||
}
|
||||
},
|
||||
trim: {
|
||||
//end: 5,
|
||||
//start,
|
||||
//end: start + 5,
|
||||
////start: 0,
|
||||
//end: 2
|
||||
start: startTime,
|
||||
end: startTime + 2,
|
||||
},
|
||||
});
|
||||
//console.log(conversion);
|
||||
|
||||
+4
-4
@@ -19,7 +19,7 @@
|
||||
button.addEventListener('click', async () => {
|
||||
const stream = await navigator.mediaDevices.getDisplayMedia({ video: true, audio: false });
|
||||
const videoTrack = stream.getVideoTracks()[0];
|
||||
const audioTrack = stream.getAudioTracks()[0];
|
||||
const audioTrack = null && stream.getAudioTracks()[0];
|
||||
|
||||
const output = new Mediabunny.Output({
|
||||
target: new Mediabunny.BufferTarget(),
|
||||
@@ -32,7 +32,7 @@
|
||||
codec: 'vp9',
|
||||
bitrate: Mediabunny.QUALITY_MEDIUM,
|
||||
sizeChangeBehavior: 'passThrough',
|
||||
});
|
||||
}, { timestampBase: 'unix' });
|
||||
|
||||
videoSource.errorPromise.catch((d) => console.log("Hello?????", d));
|
||||
|
||||
@@ -67,9 +67,9 @@
|
||||
await output.finalize();
|
||||
|
||||
console.log(output.target.buffer);
|
||||
download(new Blob([output.target.buffer]), 'livetest' + output.format.fileExtension);
|
||||
//download(new Blob([output.target.buffer]), 'livetest' + output.format.fileExtension);
|
||||
|
||||
videoTrack?.stop();
|
||||
audioTrack?.stop();
|
||||
});
|
||||
</script>
|
||||
</script>
|
||||
|
||||
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 141 KiB After Width: | Height: | Size: 148 KiB |
@@ -194,22 +194,23 @@ const output = new Output({
|
||||
const videoSourceFull = new MediaStreamVideoTrackSource(displayTrack, {
|
||||
codec: 'avc',
|
||||
bitrate: QUALITY_HIGH,
|
||||
});
|
||||
}, { timestampBase: 'unix' });
|
||||
// 480p video
|
||||
const videoSource480p = new MediaStreamVideoTrackSource(displayTrack, {
|
||||
codec: 'avc',
|
||||
bitrate: QUALITY_MEDIUM,
|
||||
transform: { height: 480 },
|
||||
});
|
||||
}, { timestampBase: 'unix' });
|
||||
// Audio
|
||||
const audioSource = new MediaStreamAudioTrackSource(micTrack, {
|
||||
codec: 'aac',
|
||||
bitrate: QUALITY_HIGH,
|
||||
});
|
||||
}, { timestampBase: 'unix' });
|
||||
|
||||
output.addVideoTrack(videoSourceFull);
|
||||
output.addVideoTrack(videoSource480p);
|
||||
output.addAudioTrack(audioSource);
|
||||
// The "unix" stuff ensures that #EXT-X-PROGRAM-DATE-TIME gets generated
|
||||
output.addVideoTrack(videoSourceFull, { isRelativeToUnixEpoch: true });
|
||||
output.addVideoTrack(videoSource480p, { isRelativeToUnixEpoch: true });
|
||||
output.addAudioTrack(audioSource, { isRelativeToUnixEpoch: true });
|
||||
|
||||
await output.start();
|
||||
|
||||
@@ -240,6 +241,7 @@ The best thing: the player required basically no changes to be adapted for HLS.
|
||||
|
||||
Mediabunny's [`Input`](../guide/reading-media-files) and [`Output`](../guide/writing-media-files) APIs give you fine-grained control over basically everything, meaning you can do any arbitrary media operation on HLS playlists, such as:
|
||||
- Converting/compressing them
|
||||
- Downloading a section of a live stream
|
||||
- Extracting video thumbnails
|
||||
- Extracting specific tracks
|
||||
- Extracting metadata (duration, dimensions, tracks, ...)
|
||||
|
||||
@@ -43,4 +43,10 @@ features:
|
||||
target: _self
|
||||
icon:
|
||||
src: /mingcute--microphone-line.svg
|
||||
- title: HLS transcoding
|
||||
details: Convert one video into a full HLS manifest with five video renditions and one audio track.
|
||||
link: /examples/hls-transcoding/
|
||||
target: _self
|
||||
icon:
|
||||
src: /mingcute--live-line.svg
|
||||
---
|
||||
|
||||
@@ -500,3 +500,26 @@ const conversion = await Conversion.init({ input, output });
|
||||
conversion.utilizedTracks; // => InputTrack[]
|
||||
```
|
||||
A track may appear multiple times in this list when [fan-out](#track-fan-out) produces multiple output tracks from it.
|
||||
|
||||
## Converting live streams
|
||||
|
||||
Live inputs, like HLS live streams, can also be used with the Conversion API. In this case, by default, the conversion will run until the live stream has ended.
|
||||
|
||||
If you only want to convert a part of the live stream instead of waiting until it has ended, you can [trim](#trimming) the conversion. For example, here we're capturing the next 60 seconds of the live stream:
|
||||
```ts
|
||||
// Get the live edge
|
||||
const currentDuration = await input.getDurationFromMetadata(undefined, {
|
||||
skipLiveWait: true,
|
||||
});
|
||||
|
||||
const conversion = await Conversion.init({
|
||||
input,
|
||||
output,
|
||||
trim: {
|
||||
// Start at the current live edge
|
||||
start: currentDuration,
|
||||
// End at most 60 seconds later
|
||||
end: currentDuration + 60,
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
@@ -99,6 +99,8 @@ Not all codecs can be used with all containers. The following table specifies th
|
||||
| `'alaw'` | | ✓ | | | | | ✓ | | | |
|
||||
| `'webvtt'`[^webvtt] | (✓) | | (✓) | (✓) | | | | | | |
|
||||
|
||||
For HLS, the supported codecs depend on the segment format chosen.
|
||||
|
||||
[^aac]: In some browsers, AAC encoding is not supported by WebCodecs. You can polyfill it with the [`@mediabunny/aac-encoder`](./extensions/aac-encoder) extension package.
|
||||
[^mp3]: MP3 encoding is not supported by WebCodecs. You can polyfill it with the [`@mediabunny/mp3-encoder`](./extensions/mp3-encoder) extension package.
|
||||
[^flac]: FLAC encoding is not supported by WebCodecs. You can polyfill it with the [`@mediabunny/flac-encoder`](./extensions/flac-encoder) extension package.
|
||||
|
||||
@@ -89,16 +89,23 @@ console.log(writtenFiles);
|
||||
|
||||
```ts
|
||||
const root = await navigator.storage.getDirectory();
|
||||
const writePromises: Promise<void>[] = [];
|
||||
|
||||
const output = new Output({
|
||||
target: new PathedTarget(
|
||||
'master.m3u8',
|
||||
async ({ path }) => {
|
||||
const handle = await root.getFileHandle(path, { create: true });
|
||||
const writable = await handle.createWritable();
|
||||
return new StreamTarget(writable);
|
||||
},
|
||||
async ({ path }) => new BufferTarget({
|
||||
onFinalize: (buffer) => {
|
||||
writePromises.push((async () => {
|
||||
const handle = await root.getFileHandle(path, { create: true });
|
||||
const writable = await handle.createWritable();
|
||||
await writable.write(buffer);
|
||||
await writable.close();
|
||||
})());
|
||||
},
|
||||
}),
|
||||
),
|
||||
onFinalize: () => Promise.all(writePromises),
|
||||
// ...
|
||||
});
|
||||
|
||||
|
||||
+1
-1
@@ -186,7 +186,7 @@ npm install mediabunny
|
||||
```ts
|
||||
const input = new Input({
|
||||
source: new UrlSource('./bigbuckbunny.mp4'),
|
||||
formats: ALL_FORMATS, // .mp4, .webm, .wav, ...
|
||||
formats: ALL_FORMATS, // .mp4, .webm, .wav, .m3u8, ...
|
||||
});
|
||||
|
||||
const duration = await input.computeDuration();
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><path d="m12.594 23.258l-.012.002l-.071.035l-.02.004l-.014-.004l-.071-.036q-.016-.004-.024.006l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.016-.018m.264-.113l-.014.002l-.184.093l-.01.01l-.003.011l.018.43l.005.012l.008.008l.201.092q.019.005.029-.008l.004-.014l-.034-.614q-.005-.019-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.003-.011l.018-.43l-.003-.012l-.01-.01z"/><path fill="#06b6d4" d="M16.95 2.586a1 1 0 0 1 0 1.414l-3 3H19a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h3.636L7.05 5.414A1 1 0 0 1 8.465 4l2.474 2.475a.5.5 0 0 0 .707 0l3.89-3.89a1 1 0 0 1 1.414 0M19 9H5v10h14zM8.98 11.547a1.232 1.232 0 0 1 1.72-.994a22 22 0 0 1 2.2 1.123a22 22 0 0 1 2.075 1.346c.668.494.67 1.489 0 1.984A22 22 0 0 1 12.9 16.35c-.997.576-1.785.943-2.2 1.124a1.23 1.23 0 0 1-1.72-.993a23 23 0 0 1-.128-2.467c0-1.14.078-2.014.128-2.467m1.902 1.306a23 23 0 0 0 0 2.32a23 23 0 0 0 2.008-1.16a23 23 0 0 0-2.008-1.16"/></g></svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1,272 @@
|
||||
import {
|
||||
Input,
|
||||
ALL_FORMATS,
|
||||
BlobSource,
|
||||
UrlSource,
|
||||
Output,
|
||||
PathedTarget,
|
||||
BufferTarget,
|
||||
HlsOutputFormat,
|
||||
MpegTsOutputFormat,
|
||||
Conversion,
|
||||
QUALITY_VERY_HIGH,
|
||||
QUALITY_HIGH,
|
||||
QUALITY_MEDIUM,
|
||||
QUALITY_LOW,
|
||||
QUALITY_VERY_LOW,
|
||||
} from 'mediabunny';
|
||||
|
||||
import SampleFileUrl from '../../docs/assets/big-buck-bunny-trimmed.mp4';
|
||||
(document.querySelector('#sample-file-download') as HTMLAnchorElement).href = SampleFileUrl;
|
||||
|
||||
declare global {
|
||||
interface Window {
|
||||
showDirectoryPicker(options: { mode: 'readwrite' }): Promise<FileSystemDirectoryHandle>;
|
||||
}
|
||||
}
|
||||
|
||||
const selectDirectoryButton = document.querySelector('#select-directory') as HTMLButtonElement;
|
||||
const directoryNameElement = document.querySelector('#directory-name') as HTMLParagraphElement;
|
||||
const selectMediaButton = document.querySelector('#select-file') as HTMLButtonElement;
|
||||
const loadSampleButton = document.querySelector('#load-sample') as HTMLButtonElement;
|
||||
const fileNameElement = document.querySelector('#file-name') as HTMLParagraphElement;
|
||||
const dashboard = document.querySelector('#dashboard') as HTMLDivElement;
|
||||
const statusElement = document.querySelector('#status') as HTMLParagraphElement;
|
||||
const progressBar = document.querySelector('#progress-bar') as HTMLDivElement;
|
||||
const percentIndicator = document.querySelector('#percent-indicator') as HTMLParagraphElement;
|
||||
const speedometer = document.querySelector('#speedometer') as HTMLParagraphElement;
|
||||
const bytesWrittenElement = document.querySelector('#bytes-written') as HTMLParagraphElement;
|
||||
const filesCreatedElement = document.querySelector('#files-created') as HTMLParagraphElement;
|
||||
const latestFileElement = document.querySelector('#latest-file') as HTMLParagraphElement;
|
||||
const errorElement = document.querySelector('#error-element') as HTMLParagraphElement;
|
||||
|
||||
let currentConversion: Conversion | null = null;
|
||||
let directoryHandle: FileSystemDirectoryHandle | null = null;
|
||||
let progress = 0;
|
||||
let processedTime = 0;
|
||||
let startTime: number | null = null;
|
||||
let bytesWritten = 0;
|
||||
let filesCreated = 0;
|
||||
let latestFile = '-';
|
||||
let status = 'Waiting for directory';
|
||||
let fileName = '';
|
||||
let directoryName = '';
|
||||
let errorMessage = '';
|
||||
let renderIntervalId = -1;
|
||||
const filePromises: Promise<void>[] = [];
|
||||
|
||||
const convertToHls = async (resource: File | string) => {
|
||||
await currentConversion?.cancel();
|
||||
|
||||
resetDashboard();
|
||||
fileName = resource instanceof File ? resource.name : resource;
|
||||
updateFileUi();
|
||||
|
||||
clearInterval(renderIntervalId);
|
||||
renderIntervalId = window.setInterval(render, 1000 / 60);
|
||||
render();
|
||||
|
||||
try {
|
||||
// Load the input
|
||||
const source = resource instanceof File
|
||||
? new BlobSource(resource)
|
||||
: new UrlSource(resource);
|
||||
const input = new Input({
|
||||
source,
|
||||
formats: ALL_FORMATS,
|
||||
});
|
||||
|
||||
const output = new Output({
|
||||
// Define the output format (HLS with MPEG-TS segments)
|
||||
format: new HlsOutputFormat({
|
||||
segmentFormat: new MpegTsOutputFormat(),
|
||||
}),
|
||||
// Describe where the files will be written
|
||||
target: new PathedTarget(
|
||||
'master.m3u8',
|
||||
({ path }) => createFileTarget(path),
|
||||
),
|
||||
onFinalize: () => Promise.all(filePromises),
|
||||
});
|
||||
|
||||
currentConversion = await Conversion.init({
|
||||
input,
|
||||
output,
|
||||
tracks: 'primary', // Use only the primary video and audio tracks of the input
|
||||
video: [
|
||||
{ codec: 'avc', height: 1080, bitrate: QUALITY_VERY_HIGH },
|
||||
{ codec: 'avc', height: 720, bitrate: QUALITY_HIGH },
|
||||
{ codec: 'avc', height: 480, bitrate: QUALITY_MEDIUM },
|
||||
{ codec: 'avc', height: 360, bitrate: QUALITY_LOW },
|
||||
{ codec: 'avc', height: 240, bitrate: QUALITY_VERY_LOW },
|
||||
],
|
||||
audio: [
|
||||
{ codec: 'aac', bitrate: QUALITY_HIGH },
|
||||
],
|
||||
});
|
||||
|
||||
if (!currentConversion.isValid) {
|
||||
console.info(currentConversion.discardedTracks);
|
||||
throw new Error('Conversion is invalid and cannot be executed; see the console for more.');
|
||||
}
|
||||
|
||||
currentConversion.onProgress = (newProgress, newProcessedTime) => {
|
||||
progress = newProgress;
|
||||
processedTime = newProcessedTime;
|
||||
startTime ??= performance.now();
|
||||
};
|
||||
|
||||
status = 'Encoding renditions and writing HLS files';
|
||||
|
||||
await currentConversion.execute();
|
||||
|
||||
progress = 1;
|
||||
status = 'HLS manifest complete';
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
|
||||
await currentConversion?.cancel();
|
||||
status = 'Conversion failed';
|
||||
errorMessage = String(error);
|
||||
updateFileUi();
|
||||
} finally {
|
||||
clearInterval(renderIntervalId);
|
||||
renderIntervalId = -1;
|
||||
render();
|
||||
}
|
||||
};
|
||||
|
||||
const formatBytes = (bytes: number) => {
|
||||
if (bytes < 1000) {
|
||||
return `${bytes} B`;
|
||||
}
|
||||
|
||||
const units = ['kB', 'MB', 'GB', 'TB'];
|
||||
let size = bytes / 1000;
|
||||
let unitIndex = 0;
|
||||
while (size >= 1000) {
|
||||
size /= 1000;
|
||||
unitIndex++;
|
||||
}
|
||||
|
||||
return `${+size.toFixed(2)} ${units[unitIndex]}`;
|
||||
};
|
||||
|
||||
const render = () => {
|
||||
const percentage = Math.floor(progress * 100);
|
||||
const displayedPercentage = status === 'HLS manifest complete' ? 100 : Math.min(percentage, 99);
|
||||
progressBar.style.width = `${displayedPercentage}%`;
|
||||
percentIndicator.textContent = `${displayedPercentage}%`;
|
||||
bytesWrittenElement.textContent = formatBytes(bytesWritten);
|
||||
filesCreatedElement.textContent = filesCreated.toString();
|
||||
latestFileElement.textContent = latestFile;
|
||||
statusElement.textContent = status;
|
||||
|
||||
if (startTime !== null) {
|
||||
const elapsedSeconds = (performance.now() - startTime) / 1000;
|
||||
const factor = processedTime / elapsedSeconds;
|
||||
speedometer.textContent = `${factor.toPrecision(3)}x`;
|
||||
} else {
|
||||
speedometer.textContent = '-';
|
||||
}
|
||||
};
|
||||
|
||||
const updateFileUi = () => {
|
||||
directoryNameElement.textContent = directoryName;
|
||||
fileNameElement.textContent = fileName;
|
||||
errorElement.textContent = errorMessage;
|
||||
};
|
||||
|
||||
const resetDashboard = () => {
|
||||
progress = 0;
|
||||
processedTime = 0;
|
||||
startTime = null;
|
||||
bytesWritten = 0;
|
||||
filesCreated = 0;
|
||||
latestFile = '-';
|
||||
status = 'Preparing HLS output';
|
||||
errorMessage = '';
|
||||
filePromises.length = 0;
|
||||
dashboard.classList.remove('opacity-50');
|
||||
updateFileUi();
|
||||
};
|
||||
|
||||
const createFileTarget = async (path: string) => {
|
||||
const target = new BufferTarget({
|
||||
onFinalize: (buffer) => {
|
||||
filePromises.push((async () => {
|
||||
const handle = await directoryHandle!.getFileHandle(path, { create: true });
|
||||
const writable = await handle.createWritable();
|
||||
await writable.write(buffer);
|
||||
await writable.close();
|
||||
})());
|
||||
},
|
||||
});
|
||||
|
||||
let fileBytes = 0;
|
||||
|
||||
filesCreated++;
|
||||
latestFile = path;
|
||||
|
||||
target.on('write', ({ end }) => {
|
||||
const newFileBytes = Math.max(fileBytes, end);
|
||||
bytesWritten += newFileBytes - fileBytes;
|
||||
fileBytes = newFileBytes;
|
||||
});
|
||||
|
||||
return target;
|
||||
};
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
||||
selectDirectoryButton.addEventListener('click', async () => {
|
||||
directoryHandle = await window.showDirectoryPicker({ mode: 'readwrite' });
|
||||
directoryName = `Selected directory: ${directoryHandle.name}`;
|
||||
status = 'Waiting for source video';
|
||||
selectDirectoryButton.style.display = 'none';
|
||||
selectMediaButton.disabled = false;
|
||||
loadSampleButton.disabled = false;
|
||||
directoryNameElement.style.display = '';
|
||||
directoryNameElement.textContent = directoryName;
|
||||
statusElement.textContent = status;
|
||||
});
|
||||
|
||||
selectMediaButton.addEventListener('click', () => {
|
||||
const fileInput = document.createElement('input');
|
||||
fileInput.type = 'file';
|
||||
fileInput.accept = 'video/*,video/x-matroska,video/mp2t,.ts';
|
||||
fileInput.addEventListener('change', () => {
|
||||
const file = fileInput.files![0];
|
||||
if (file) {
|
||||
void convertToHls(file);
|
||||
}
|
||||
});
|
||||
|
||||
fileInput.click();
|
||||
});
|
||||
|
||||
loadSampleButton.addEventListener('click', () => {
|
||||
const url = prompt(
|
||||
'Please enter a URL of a media file. Note that it must be HTTPS and support cross-origin requests, so have the'
|
||||
+ ' right CORS headers set.',
|
||||
'https://remotion.media/BigBuckBunny.mp4',
|
||||
);
|
||||
if (!url) {
|
||||
return;
|
||||
}
|
||||
|
||||
void convertToHls(url);
|
||||
});
|
||||
|
||||
document.addEventListener('dragover', (event) => {
|
||||
event.preventDefault();
|
||||
event.dataTransfer!.dropEffect = 'copy';
|
||||
});
|
||||
|
||||
document.addEventListener('drop', (event) => {
|
||||
event.preventDefault();
|
||||
const files = event.dataTransfer!.files;
|
||||
const file = files[0];
|
||||
if (file) {
|
||||
void convertToHls(file);
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,126 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" translate="no">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>HLS transcoding example | Mediabunny</title>
|
||||
<script type="module" src="../base.ts"></script>
|
||||
<script type="module" src="./hls-transcoding.ts"></script>
|
||||
<link rel="stylesheet" href="../base.css">
|
||||
<link rel="icon" href="../../docs/public/mediabunny-logo.svg">
|
||||
</head>
|
||||
|
||||
<body class="flex flex-col items-center bg-zinc-50 px-2 py-10 text-zinc-800 dark:bg-zinc-900 dark:text-zinc-200">
|
||||
<h1 class="text-center text-3xl font-bold text-cyan-500">HLS transcoding example</h1>
|
||||
<p class="max-w-2xl text-center">
|
||||
Select a directory, then a video. Mediabunny will create a complete HLS VOD package with five video renditions and one audio track.
|
||||
</p>
|
||||
|
||||
<div class="mt-5 flex flex-col items-center gap-1">
|
||||
<div class="flex flex-wrap justify-center gap-2">
|
||||
<button id="select-directory" class="rounded-lg bg-cyan-500 px-5 py-2 font-medium text-white hover:bg-cyan-600">
|
||||
Select directory
|
||||
</button>
|
||||
|
||||
<button id="select-file" disabled class="rounded-lg bg-zinc-200 px-5 py-2 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-zinc-750 dark:hover:bg-zinc-700 hover:bg-zinc-300">
|
||||
Select local file
|
||||
</button>
|
||||
|
||||
<button id="load-sample" disabled class="rounded-lg bg-zinc-200 px-5 py-2 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-zinc-750 dark:hover:bg-zinc-700 hover:bg-zinc-300">
|
||||
Load remote URL
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<a id="sample-file-download" download="big-buck-bunny-trimmed.mp4" class="text-xs opacity-50 hover:opacity-70 hover:underline">
|
||||
Download sample file
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<p id="directory-name" class="mt-3 max-w-[36rem] text-center text-xs opacity-60" style="display: none;"></p>
|
||||
<p id="file-name" class="min-h-5 max-w-[36rem] text-center text-xs opacity-60"></p>
|
||||
<p id="error-element" class="mx-auto mt-2 max-w-[36rem] text-center text-red-500"></p>
|
||||
|
||||
<hr class="my-4 w-full max-w-4xl border-zinc-300 dark:border-zinc-700">
|
||||
|
||||
<div class="grid w-full max-w-4xl gap-4 md:grid-cols-2">
|
||||
<section class="rounded-xl bg-zinc-200 p-5 dark:bg-zinc-750">
|
||||
<h2 class="text-lg font-bold text-cyan-500">Renditions</h2>
|
||||
<div class="mt-3 grid gap-2 text-sm">
|
||||
<div class="grid grid-cols-[5rem_1fr] rounded-lg bg-zinc-100 px-3 py-2 dark:bg-zinc-800">
|
||||
<p class="font-bold">1080p</p>
|
||||
<p class="opacity-70">AVC video</p>
|
||||
</div>
|
||||
<div class="grid grid-cols-[5rem_1fr] rounded-lg bg-zinc-100 px-3 py-2 dark:bg-zinc-800">
|
||||
<p class="font-bold">720p</p>
|
||||
<p class="opacity-70">AVC video</p>
|
||||
</div>
|
||||
<div class="grid grid-cols-[5rem_1fr] rounded-lg bg-zinc-100 px-3 py-2 dark:bg-zinc-800">
|
||||
<p class="font-bold">480p</p>
|
||||
<p class="opacity-70">AVC video</p>
|
||||
</div>
|
||||
<div class="grid grid-cols-[5rem_1fr] rounded-lg bg-zinc-100 px-3 py-2 dark:bg-zinc-800">
|
||||
<p class="font-bold">360p</p>
|
||||
<p class="opacity-70">AVC video</p>
|
||||
</div>
|
||||
<div class="grid grid-cols-[5rem_1fr] rounded-lg bg-zinc-100 px-3 py-2 dark:bg-zinc-800">
|
||||
<p class="font-bold">240p</p>
|
||||
<p class="opacity-70">AVC video</p>
|
||||
</div>
|
||||
<hr class="my-1 border-zinc-300 dark:border-zinc-700">
|
||||
<div class="grid grid-cols-[5rem_1fr] rounded-lg bg-zinc-100 px-3 py-2 dark:bg-zinc-800">
|
||||
<p class="font-bold">Audio</p>
|
||||
<p class="opacity-70">AAC audio</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="dashboard" class="rounded-xl bg-zinc-200 p-5 opacity-50 transition-opacity dark:bg-zinc-750">
|
||||
<div class="flex items-start justify-between gap-4">
|
||||
<div>
|
||||
<h2 class="text-lg font-bold text-cyan-500">Progress</h2>
|
||||
<p id="status" class="mt-1 text-sm opacity-70">Waiting for directory</p>
|
||||
</div>
|
||||
<p id="percent-indicator" class="text-4xl font-bold tabular-nums text-cyan-500">0%</p>
|
||||
</div>
|
||||
|
||||
<div id="progress-bar-container" class="mt-4 h-3 overflow-hidden rounded-full bg-zinc-300 dark:bg-zinc-900">
|
||||
<div id="progress-bar" class="h-full w-0 bg-emerald-500 transition-[width] duration-150"></div>
|
||||
</div>
|
||||
|
||||
<div class="mt-4 grid grid-cols-2 gap-2 text-sm">
|
||||
<div class="rounded-lg bg-zinc-100 p-3 dark:bg-zinc-800">
|
||||
<p class="text-xs opacity-60">Real-time speed</p>
|
||||
<p id="speedometer" class="mt-1 text-lg font-bold tabular-nums">-</p>
|
||||
</div>
|
||||
<div class="rounded-lg bg-zinc-100 p-3 dark:bg-zinc-800">
|
||||
<p class="text-xs opacity-60">Bytes written</p>
|
||||
<p id="bytes-written" class="mt-1 text-lg font-bold tabular-nums">0 B</p>
|
||||
</div>
|
||||
<div class="rounded-lg bg-zinc-100 p-3 dark:bg-zinc-800">
|
||||
<p class="text-xs opacity-60">Files created</p>
|
||||
<p id="files-created" class="mt-1 text-lg font-bold tabular-nums">0</p>
|
||||
</div>
|
||||
<div class="rounded-lg bg-zinc-100 p-3 dark:bg-zinc-800">
|
||||
<p class="text-xs opacity-60">Latest file</p>
|
||||
<p id="latest-file" class="mt-1 truncate text-lg font-bold tabular-nums">-</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<a href="/" class="fixed left-0 top-0 flex items-center gap-2 px-5 py-2">
|
||||
<img src="../../docs/public/mediabunny-logo.svg" class="size-6">
|
||||
<p class="text-sm font-medium">Mediabunny</p>
|
||||
</a>
|
||||
|
||||
<a
|
||||
href="https://github.com/Vanilagy/mediabunny/tree/main/examples/hls-transcoding"
|
||||
target="_blank"
|
||||
class="fixed right-0 top-0 flex items-center gap-2 rounded-bl-xl bg-zinc-200 px-5 py-2 hover:bg-zinc-300 dark:bg-zinc-750 dark:hover:bg-zinc-700"
|
||||
>
|
||||
<img src="../../docs/assets/github-mark.svg" class="size-6 dark:invert">
|
||||
<p>View source code</p>
|
||||
</a>
|
||||
</body>
|
||||
</html>
|
||||
Generated
+6
-6
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "mediabunny",
|
||||
"version": "1.42.0-beta.7",
|
||||
"version": "1.42.0-beta.9",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "mediabunny",
|
||||
"version": "1.42.0-beta.7",
|
||||
"version": "1.42.0-beta.9",
|
||||
"license": "MPL-2.0",
|
||||
"workspaces": [
|
||||
"packages/*"
|
||||
@@ -12077,7 +12077,7 @@
|
||||
},
|
||||
"packages/aac-encoder": {
|
||||
"name": "@mediabunny/aac-encoder",
|
||||
"version": "1.42.0-beta.7",
|
||||
"version": "1.42.0-beta.9",
|
||||
"license": "MPL-2.0",
|
||||
"devDependencies": {
|
||||
"@types/emscripten": "^1.40.1"
|
||||
@@ -12092,7 +12092,7 @@
|
||||
},
|
||||
"packages/ac3": {
|
||||
"name": "@mediabunny/ac3",
|
||||
"version": "1.42.0-beta.7",
|
||||
"version": "1.42.0-beta.9",
|
||||
"license": "MPL-2.0",
|
||||
"devDependencies": {
|
||||
"@types/emscripten": "^1.40.1"
|
||||
@@ -12107,7 +12107,7 @@
|
||||
},
|
||||
"packages/flac-encoder": {
|
||||
"name": "@mediabunny/flac-encoder",
|
||||
"version": "1.42.0-beta.7",
|
||||
"version": "1.42.0-beta.9",
|
||||
"license": "MPL-2.0",
|
||||
"devDependencies": {
|
||||
"@types/emscripten": "^1.40.1"
|
||||
@@ -12122,7 +12122,7 @@
|
||||
},
|
||||
"packages/mp3-encoder": {
|
||||
"name": "@mediabunny/mp3-encoder",
|
||||
"version": "1.42.0-beta.7",
|
||||
"version": "1.42.0-beta.9",
|
||||
"license": "MPL-2.0",
|
||||
"devDependencies": {
|
||||
"@types/emscripten": "^1.40.1"
|
||||
|
||||
+3
-3
@@ -1,19 +1,19 @@
|
||||
{
|
||||
"name": "mediabunny",
|
||||
"author": "Vanilagy",
|
||||
"version": "1.42.0-beta.7",
|
||||
"version": "1.42.0-beta.9",
|
||||
"description": "Pure TypeScript media toolkit for reading, writing, and converting media files, directly in the browser.",
|
||||
"type": "module",
|
||||
"workspaces": [
|
||||
"packages/*"
|
||||
],
|
||||
"main": "./dist/bundles/mediabunny.cjs",
|
||||
"main": "./dist/modules/src/index.js",
|
||||
"module": "./dist/modules/src/index.js",
|
||||
"types": "./dist/modules/src/index.d.ts",
|
||||
"exports": {
|
||||
"types": "./dist/modules/src/index.d.ts",
|
||||
"import": "./dist/modules/src/index.js",
|
||||
"require": "./dist/bundles/mediabunny.cjs"
|
||||
"require": "./dist/modules/src/index.js"
|
||||
},
|
||||
"files": [
|
||||
"README.md",
|
||||
|
||||
Generated
BIN
Binary file not shown.
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@mediabunny/aac-encoder",
|
||||
"author": "Vanilagy",
|
||||
"version": "1.42.0-beta.7",
|
||||
"version": "1.42.0-beta.9",
|
||||
"description": "AAC encoder extension for Mediabunny, based on FFmpeg.",
|
||||
"main": "./dist/bundles/mediabunny-aac-encoder.mjs",
|
||||
"module": "./dist/bundles/mediabunny-aac-encoder.mjs",
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
*/
|
||||
|
||||
#include <emscripten.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "libavcodec/avcodec.h"
|
||||
@@ -20,7 +21,7 @@ typedef struct {
|
||||
AVFrame *frame;
|
||||
float *input_buffer;
|
||||
int input_buffer_size;
|
||||
int encoded_pts;
|
||||
int64_t encoded_pts;
|
||||
int encoded_duration;
|
||||
} EncoderContext;
|
||||
|
||||
@@ -123,7 +124,7 @@ float *get_encode_input_ptr(EncoderContext *ctx, int size) {
|
||||
}
|
||||
|
||||
EMSCRIPTEN_KEEPALIVE
|
||||
int send_frame(EncoderContext *ctx, int pts) {
|
||||
int send_frame(EncoderContext *ctx, int64_t pts) {
|
||||
int channels = ctx->codec_ctx->ch_layout.nb_channels;
|
||||
int frame_size = ctx->frame->nb_samples;
|
||||
|
||||
@@ -171,7 +172,7 @@ uint8_t *get_encoded_data(EncoderContext *ctx) {
|
||||
}
|
||||
|
||||
EMSCRIPTEN_KEEPALIVE
|
||||
int get_encoded_pts(EncoderContext *ctx) {
|
||||
int64_t get_encoded_pts(EncoderContext *ctx) {
|
||||
return ctx->encoded_pts;
|
||||
}
|
||||
|
||||
|
||||
@@ -21,12 +21,12 @@ let getEncoderFrameSize: (ctx: number) => number;
|
||||
let getEncoderExtradata: (ctx: number) => number;
|
||||
let getEncoderExtradataSize: (ctx: number) => number;
|
||||
let getEncodeInputPtr: (ctx: number, size: number) => number;
|
||||
let sendFrameFn: (ctx: number, pts: number) => number;
|
||||
let sendFrameFn: (ctx: number, pts: bigint) => number;
|
||||
let receivePacketFn: (ctx: number) => number;
|
||||
let flushEncoderStartFn: (ctx: number) => void;
|
||||
let resetEncoderFn: (ctx: number) => void;
|
||||
let getEncodedData: (ctx: number) => number;
|
||||
let getEncodedPts: (ctx: number) => number;
|
||||
let getEncodedPts: (ctx: number) => bigint;
|
||||
let getEncodedDuration: (ctx: number) => number;
|
||||
const ensureModule = async () => {
|
||||
if (!module) {
|
||||
@@ -43,12 +43,12 @@ const ensureModule = async () => {
|
||||
getEncoderExtradata = module.cwrap('get_encoder_extradata', 'number', ['number']);
|
||||
getEncoderExtradataSize = module.cwrap('get_encoder_extradata_size', 'number', ['number']);
|
||||
getEncodeInputPtr = module.cwrap('get_encode_input_ptr', 'number', ['number', 'number']);
|
||||
sendFrameFn = module.cwrap('send_frame', 'number', ['number', 'number']);
|
||||
sendFrameFn = module.cwrap('send_frame', 'number', ['number', 'number']) as unknown as typeof sendFrameFn;
|
||||
receivePacketFn = module.cwrap('receive_packet', 'number', ['number']);
|
||||
flushEncoderStartFn = module.cwrap('flush_encoder_start', null, ['number']);
|
||||
resetEncoderFn = module.cwrap('reset_encoder', null, ['number']);
|
||||
getEncodedData = module.cwrap('get_encoded_data', 'number', ['number']);
|
||||
getEncodedPts = module.cwrap('get_encoded_pts', 'number', ['number']);
|
||||
getEncodedPts = module.cwrap('get_encoded_pts', 'number', ['number']) as unknown as typeof getEncodedPts;
|
||||
getEncodedDuration = module.cwrap('get_encoded_duration', 'number', ['number']);
|
||||
}
|
||||
};
|
||||
@@ -81,7 +81,7 @@ const drainPackets = (ctx: number) => {
|
||||
while ((size = receivePacketFn(ctx)) > 0) {
|
||||
const ptr = getEncodedData(ctx);
|
||||
const encodedData = module.HEAPU8.slice(ptr, ptr + size).buffer;
|
||||
const pts = getEncodedPts(ctx);
|
||||
const pts = Number(getEncodedPts(ctx));
|
||||
const duration = getEncodedDuration(ctx);
|
||||
packets.push({ encodedData, pts, duration });
|
||||
}
|
||||
@@ -98,7 +98,7 @@ const encode = (ctx: number, audioData: ArrayBuffer, timestamp: number) => {
|
||||
}
|
||||
module.HEAPU8.set(audioBytes, inputPtr);
|
||||
|
||||
const ret = sendFrameFn(ctx, timestamp);
|
||||
const ret = sendFrameFn(ctx, BigInt(timestamp));
|
||||
if (ret < 0) {
|
||||
throw new Error(`Encode failed with error code ${ret}.`);
|
||||
}
|
||||
|
||||
Generated
BIN
Binary file not shown.
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@mediabunny/ac3",
|
||||
"author": "Vanilagy",
|
||||
"version": "1.42.0-beta.7",
|
||||
"version": "1.42.0-beta.9",
|
||||
"description": "AC-3 and E-AC-3 (Dolby Digital) decoder and encoder extension for Mediabunny, based on FFmpeg.",
|
||||
"main": "./dist/bundles/mediabunny-ac3.mjs",
|
||||
"module": "./dist/bundles/mediabunny-ac3.mjs",
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
*/
|
||||
|
||||
#include <emscripten.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "libavcodec/avcodec.h"
|
||||
@@ -72,7 +73,7 @@ uint8_t *configure_decode_packet(DecoderContext *ctx, int size) {
|
||||
}
|
||||
|
||||
EMSCRIPTEN_KEEPALIVE
|
||||
int decode_packet(DecoderContext *ctx, int pts) {
|
||||
int decode_packet(DecoderContext *ctx, int64_t pts) {
|
||||
ctx->packet->pts = pts;
|
||||
int ret = avcodec_send_packet(ctx->codec_ctx, ctx->packet);
|
||||
av_packet_unref(ctx->packet);
|
||||
@@ -110,8 +111,8 @@ int get_decoded_sample_count(DecoderContext *ctx) {
|
||||
}
|
||||
|
||||
EMSCRIPTEN_KEEPALIVE
|
||||
int get_decoded_pts(DecoderContext *ctx) {
|
||||
return (int)ctx->frame->pts;
|
||||
int64_t get_decoded_pts(DecoderContext *ctx) {
|
||||
return ctx->frame->pts;
|
||||
}
|
||||
|
||||
EMSCRIPTEN_KEEPALIVE
|
||||
@@ -135,7 +136,7 @@ typedef struct {
|
||||
AVFrame *frame;
|
||||
float *input_buffer;
|
||||
int input_buffer_size;
|
||||
int encoded_pts;
|
||||
int64_t encoded_pts;
|
||||
int encoded_duration;
|
||||
} EncoderContext;
|
||||
|
||||
@@ -229,7 +230,7 @@ float *get_encode_input_ptr(EncoderContext *ctx, int size) {
|
||||
}
|
||||
|
||||
EMSCRIPTEN_KEEPALIVE
|
||||
int encode_frame(EncoderContext *ctx, int pts) {
|
||||
int encode_frame(EncoderContext *ctx, int64_t pts) {
|
||||
int channels = ctx->codec_ctx->ch_layout.nb_channels;
|
||||
int frame_size = ctx->frame->nb_samples;
|
||||
|
||||
@@ -270,7 +271,7 @@ uint8_t *get_encoded_data(EncoderContext *ctx) {
|
||||
}
|
||||
|
||||
EMSCRIPTEN_KEEPALIVE
|
||||
int get_encoded_pts(EncoderContext *ctx) {
|
||||
int64_t get_encoded_pts(EncoderContext *ctx) {
|
||||
return ctx->encoded_pts;
|
||||
}
|
||||
|
||||
|
||||
@@ -18,23 +18,23 @@ let modulePromise: Promise<ExtendedEmscriptenModule> | null = null;
|
||||
|
||||
let initDecoderFn: (codecId: number) => number;
|
||||
let configureDecodePacket: (ctx: number, size: number) => number;
|
||||
let decodePacket: (ctx: number, pts: number) => number;
|
||||
let decodePacket: (ctx: number, pts: bigint) => number;
|
||||
let getDecodedFormat: (ctx: number) => number;
|
||||
let getDecodedPlanePtr: (ctx: number, plane: number) => number;
|
||||
let getDecodedChannels: (ctx: number) => number;
|
||||
let getDecodedSampleRate: (ctx: number) => number;
|
||||
let getDecodedSampleCount: (ctx: number) => number;
|
||||
let getDecodedPts: (ctx: number) => number;
|
||||
let getDecodedPts: (ctx: number) => bigint;
|
||||
let flushDecoderFn: (ctx: number) => void;
|
||||
let closeDecoderFn: (ctx: number) => void;
|
||||
|
||||
let initEncoderFn: (codecId: number, channels: number, sampleRate: number, bitrate: number) => number;
|
||||
let getEncoderFrameSize: (ctx: number) => number;
|
||||
let getEncodeInputPtr: (ctx: number, size: number) => number;
|
||||
let encodeFrameFn: (ctx: number, pts: number) => number;
|
||||
let encodeFrameFn: (ctx: number, pts: bigint) => number;
|
||||
let flushEncoderFn: (ctx: number) => void;
|
||||
let getEncodedData: (ctx: number) => number;
|
||||
let getEncodedPts: (ctx: number) => number;
|
||||
let getEncodedPts: (ctx: number) => bigint;
|
||||
let getEncodedDuration: (ctx: number) => number;
|
||||
let closeEncoderFn: (ctx: number) => void;
|
||||
|
||||
@@ -53,23 +53,23 @@ const ensureModule = async () => {
|
||||
|
||||
initDecoderFn = module.cwrap('init_decoder', 'number', ['number']);
|
||||
configureDecodePacket = module.cwrap('configure_decode_packet', 'number', ['number', 'number']);
|
||||
decodePacket = module.cwrap('decode_packet', 'number', ['number', 'number']);
|
||||
decodePacket = module.cwrap('decode_packet', 'number', ['number', 'number']) as unknown as typeof decodePacket;
|
||||
getDecodedFormat = module.cwrap('get_decoded_format', 'number', ['number']);
|
||||
getDecodedPlanePtr = module.cwrap('get_decoded_plane_ptr', 'number', ['number', 'number']);
|
||||
getDecodedChannels = module.cwrap('get_decoded_channels', 'number', ['number']);
|
||||
getDecodedSampleRate = module.cwrap('get_decoded_sample_rate', 'number', ['number']);
|
||||
getDecodedSampleCount = module.cwrap('get_decoded_sample_count', 'number', ['number']);
|
||||
getDecodedPts = module.cwrap('get_decoded_pts', 'number', ['number']);
|
||||
getDecodedPts = module.cwrap('get_decoded_pts', 'number', ['number']) as unknown as typeof getDecodedPts;
|
||||
flushDecoderFn = module.cwrap('flush_decoder', null, ['number']);
|
||||
closeDecoderFn = module.cwrap('close_decoder', null, ['number']);
|
||||
|
||||
initEncoderFn = module.cwrap('init_encoder', 'number', ['number', 'number', 'number', 'number']);
|
||||
getEncoderFrameSize = module.cwrap('get_encoder_frame_size', 'number', ['number']);
|
||||
getEncodeInputPtr = module.cwrap('get_encode_input_ptr', 'number', ['number', 'number']);
|
||||
encodeFrameFn = module.cwrap('encode_frame', 'number', ['number', 'number']);
|
||||
encodeFrameFn = module.cwrap('encode_frame', 'number', ['number', 'number']) as unknown as typeof encodeFrameFn;
|
||||
flushEncoderFn = module.cwrap('flush_encoder', null, ['number']);
|
||||
getEncodedData = module.cwrap('get_encoded_data', 'number', ['number']);
|
||||
getEncodedPts = module.cwrap('get_encoded_pts', 'number', ['number']);
|
||||
getEncodedPts = module.cwrap('get_encoded_pts', 'number', ['number']) as unknown as typeof getEncodedPts;
|
||||
getEncodedDuration = module.cwrap('get_encoded_duration', 'number', ['number']);
|
||||
closeEncoderFn = module.cwrap('close_encoder', null, ['number']);
|
||||
}
|
||||
@@ -108,7 +108,7 @@ const decode = (ctx: number, encodedData: ArrayBuffer, timestamp: number) => {
|
||||
|
||||
module.HEAPU8.set(bytes, dataPtr);
|
||||
|
||||
const ret = decodePacket(ctx, timestamp);
|
||||
const ret = decodePacket(ctx, BigInt(timestamp));
|
||||
if (ret < 0) {
|
||||
throw new Error(`Decode failed with error code ${ret}.`);
|
||||
}
|
||||
@@ -122,7 +122,7 @@ const decode = (ctx: number, encodedData: ArrayBuffer, timestamp: number) => {
|
||||
const channels = getDecodedChannels(ctx);
|
||||
const sampleRate = getDecodedSampleRate(ctx);
|
||||
const sampleCount = getDecodedSampleCount(ctx);
|
||||
const pts = getDecodedPts(ctx);
|
||||
const pts = Number(getDecodedPts(ctx));
|
||||
|
||||
let pcmData: ArrayBuffer;
|
||||
if (info.planar) {
|
||||
@@ -169,14 +169,14 @@ const encode = (ctx: number, audioData: ArrayBuffer, timestamp: number) => {
|
||||
}
|
||||
module.HEAPU8.set(audioBytes, inputPtr);
|
||||
|
||||
const bytesWritten = encodeFrameFn(ctx, timestamp);
|
||||
const bytesWritten = encodeFrameFn(ctx, BigInt(timestamp));
|
||||
if (bytesWritten < 0) {
|
||||
throw new Error(`Encode failed with error code ${bytesWritten}.`);
|
||||
}
|
||||
|
||||
const ptr = getEncodedData(ctx);
|
||||
const encodedData = module.HEAPU8.slice(ptr, ptr + bytesWritten).buffer;
|
||||
const pts = getEncodedPts(ctx);
|
||||
const pts = Number(getEncodedPts(ctx));
|
||||
const duration = getEncodedDuration(ctx);
|
||||
|
||||
return { encodedData, pts, duration };
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@mediabunny/flac-encoder",
|
||||
"author": "Vanilagy",
|
||||
"version": "1.42.0-beta.7",
|
||||
"version": "1.42.0-beta.9",
|
||||
"description": "FLAC encoder extension for Mediabunny, based on libFLAC.",
|
||||
"main": "./dist/bundles/mediabunny-flac-encoder.mjs",
|
||||
"module": "./dist/bundles/mediabunny-flac-encoder.mjs",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@mediabunny/mp3-encoder",
|
||||
"author": "Vanilagy",
|
||||
"version": "1.42.0-beta.7",
|
||||
"version": "1.42.0-beta.9",
|
||||
"description": "MP3 encoder extension for Mediabunny, based on LAME.",
|
||||
"main": "./dist/bundles/mediabunny-mp3-encoder.mjs",
|
||||
"module": "./dist/bundles/mediabunny-mp3-encoder.mjs",
|
||||
|
||||
@@ -16,6 +16,7 @@ const createVariants = async (
|
||||
entryPoints: [entryPoint],
|
||||
bundle: true,
|
||||
logLevel: 'info',
|
||||
target: 'es2021',
|
||||
logOverride: {
|
||||
'import-is-undefined': 'silent', // Warning caused by the disabled "node.ts" import
|
||||
},
|
||||
@@ -29,6 +30,7 @@ const createVariants = async (
|
||||
*/`,
|
||||
},
|
||||
legalComments: 'none',
|
||||
platform: 'node',
|
||||
};
|
||||
|
||||
const umdConfig: esbuild.BuildOptions = {
|
||||
|
||||
@@ -338,11 +338,11 @@ const generateDocs = (entryFiles: string[], apiConfigFile: string, dry = false)
|
||||
if (linkText) {
|
||||
// If custom link text is provided, always use it.
|
||||
displayText = linkText.trim();
|
||||
} else if (memberName) {
|
||||
// If it's a member link, default the text to just the member name.
|
||||
} else if (memberName && typeName === currentTypeName) {
|
||||
// Member link on the current type: just the member name.
|
||||
displayText = `\`${memberName}\``;
|
||||
} else {
|
||||
// Otherwise, it's a type link, so use the full type name.
|
||||
// Type link, or member link on another type: use the full target.
|
||||
displayText = `\`${cleanTarget}\``;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -57,7 +57,7 @@ export class AttributeList {
|
||||
}
|
||||
|
||||
if (key) {
|
||||
this._attributes[key.toLowerCase()] = value;
|
||||
this._attributes[key.trim().toLowerCase()] = value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -76,8 +76,9 @@ export {
|
||||
EncodedAudioPacketSource,
|
||||
EncodedVideoPacketSource,
|
||||
MediaStreamAudioTrackSource,
|
||||
MediaStreamVideoTrackSourceOptions,
|
||||
MediaStreamAudioTrackSourceOptions,
|
||||
MediaStreamVideoTrackSource,
|
||||
MediaStreamVideoTrackSourceOptions,
|
||||
TextSubtitleSource,
|
||||
VideoSampleSource,
|
||||
} from './media-source';
|
||||
|
||||
+102
-16
@@ -1332,7 +1332,7 @@ export class CanvasSource extends VideoSource {
|
||||
}
|
||||
|
||||
/**
|
||||
* Options for MediaStreamVideoTrackSource.
|
||||
* Options for {@link MediaStreamVideoTrackSource}.
|
||||
* @group Media sources
|
||||
* @public
|
||||
*/
|
||||
@@ -1344,6 +1344,21 @@ export type MediaStreamVideoTrackSourceOptions = {
|
||||
* lead to wildly irregular FPS.
|
||||
*/
|
||||
frameRate?: number | null;
|
||||
/**
|
||||
* Controls the basis (zero point) for video frame timestamps.
|
||||
*
|
||||
* When set to `'synced-zero'`, timestamps will be relative to the first chunk of media from a `MediaStreamTrack`
|
||||
* added to the {@link Output}.
|
||||
*
|
||||
* When set to `'zero'`, timestamps will be relative to the first video frame emitted by this source.
|
||||
*
|
||||
* When set to `'unix'`, timestamps will be relative to the Unix epoch, so clearly associated with a distinct point
|
||||
* in time. Here, pausing via {@link MediaStreamVideoTrackSource.pause} will also create gaps in timestamps. Be sure
|
||||
* to pair this mode with {@link BaseTrackMetadata.isRelativeToUnixEpoch}.
|
||||
*
|
||||
* Defaults to `'synced-zero'`.
|
||||
*/
|
||||
timestampBase?: 'synced-zero' | 'zero' | 'unix';
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -1412,6 +1427,16 @@ export class MediaStreamVideoTrackSource extends VideoSource {
|
||||
if (options.frameRate != null && (typeof options.frameRate !== 'number' || options.frameRate <= 0)) {
|
||||
throw new TypeError('options.frameRate, when provided, must be either a positive number or null.');
|
||||
}
|
||||
if (
|
||||
options.timestampBase !== undefined
|
||||
&& options.timestampBase !== 'synced-zero'
|
||||
&& options.timestampBase !== 'zero'
|
||||
&& options.timestampBase !== 'unix'
|
||||
) {
|
||||
throw new TypeError(
|
||||
'options.timestampBase, when provided, must be one of \'synced-zero\', \'zero\', or \'unix\'.',
|
||||
);
|
||||
}
|
||||
|
||||
encodingConfig = {
|
||||
...encodingConfig,
|
||||
@@ -1508,7 +1533,7 @@ export class MediaStreamVideoTrackSource extends VideoSource {
|
||||
if (this._paused) {
|
||||
const frameSeen = firstVideoFrameTimestamp !== null;
|
||||
if (frameSeen) {
|
||||
if (lastSampleTimestamp !== null) {
|
||||
if (lastSampleTimestamp !== null && this._options.timestampBase !== 'unix') {
|
||||
// In addition to dropping this frame, let's also keep track of the time we have lost due to the
|
||||
// pause. Doing it like this instead of simply keeping track of the paused time is better since
|
||||
// it retains the frame rate of the underlying source.
|
||||
@@ -1527,14 +1552,23 @@ export class MediaStreamVideoTrackSource extends VideoSource {
|
||||
if (firstVideoFrameTimestamp === null) {
|
||||
firstVideoFrameTimestamp = currentTimestamp;
|
||||
|
||||
const muxer = this._connectedTrack!.output._muxer;
|
||||
if (muxer.firstMediaStreamTimestamp === null) {
|
||||
muxer.firstMediaStreamTimestamp = now / 1000;
|
||||
this._timestampOffset = -firstVideoFrameTimestamp;
|
||||
let target: number;
|
||||
const timestampBase = this._options.timestampBase ?? 'synced-zero';
|
||||
if (timestampBase === 'unix') {
|
||||
target = Date.now() / 1000;
|
||||
} else if (timestampBase === 'zero') {
|
||||
target = 0;
|
||||
} else {
|
||||
this._timestampOffset = (now / 1000 - muxer.firstMediaStreamTimestamp)
|
||||
- firstVideoFrameTimestamp;
|
||||
const output = this._connectedTrack!.output;
|
||||
if (output._firstMediaStreamTimestamp === null) {
|
||||
output._firstMediaStreamTimestamp = now / 1000;
|
||||
target = 0;
|
||||
} else {
|
||||
target = now / 1000 - output._firstMediaStreamTimestamp;
|
||||
}
|
||||
}
|
||||
|
||||
this._timestampOffset = target - firstVideoFrameTimestamp;
|
||||
}
|
||||
|
||||
lastSampleTimestamp = currentTimestamp;
|
||||
@@ -2405,6 +2439,29 @@ export class AudioBufferSource extends AudioSource {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Options for {@link MediaStreamAudioTrackSource}.
|
||||
* @group Media sources
|
||||
* @public
|
||||
*/
|
||||
export type MediaStreamAudioTrackSourceOptions = {
|
||||
/**
|
||||
* Controls the basis (zero point) for audio sample timestamps.
|
||||
*
|
||||
* When set to `'synced-zero'`, timestamps will be relative to the first chunk of media from a `MediaStreamTrack`
|
||||
* added to the {@link Output}.
|
||||
*
|
||||
* When set to `'zero'`, timestamps will be relative to the first audio sample emitted by this source.
|
||||
*
|
||||
* When set to `'unix'`, timestamps will be relative to the Unix epoch, so clearly associated with a distinct point
|
||||
* in time. Here, pausing via {@link MediaStreamAudioTrackSource.pause} will also create gaps in timestamps. Be sure
|
||||
* to pair this mode with {@link BaseTrackMetadata.isRelativeToUnixEpoch}.
|
||||
*
|
||||
* Defaults to `'synced-zero'`.
|
||||
*/
|
||||
timestampBase?: 'synced-zero' | 'zero' | 'unix';
|
||||
};
|
||||
|
||||
/**
|
||||
* Audio source that encodes the data of a
|
||||
* [`MediaStreamAudioTrack`](https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack) and pipes it into the
|
||||
@@ -2415,6 +2472,8 @@ export class AudioBufferSource extends AudioSource {
|
||||
* @public
|
||||
*/
|
||||
export class MediaStreamAudioTrackSource extends AudioSource {
|
||||
/** @internal */
|
||||
private _options: MediaStreamAudioTrackSourceOptions;
|
||||
/** @internal */
|
||||
private _encoder: AudioEncoderWrapper;
|
||||
/** @internal */
|
||||
@@ -2448,13 +2507,31 @@ export class MediaStreamAudioTrackSource extends AudioSource {
|
||||
* Creates a new {@link MediaStreamAudioTrackSource} from a `MediaStreamAudioTrack`, which will pull audio samples
|
||||
* from the stream in real time and encode them according to {@link AudioEncodingConfig}.
|
||||
*/
|
||||
constructor(track: MediaStreamAudioTrack, encodingConfig: AudioEncodingConfig) {
|
||||
constructor(
|
||||
track: MediaStreamAudioTrack,
|
||||
encodingConfig: AudioEncodingConfig,
|
||||
options: MediaStreamAudioTrackSourceOptions = {},
|
||||
) {
|
||||
if (!(track instanceof MediaStreamTrack) || track.kind !== 'audio') {
|
||||
throw new TypeError('track must be an audio MediaStreamTrack.');
|
||||
}
|
||||
validateAudioEncodingConfig(encodingConfig);
|
||||
if (typeof options !== 'object' || !options) {
|
||||
throw new TypeError('options must be an object.');
|
||||
}
|
||||
if (
|
||||
options.timestampBase !== undefined
|
||||
&& options.timestampBase !== 'synced-zero'
|
||||
&& options.timestampBase !== 'zero'
|
||||
&& options.timestampBase !== 'unix'
|
||||
) {
|
||||
throw new TypeError(
|
||||
'options.timestampBase, when provided, must be one of \'synced-zero\', \'zero\', or \'unix\'.',
|
||||
);
|
||||
}
|
||||
|
||||
super(encodingConfig.codec);
|
||||
this._options = options;
|
||||
this._encoder = new AudioEncoderWrapper(this, encodingConfig);
|
||||
this._track = track;
|
||||
}
|
||||
@@ -2486,7 +2563,7 @@ export class MediaStreamAudioTrackSource extends AudioSource {
|
||||
if (this._paused) {
|
||||
const dataSeen = firstAudioDataTimestamp !== null;
|
||||
if (dataSeen) {
|
||||
if (lastSampleTimestamp !== null) {
|
||||
if (lastSampleTimestamp !== null && this._options.timestampBase !== 'unix') {
|
||||
// In addition to dropping this sample, let's also keep track of the time we have lost due to
|
||||
// the pause. Doing it like this instead of simply keeping track of the paused time is better
|
||||
// since it retains the sample rate of the underlying source.
|
||||
@@ -2505,14 +2582,23 @@ export class MediaStreamAudioTrackSource extends AudioSource {
|
||||
if (firstAudioDataTimestamp === null) {
|
||||
firstAudioDataTimestamp = audioSample.timestamp;
|
||||
|
||||
const muxer = this._connectedTrack!.output._muxer;
|
||||
if (muxer.firstMediaStreamTimestamp === null) {
|
||||
muxer.firstMediaStreamTimestamp = performance.now() / 1000;
|
||||
this._timestampOffset = -firstAudioDataTimestamp;
|
||||
let target: number;
|
||||
const timestampBase = this._options.timestampBase ?? 'synced-zero';
|
||||
if (timestampBase === 'unix') {
|
||||
target = Date.now() / 1000;
|
||||
} else if (timestampBase === 'zero') {
|
||||
target = 0;
|
||||
} else {
|
||||
this._timestampOffset = (performance.now() / 1000 - muxer.firstMediaStreamTimestamp)
|
||||
- firstAudioDataTimestamp;
|
||||
const output = this._connectedTrack!.output;
|
||||
if (output._firstMediaStreamTimestamp === null) {
|
||||
output._firstMediaStreamTimestamp = performance.now() / 1000;
|
||||
target = 0;
|
||||
} else {
|
||||
target = performance.now() / 1000 - output._firstMediaStreamTimestamp;
|
||||
}
|
||||
}
|
||||
|
||||
this._timestampOffset = target - firstAudioDataTimestamp;
|
||||
}
|
||||
|
||||
lastSampleTimestamp = currentTimestamp;
|
||||
|
||||
@@ -15,13 +15,6 @@ export abstract class Muxer {
|
||||
output: Output;
|
||||
mutex = new AsyncMutex();
|
||||
|
||||
/**
|
||||
* This field is used to synchronize multiple MediaStreamTracks. They use the same time coordinate system across
|
||||
* tracks, and to ensure correct audio-video sync, we must use the same offset for all of them. The reason an offset
|
||||
* is needed at all is because the timestamps typically don't start at zero.
|
||||
*/
|
||||
firstMediaStreamTimestamp: number | null = null;
|
||||
|
||||
constructor(output: Output) {
|
||||
this.output = output;
|
||||
}
|
||||
|
||||
+2
-1
@@ -8,4 +8,5 @@
|
||||
|
||||
// This file contains Node.js-specific code that does not run in a browser.
|
||||
|
||||
export * as fs from 'node:fs/promises';
|
||||
// Dynamic import so it can be included in the bundles and still work properly in the browser
|
||||
export const getFs = () => import('node:fs/promises');
|
||||
|
||||
@@ -397,6 +397,13 @@ export class Output<
|
||||
_rootTarget: T | null = null;
|
||||
/** @internal */
|
||||
_rootTargetPromise: Promise<T> | null = null;
|
||||
/**
|
||||
* This field is used to synchronize multiple MediaStreamTracks. They use the same time coordinate system across
|
||||
* tracks, and to ensure correct audio-video sync, we must use the same offset for all of them. The reason an offset
|
||||
* is needed at all is because the timestamps typically don't start at zero.
|
||||
* @internal
|
||||
*/
|
||||
_firstMediaStreamTimestamp: number | null = null;
|
||||
|
||||
/**
|
||||
* The target to which the root file will be written. Throws when using {@link PathedTarget} with an async callback;
|
||||
|
||||
+6
-3
@@ -959,7 +959,7 @@ export class FilePathSource extends PathedSource {
|
||||
throw new TypeError('options.maxCacheSize, when provided, must be a non-negative number.');
|
||||
}
|
||||
|
||||
if (!node.fs) {
|
||||
if (!node.getFs) {
|
||||
throw new Error(
|
||||
'FilePathSource is only available in server-side environments (Node.js, Bun, Deno).',
|
||||
);
|
||||
@@ -970,7 +970,7 @@ export class FilePathSource extends PathedSource {
|
||||
// Let's back this source with a StreamSource, makes the implementation very simple
|
||||
this._streamSource = new StreamSource({
|
||||
getSize: async () => {
|
||||
this._fileHandle = await node.fs.open(filePath, 'r');
|
||||
this._fileHandle = await (await node.getFs()).open(filePath, 'r');
|
||||
|
||||
const stats = await this._fileHandle.stat();
|
||||
return stats.size;
|
||||
@@ -1927,7 +1927,10 @@ class ReadOrchestrator {
|
||||
}
|
||||
})
|
||||
.finally(() => {
|
||||
assert(!worker.running);
|
||||
if (worker.running) {
|
||||
// Rare, but can happen with multiple concurrent reads. In this case, don't do anything.
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.queuedReads.length > 0) {
|
||||
let oldestIndex = 0;
|
||||
|
||||
+7
-1
@@ -692,12 +692,18 @@ export class FilePathTarget extends Target {
|
||||
throw new TypeError('options must be an object.');
|
||||
}
|
||||
|
||||
if (!node.getFs) {
|
||||
throw new Error(
|
||||
'FilePathTarget is only available in server-side environments (Node.js, Bun, Deno).',
|
||||
);
|
||||
}
|
||||
|
||||
super();
|
||||
|
||||
// Let's back this target with a StreamTarget, makes the implementation very simple
|
||||
const writable = new WritableStream<StreamTargetChunk>({
|
||||
start: async () => {
|
||||
this._fileHandle = await node.fs.open(filePath, 'w');
|
||||
this._fileHandle = await (await node.getFs()).open(filePath, 'w');
|
||||
},
|
||||
write: async (chunk) => {
|
||||
assert(this._fileHandle);
|
||||
|
||||
@@ -10,6 +10,7 @@ import { EncodedPacketSink } from '../../src/media-sink.js';
|
||||
import { Mp4OutputFormat } from '../../src/output-format.js';
|
||||
import { AudioSample } from '../../src/sample.js';
|
||||
import { registerAacEncoder } from '@mediabunny/aac-encoder';
|
||||
import { assert } from '../../src/misc.js';
|
||||
|
||||
const createSineWave = (sampleRate: number, channels: number, durationSeconds: number) => {
|
||||
const totalFrames = sampleRate * durationSeconds;
|
||||
@@ -80,3 +81,44 @@ test('AAC encoding', async () => {
|
||||
|
||||
expect(await track.computeDuration()).toBeCloseTo(2, 1);
|
||||
});
|
||||
|
||||
test('AAC with huge timestamps', async () => {
|
||||
registerAacEncoder();
|
||||
|
||||
const sampleRate = 48000;
|
||||
const channels = 2;
|
||||
const timestamp = 1e9;
|
||||
const durationSeconds = 2;
|
||||
const data = createSineWave(sampleRate, channels, durationSeconds);
|
||||
|
||||
const output = new Output({
|
||||
format: new Mp4OutputFormat({ fastStart: 'fragmented' }),
|
||||
target: new BufferTarget(),
|
||||
});
|
||||
|
||||
const audioSource = new AudioSampleSource({ codec: 'aac', bitrate: 128000 });
|
||||
output.addAudioTrack(audioSource);
|
||||
|
||||
await output.start();
|
||||
await audioSource.add(new AudioSample({
|
||||
data,
|
||||
format: 'f32',
|
||||
numberOfChannels: channels,
|
||||
sampleRate,
|
||||
timestamp,
|
||||
}));
|
||||
audioSource.close();
|
||||
await output.finalize();
|
||||
|
||||
using input = new Input({
|
||||
source: new BufferSource(output.target.buffer!),
|
||||
formats: ALL_FORMATS,
|
||||
});
|
||||
|
||||
const track = (await input.getPrimaryAudioTrack())!;
|
||||
const sink = new EncodedPacketSink(track);
|
||||
const firstPacket = await sink.getFirstPacket();
|
||||
assert(firstPacket);
|
||||
|
||||
expect(firstPacket.timestamp).toBe(timestamp);
|
||||
});
|
||||
|
||||
@@ -14,6 +14,7 @@ import { AudioSampleSource } from '../../src/media-source.js';
|
||||
import { Mp4OutputFormat } from '../../src/output-format.js';
|
||||
import { AudioSample } from '../../src/sample.js';
|
||||
import { registerAc3Decoder, registerAc3Encoder } from '@mediabunny/ac3';
|
||||
import { assert } from '../../src/misc.js';
|
||||
|
||||
const __dirname = new URL('.', import.meta.url).pathname;
|
||||
|
||||
@@ -329,3 +330,101 @@ test('E-AC-3 encoding', async () => {
|
||||
|
||||
expect(await track.computeDuration()).toBeCloseTo(2, 1);
|
||||
});
|
||||
|
||||
test('AC-3 with huge timestamps', async () => {
|
||||
registerAc3Decoder();
|
||||
registerAc3Encoder();
|
||||
|
||||
const sampleRate = 48000;
|
||||
const channels = 2;
|
||||
const timestamp = 1e9;
|
||||
const durationSeconds = 2;
|
||||
const data = createSineWave(sampleRate, channels, durationSeconds);
|
||||
|
||||
const output = new Output({
|
||||
format: new Mp4OutputFormat({ fastStart: 'fragmented' }),
|
||||
target: new BufferTarget(),
|
||||
});
|
||||
|
||||
const audioSource = new AudioSampleSource({ codec: 'ac3', bitrate: 192000 });
|
||||
output.addAudioTrack(audioSource);
|
||||
|
||||
await output.start();
|
||||
await audioSource.add(new AudioSample({
|
||||
data,
|
||||
format: 'f32',
|
||||
numberOfChannels: channels,
|
||||
sampleRate,
|
||||
timestamp,
|
||||
}));
|
||||
audioSource.close();
|
||||
await output.finalize();
|
||||
|
||||
using input = new Input({
|
||||
source: new BufferSource(output.target.buffer!),
|
||||
formats: ALL_FORMATS,
|
||||
});
|
||||
|
||||
const track = (await input.getPrimaryAudioTrack())!;
|
||||
const packetSink = new EncodedPacketSink(track);
|
||||
const firstPacket = await packetSink.getFirstPacket();
|
||||
assert(firstPacket);
|
||||
|
||||
expect(firstPacket.timestamp).toBe(timestamp);
|
||||
|
||||
const sampleSink = new AudioSampleSink(track);
|
||||
const iterator = sampleSink.samples(timestamp);
|
||||
const firstSample = (await iterator.next()).value;
|
||||
assert(firstSample);
|
||||
|
||||
expect(firstSample.timestamp).toBe(timestamp);
|
||||
});
|
||||
|
||||
test('E-AC-3 with huge timestamps', async () => {
|
||||
registerAc3Decoder();
|
||||
registerAc3Encoder();
|
||||
|
||||
const sampleRate = 48000;
|
||||
const channels = 2;
|
||||
const timestamp = 1e9;
|
||||
const durationSeconds = 2;
|
||||
const data = createSineWave(sampleRate, channels, durationSeconds);
|
||||
|
||||
const output = new Output({
|
||||
format: new Mp4OutputFormat({ fastStart: 'fragmented' }),
|
||||
target: new BufferTarget(),
|
||||
});
|
||||
|
||||
const audioSource = new AudioSampleSource({ codec: 'eac3', bitrate: 192000 });
|
||||
output.addAudioTrack(audioSource);
|
||||
|
||||
await output.start();
|
||||
await audioSource.add(new AudioSample({
|
||||
data,
|
||||
format: 'f32',
|
||||
numberOfChannels: channels,
|
||||
sampleRate,
|
||||
timestamp,
|
||||
}));
|
||||
audioSource.close();
|
||||
await output.finalize();
|
||||
|
||||
using input = new Input({
|
||||
source: new BufferSource(output.target.buffer!),
|
||||
formats: ALL_FORMATS,
|
||||
});
|
||||
|
||||
const track = (await input.getPrimaryAudioTrack())!;
|
||||
const packetSink = new EncodedPacketSink(track);
|
||||
const firstPacket = await packetSink.getFirstPacket();
|
||||
assert(firstPacket);
|
||||
|
||||
expect(firstPacket.timestamp).toBe(timestamp);
|
||||
|
||||
const sampleSink = new AudioSampleSink(track);
|
||||
const iterator = sampleSink.samples(timestamp);
|
||||
const firstSample = (await iterator.next()).value;
|
||||
assert(firstSample);
|
||||
|
||||
expect(firstSample.timestamp).toBe(timestamp);
|
||||
});
|
||||
|
||||
@@ -7,9 +7,10 @@ import { BufferTarget } from '../../src/target.js';
|
||||
import { canEncode } from '../../src/encode.js';
|
||||
import { AudioSampleSource } from '../../src/media-source.js';
|
||||
import { EncodedPacketSink } from '../../src/media-sink.js';
|
||||
import { FlacOutputFormat } from '../../src/output-format.js';
|
||||
import { FlacOutputFormat, Mp4OutputFormat } from '../../src/output-format.js';
|
||||
import { AudioSample } from '../../src/sample.js';
|
||||
import { registerFlacEncoder } from '@mediabunny/flac-encoder';
|
||||
import { assert } from '../../src/misc.js';
|
||||
|
||||
const createSineWave = (sampleRate: number, channels: number, durationSeconds: number) => {
|
||||
const totalFrames = sampleRate * durationSeconds;
|
||||
@@ -81,3 +82,44 @@ test('FLAC encoding', async () => {
|
||||
|
||||
expect(await track.computeDuration()).toBeCloseTo(2, 1);
|
||||
});
|
||||
|
||||
test('FLAC with huge timestamps', async () => {
|
||||
registerFlacEncoder();
|
||||
|
||||
const sampleRate = 48000;
|
||||
const channels = 2;
|
||||
const timestamp = 1e9;
|
||||
const durationSeconds = 2;
|
||||
const data = createSineWave(sampleRate, channels, durationSeconds);
|
||||
|
||||
const output = new Output({
|
||||
format: new Mp4OutputFormat({ fastStart: 'fragmented' }),
|
||||
target: new BufferTarget(),
|
||||
});
|
||||
|
||||
const audioSource = new AudioSampleSource({ codec: 'flac', bitrate: 1 });
|
||||
output.addAudioTrack(audioSource);
|
||||
|
||||
await output.start();
|
||||
await audioSource.add(new AudioSample({
|
||||
data,
|
||||
format: 'f32',
|
||||
numberOfChannels: channels,
|
||||
sampleRate,
|
||||
timestamp,
|
||||
}));
|
||||
audioSource.close();
|
||||
await output.finalize();
|
||||
|
||||
using input = new Input({
|
||||
source: new BufferSource(output.target.buffer!),
|
||||
formats: ALL_FORMATS,
|
||||
});
|
||||
|
||||
const track = (await input.getPrimaryAudioTrack())!;
|
||||
const sink = new EncodedPacketSink(track);
|
||||
const firstPacket = await sink.getFirstPacket();
|
||||
assert(firstPacket);
|
||||
|
||||
expect(firstPacket.timestamp).toBe(timestamp);
|
||||
});
|
||||
|
||||
@@ -7,9 +7,10 @@ import { BufferTarget } from '../../src/target.js';
|
||||
import { canEncode } from '../../src/encode.js';
|
||||
import { AudioSampleSource } from '../../src/media-source.js';
|
||||
import { EncodedPacketSink } from '../../src/media-sink.js';
|
||||
import { Mp3OutputFormat } from '../../src/output-format.js';
|
||||
import { Mp3OutputFormat, Mp4OutputFormat } from '../../src/output-format.js';
|
||||
import { AudioSample } from '../../src/sample.js';
|
||||
import { registerMp3Encoder } from '@mediabunny/mp3-encoder';
|
||||
import { assert } from '../../src/misc.js';
|
||||
|
||||
const createSineWave = (sampleRate: number, channels: number, durationSeconds: number) => {
|
||||
const totalFrames = sampleRate * durationSeconds;
|
||||
@@ -81,3 +82,44 @@ test('MP3 encoding', async () => {
|
||||
|
||||
expect(await track.computeDuration()).toBeCloseTo(2, 0);
|
||||
});
|
||||
|
||||
test('MP3 with huge timestamps', async () => {
|
||||
registerMp3Encoder();
|
||||
|
||||
const sampleRate = 44100;
|
||||
const channels = 2;
|
||||
const timestamp = 1e9;
|
||||
const durationSeconds = 2;
|
||||
const data = createSineWave(sampleRate, channels, durationSeconds);
|
||||
|
||||
const output = new Output({
|
||||
format: new Mp4OutputFormat({ fastStart: 'fragmented' }),
|
||||
target: new BufferTarget(),
|
||||
});
|
||||
|
||||
const audioSource = new AudioSampleSource({ codec: 'mp3', bitrate: 128_000 });
|
||||
output.addAudioTrack(audioSource);
|
||||
|
||||
await output.start();
|
||||
await audioSource.add(new AudioSample({
|
||||
data,
|
||||
format: 'f32',
|
||||
numberOfChannels: channels,
|
||||
sampleRate,
|
||||
timestamp,
|
||||
}));
|
||||
audioSource.close();
|
||||
await output.finalize();
|
||||
|
||||
using input = new Input({
|
||||
source: new BufferSource(output.target.buffer!),
|
||||
formats: ALL_FORMATS,
|
||||
});
|
||||
|
||||
const track = (await input.getPrimaryAudioTrack())!;
|
||||
const sink = new EncodedPacketSink(track);
|
||||
const firstPacket = await sink.getFirstPacket();
|
||||
assert(firstPacket);
|
||||
|
||||
expect(firstPacket.timestamp).toBe(timestamp);
|
||||
});
|
||||
|
||||
@@ -1,133 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-VERSION:3
|
||||
#EXT-X-PLAYLIST-TYPE:VOD
|
||||
#EXT-X-TARGETDURATION:11
|
||||
#EXTINF:10.000,
|
||||
url_462/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_463/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_464/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_465/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_466/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_467/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_468/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:9.950,
|
||||
url_469/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.050,
|
||||
url_470/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_471/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_472/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_473/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_474/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_475/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_476/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_477/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_478/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_479/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_480/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_481/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_482/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_483/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_484/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_485/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_486/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_487/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_488/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_489/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_490/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:9.950,
|
||||
url_491/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.050,
|
||||
url_492/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_493/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_494/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_495/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_496/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_497/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_498/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_499/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_500/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_501/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_502/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_503/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_504/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:9.950,
|
||||
url_505/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.050,
|
||||
url_506/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_507/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_508/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_509/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_510/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_511/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_512/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_513/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_514/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_515/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_516/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_517/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_518/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_519/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_520/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_521/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_522/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_523/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_524/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXTINF:4.584,
|
||||
url_525/193039199_mp4_h264_aac_hd_7.ts
|
||||
#EXT-X-ENDLIST
|
||||
@@ -1,152 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-VERSION:6
|
||||
#EXT-X-INDEPENDENT-SEGMENTS
|
||||
|
||||
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="a1/prog_index.m3u8"
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a2",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="6",URI="a2/prog_index.m3u8"
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a3",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="6",URI="a3/prog_index.m3u8"
|
||||
|
||||
|
||||
#EXT-X-MEDIA:TYPE=CLOSED-CAPTIONS,GROUP-ID="cc",LANGUAGE="en",NAME="English",DEFAULT=YES,AUTOSELECT=YES,INSTREAM-ID="CC1"
|
||||
|
||||
|
||||
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="sub1",LANGUAGE="en",NAME="English",AUTOSELECT=YES,DEFAULT=YES,FORCED=NO,URI="s1/en/prog_index.m3u8"
|
||||
|
||||
|
||||
#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=928091,BANDWIDTH=1015727,CODECS="avc1.640028",RESOLUTION=1920x1080,URI="tp5/iframe_index.m3u8"
|
||||
#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=731514,BANDWIDTH=760174,CODECS="avc1.64001f",RESOLUTION=1280x720,URI="tp4/iframe_index.m3u8"
|
||||
#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=509153,BANDWIDTH=520162,CODECS="avc1.64001f",RESOLUTION=960x540,URI="tp3/iframe_index.m3u8"
|
||||
#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=176942,BANDWIDTH=186651,CODECS="avc1.64001f",RESOLUTION=640x360,URI="tp2/iframe_index.m3u8"
|
||||
#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=90796,BANDWIDTH=95410,CODECS="avc1.64001f",RESOLUTION=480x270,URI="tp1/iframe_index.m3u8"
|
||||
|
||||
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=2190673,BANDWIDTH=2523597,CODECS="avc1.640020,mp4a.40.2",RESOLUTION=960x540,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v5/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=8052613,BANDWIDTH=9873268,CODECS="avc1.64002a,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v9/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=6133114,BANDWIDTH=7318337,CODECS="avc1.64002a,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v8/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=4681537,BANDWIDTH=5421720,CODECS="avc1.64002a,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v7/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=3183969,BANDWIDTH=3611257,CODECS="avc1.640020,mp4a.40.2",RESOLUTION=1280x720,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v6/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1277747,BANDWIDTH=1475903,CODECS="avc1.64001f,mp4a.40.2",RESOLUTION=768x432,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v4/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=890848,BANDWIDTH=1017705,CODECS="avc1.64001f,mp4a.40.2",RESOLUTION=640x360,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v3/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=533420,BANDWIDTH=582820,CODECS="avc1.64001f,mp4a.40.2",RESOLUTION=480x270,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v2/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=303898,BANDWIDTH=339404,CODECS="avc1.64001f,mp4a.40.2",RESOLUTION=416x234,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v1/prog_index.m3u8
|
||||
|
||||
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=2413172,BANDWIDTH=2746096,CODECS="avc1.640020,ac-3",RESOLUTION=960x540,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v5/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=8275112,BANDWIDTH=10095767,CODECS="avc1.64002a,ac-3",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v9/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=6355613,BANDWIDTH=7540836,CODECS="avc1.64002a,ac-3",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v8/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=4904036,BANDWIDTH=5644219,CODECS="avc1.64002a,ac-3",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v7/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=3406468,BANDWIDTH=3833756,CODECS="avc1.640020,ac-3",RESOLUTION=1280x720,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v6/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1500246,BANDWIDTH=1698402,CODECS="avc1.64001f,ac-3",RESOLUTION=768x432,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v4/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1113347,BANDWIDTH=1240204,CODECS="avc1.64001f,ac-3",RESOLUTION=640x360,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v3/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=755919,BANDWIDTH=805319,CODECS="avc1.64001f,ac-3",RESOLUTION=480x270,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v2/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=526397,BANDWIDTH=561903,CODECS="avc1.64001f,ac-3",RESOLUTION=416x234,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v1/prog_index.m3u8
|
||||
|
||||
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=2221172,BANDWIDTH=2554096,CODECS="avc1.640020,ec-3",RESOLUTION=960x540,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v5/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=8083112,BANDWIDTH=9903767,CODECS="avc1.64002a,ec-3",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v9/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=6163613,BANDWIDTH=7348836,CODECS="avc1.64002a,ec-3",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v8/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=4712036,BANDWIDTH=5452219,CODECS="avc1.64002a,ec-3",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v7/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=3214468,BANDWIDTH=3641756,CODECS="avc1.640020,ec-3",RESOLUTION=1280x720,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v6/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1308246,BANDWIDTH=1506402,CODECS="avc1.64001f,ec-3",RESOLUTION=768x432,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v4/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=921347,BANDWIDTH=1048204,CODECS="avc1.64001f,ec-3",RESOLUTION=640x360,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v3/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=563919,BANDWIDTH=613319,CODECS="avc1.64001f,ec-3",RESOLUTION=480x270,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v2/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=334397,BANDWIDTH=369903,CODECS="avc1.64001f,ec-3",RESOLUTION=416x234,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v1/prog_index.m3u8
|
||||
|
||||
|
||||
#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=287207,BANDWIDTH=328352,CODECS="hvc1.2.4.L123.B0",RESOLUTION=1920x1080,URI="tp10/iframe_index.m3u8"
|
||||
#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=216605,BANDWIDTH=226274,CODECS="hvc1.2.4.L123.B0",RESOLUTION=1280x720,URI="tp9/iframe_index.m3u8"
|
||||
#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=154000,BANDWIDTH=159037,CODECS="hvc1.2.4.L123.B0",RESOLUTION=960x540,URI="tp8/iframe_index.m3u8"
|
||||
#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=90882,BANDWIDTH=92800,CODECS="hvc1.2.4.L123.B0",RESOLUTION=640x360,URI="tp7/iframe_index.m3u8"
|
||||
#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=50569,BANDWIDTH=51760,CODECS="hvc1.2.4.L123.B0",RESOLUTION=480x270,URI="tp6/iframe_index.m3u8"
|
||||
|
||||
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1966314,BANDWIDTH=2164328,CODECS="hvc1.2.4.L123.B0,mp4a.40.2",RESOLUTION=960x540,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v14/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=6105163,BANDWIDTH=6664228,CODECS="hvc1.2.4.L123.B0,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v18/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=4801073,BANDWIDTH=5427899,CODECS="hvc1.2.4.L123.B0,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v17/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=3441312,BANDWIDTH=4079770,CODECS="hvc1.2.4.L123.B0,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v16/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=2635933,BANDWIDTH=2764701,CODECS="hvc1.2.4.L123.B0,mp4a.40.2",RESOLUTION=1280x720,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v15/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1138612,BANDWIDTH=1226255,CODECS="hvc1.2.4.L123.B0,mp4a.40.2",RESOLUTION=768x432,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v13/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=829339,BANDWIDTH=901770,CODECS="hvc1.2.4.L123.B0,mp4a.40.2",RESOLUTION=640x360,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v12/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=522229,BANDWIDTH=548927,CODECS="hvc1.2.4.L123.B0,mp4a.40.2",RESOLUTION=480x270,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v11/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=314941,BANDWIDTH=340713,CODECS="hvc1.2.4.L123.B0,mp4a.40.2",RESOLUTION=416x234,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v10/prog_index.m3u8
|
||||
|
||||
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=2188813,BANDWIDTH=2386827,CODECS="hvc1.2.4.L123.B0,ac-3",RESOLUTION=960x540,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v14/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=6327662,BANDWIDTH=6886727,CODECS="hvc1.2.4.L123.B0,ac-3",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v18/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=5023572,BANDWIDTH=5650398,CODECS="hvc1.2.4.L123.B0,ac-3",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v17/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=3663811,BANDWIDTH=4302269,CODECS="hvc1.2.4.L123.B0,ac-3",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v16/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=2858432,BANDWIDTH=2987200,CODECS="hvc1.2.4.L123.B0,ac-3",RESOLUTION=1280x720,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v15/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1361111,BANDWIDTH=1448754,CODECS="hvc1.2.4.L123.B0,ac-3",RESOLUTION=768x432,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v13/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1051838,BANDWIDTH=1124269,CODECS="hvc1.2.4.L123.B0,ac-3",RESOLUTION=640x360,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v12/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=744728,BANDWIDTH=771426,CODECS="hvc1.2.4.L123.B0,ac-3",RESOLUTION=480x270,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v11/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=537440,BANDWIDTH=563212,CODECS="hvc1.2.4.L123.B0,ac-3",RESOLUTION=416x234,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v10/prog_index.m3u8
|
||||
|
||||
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1996813,BANDWIDTH=2194827,CODECS="hvc1.2.4.L123.B0,ec-3",RESOLUTION=960x540,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v14/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=6135662,BANDWIDTH=6694727,CODECS="hvc1.2.4.L123.B0,ec-3",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v18/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=4831572,BANDWIDTH=5458398,CODECS="hvc1.2.4.L123.B0,ec-3",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v17/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=3471811,BANDWIDTH=4110269,CODECS="hvc1.2.4.L123.B0,ec-3",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v16/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=2666432,BANDWIDTH=2795200,CODECS="hvc1.2.4.L123.B0,ec-3",RESOLUTION=1280x720,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v15/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1169111,BANDWIDTH=1256754,CODECS="hvc1.2.4.L123.B0,ec-3",RESOLUTION=768x432,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v13/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=859838,BANDWIDTH=932269,CODECS="hvc1.2.4.L123.B0,ec-3",RESOLUTION=640x360,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v12/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=552728,BANDWIDTH=579426,CODECS="hvc1.2.4.L123.B0,ec-3",RESOLUTION=480x270,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v11/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=345440,BANDWIDTH=371212,CODECS="hvc1.2.4.L123.B0,ec-3",RESOLUTION=416x234,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v10/prog_index.m3u8
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2149280,CODECS="mp4a.40.2,avc1.64001f",RESOLUTION=1280x720,NAME="720"
|
||||
url_0/193039199_mp4_h264_aac_hd_7.m3u8
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=246440,CODECS="mp4a.40.5,avc1.42000d",RESOLUTION=320x184,NAME="240"
|
||||
url_2/193039199_mp4_h264_aac_ld_7.m3u8
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=460560,CODECS="mp4a.40.5,avc1.420016",RESOLUTION=512x288,NAME="380"
|
||||
url_4/193039199_mp4_h264_aac_7.m3u8
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=836280,CODECS="mp4a.40.2,avc1.64001f",RESOLUTION=848x480,NAME="480"
|
||||
url_6/193039199_mp4_h264_aac_hq_7.m3u8
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=6221600,CODECS="mp4a.40.2,avc1.640028",RESOLUTION=1920x1080,NAME="1080"
|
||||
url_8/193039199_mp4_h264_aac_fhd_7.m3u8
|
||||
|
||||
|
||||
|
||||
https://test-streams.mux.dev/x36xhzz/url_0/193039199_mp4_h264_aac_hd_7.m3u8
|
||||
@@ -1,9 +0,0 @@
|
||||
#EXTM3U
|
||||
|
||||
## Archived from https://player.webvideocore.net/CL1olYogIrDWvwqiIKK7eLBkzvO18gwo9ERMzsyXzwt_t-ya8ygf2kQBZww38JJT/8i4vvznv8408.m3u8
|
||||
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=759977, RESOLUTION=1280x720
|
||||
mp3-in-ts-level/index.m3u8
|
||||
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=759977, RESOLUTION=1280x720
|
||||
mp3-in-ts-level/index.m3u8
|
||||
@@ -1,109 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-VERSION:3
|
||||
#EXT-X-TARGETDURATION:10
|
||||
#EXT-X-MEDIA-SEQUENCE:0
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_0.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_1.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_2.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_3.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_4.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_5.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_6.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_7.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_8.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_9.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_10.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_11.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_12.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_13.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_14.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_15.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_16.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_17.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_18.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_19.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_20.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_21.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_22.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_23.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_24.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_25.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_26.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_27.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_28.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_29.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_30.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_31.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_32.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_33.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_34.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_35.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_36.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_37.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_38.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_39.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_40.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_41.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_42.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_43.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_44.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_45.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_46.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_47.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_48.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_49.mp3
|
||||
#EXTINF:10.0,
|
||||
media_w905519204_50.mp3
|
||||
#EXTINF:6.833,
|
||||
media_w905519204_51.mp3
|
||||
#EXT-X-ENDLIST
|
||||
@@ -1,4 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-VERSION:3
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=63701,CODECS="mp4a.40.34"
|
||||
chunklist_w905519204.m3u8
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,37 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-VERSION:6
|
||||
## Generated with https://github.com/google/shaka-packager version v2.3.0-5bf8ad5-release
|
||||
#EXT-X-TARGETDURATION:5
|
||||
#EXT-X-PLAYLIST-TYPE:VOD
|
||||
#EXT-X-MAP:URI="v-0576p-1400k-libx264-init.mp4"
|
||||
#EXTINF:4.000,
|
||||
v-0576p-1400k-libx264-s1.mp4
|
||||
#EXTINF:4.000,
|
||||
v-0576p-1400k-libx264-s2.mp4
|
||||
#EXTINF:4.000,
|
||||
v-0576p-1400k-libx264-s3.mp4
|
||||
#EXTINF:4.000,
|
||||
v-0576p-1400k-libx264-s4.mp4
|
||||
#EXTINF:4.000,
|
||||
v-0576p-1400k-libx264-s5.mp4
|
||||
#EXTINF:4.000,
|
||||
v-0576p-1400k-libx264-s6.mp4
|
||||
#EXTINF:4.000,
|
||||
v-0576p-1400k-libx264-s7.mp4
|
||||
#EXTINF:4.000,
|
||||
v-0576p-1400k-libx264-s8.mp4
|
||||
#EXTINF:4.000,
|
||||
v-0576p-1400k-libx264-s9.mp4
|
||||
#EXTINF:4.000,
|
||||
v-0576p-1400k-libx264-s10.mp4
|
||||
#EXTINF:4.000,
|
||||
v-0576p-1400k-libx264-s11.mp4
|
||||
#EXTINF:4.000,
|
||||
v-0576p-1400k-libx264-s12.mp4
|
||||
#EXTINF:4.000,
|
||||
v-0576p-1400k-libx264-s13.mp4
|
||||
#EXTINF:4.000,
|
||||
v-0576p-1400k-libx264-s14.mp4
|
||||
#EXTINF:4.000,
|
||||
v-0576p-1400k-libx264-s15.mp4
|
||||
#EXT-X-ENDLIST
|
||||
@@ -1,25 +0,0 @@
|
||||
#EXTM3U
|
||||
## Generated with https://github.com/google/shaka-packager version v2.3.0-5bf8ad5-release
|
||||
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,URI="playlist_a-eng-0128k-aac-2c.mp4.m3u8",GROUP-ID="default-audio-group",LANGUAGE="en",NAME="stream_5",DEFAULT=YES,AUTOSELECT=YES,CHANNELS="2"
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,URI="playlist_a-deu-0128k-aac-2c.mp4.m3u8",GROUP-ID="default-audio-group",LANGUAGE="de",NAME="stream_4",AUTOSELECT=YES,CHANNELS="2"
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,URI="playlist_a-ita-0128k-aac-2c.mp4.m3u8",GROUP-ID="default-audio-group",LANGUAGE="it",NAME="stream_8",AUTOSELECT=YES,CHANNELS="2"
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,URI="playlist_a-fra-0128k-aac-2c.mp4.m3u8",GROUP-ID="default-audio-group",LANGUAGE="fr",NAME="stream_7",AUTOSELECT=YES,CHANNELS="2"
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,URI="playlist_a-spa-0128k-aac-2c.mp4.m3u8",GROUP-ID="default-audio-group",LANGUAGE="es",NAME="stream_9",AUTOSELECT=YES,CHANNELS="2"
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,URI="playlist_a-eng-0384k-aac-6c.mp4.m3u8",GROUP-ID="default-audio-group",LANGUAGE="en",NAME="stream_6",CHANNELS="6"
|
||||
|
||||
#EXT-X-MEDIA:TYPE=SUBTITLES,URI="playlist_s-en.webvtt.m3u8",GROUP-ID="default-text-group",LANGUAGE="en",NAME="stream_0",DEFAULT=YES,AUTOSELECT=YES
|
||||
#EXT-X-MEDIA:TYPE=SUBTITLES,URI="playlist_s-el.webvtt.m3u8",GROUP-ID="default-text-group",LANGUAGE="el",NAME="stream_1",AUTOSELECT=YES
|
||||
#EXT-X-MEDIA:TYPE=SUBTITLES,URI="playlist_s-fr.webvtt.m3u8",GROUP-ID="default-text-group",LANGUAGE="fr",NAME="stream_2",AUTOSELECT=YES
|
||||
#EXT-X-MEDIA:TYPE=SUBTITLES,URI="playlist_s-pt-BR.webvtt.m3u8",GROUP-ID="default-text-group",LANGUAGE="pt-BR",NAME="stream_3",AUTOSELECT=YES
|
||||
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=8062646,AVERAGE-BANDWIDTH=1824731,CODECS="avc1.4d401f,mp4a.40.2",RESOLUTION=768x576,AUDIO="default-audio-group",SUBTITLES="default-text-group"
|
||||
playlist_v-0576p-1400k-libx264.mp4.m3u8
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=6096050,AVERAGE-BANDWIDTH=1410993,CODECS="avc1.4d401f,mp4a.40.2",RESOLUTION=640x480,AUDIO="default-audio-group",SUBTITLES="default-text-group"
|
||||
playlist_v-0480p-1000k-libx264.mp4.m3u8
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=4005148,AVERAGE-BANDWIDTH=1146764,CODECS="avc1.4d401f,mp4a.40.2",RESOLUTION=480x360,AUDIO="default-audio-group",SUBTITLES="default-text-group"
|
||||
playlist_v-0360p-0750k-libx264.mp4.m3u8
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=2190444,AVERAGE-BANDWIDTH=784019,CODECS="avc1.4d401f,mp4a.40.2",RESOLUTION=320x240,AUDIO="default-audio-group",SUBTITLES="default-text-group"
|
||||
playlist_v-0240p-0400k-libx264.mp4.m3u8
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=827972,AVERAGE-BANDWIDTH=482170,CODECS="avc1.42c01e,mp4a.40.2",RESOLUTION=192x144,AUDIO="default-audio-group",SUBTITLES="default-text-group"
|
||||
playlist_v-0144p-0100k-libx264.mp4.m3u8
|
||||
Binary file not shown.
@@ -1,87 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-VERSION:3
|
||||
#EXT-X-MEDIA-SEQUENCE:0
|
||||
#EXT-X-TARGETDURATION:5
|
||||
#EXTINF:4.313,
|
||||
media-u5ce0h2ki_0.ts
|
||||
#EXTINF:4.800,
|
||||
media-u5ce0h2ki_1.ts
|
||||
#EXTINF:2.400,
|
||||
media-u5ce0h2ki_2.ts
|
||||
#EXTINF:4.800,
|
||||
media-u5ce0h2ki_3.ts
|
||||
#EXTINF:4.800,
|
||||
media-u5ce0h2ki_4.ts
|
||||
#EXTINF:2.400,
|
||||
media-u5ce0h2ki_5.ts
|
||||
#EXTINF:4.800,
|
||||
media-u5ce0h2ki_6.ts
|
||||
#EXTINF:4.800,
|
||||
media-u5ce0h2ki_7.ts
|
||||
#EXTINF:2.400,
|
||||
media-u5ce0h2ki_8.ts
|
||||
#EXTINF:4.800,
|
||||
media-u5ce0h2ki_9.ts
|
||||
#EXTINF:4.800,
|
||||
media-u5ce0h2ki_10.ts
|
||||
#EXTINF:2.400,
|
||||
media-u5ce0h2ki_11.ts
|
||||
#EXTINF:4.800,
|
||||
media-u5ce0h2ki_12.ts
|
||||
#EXTINF:4.800,
|
||||
media-u5ce0h2ki_13.ts
|
||||
#EXTINF:2.400,
|
||||
media-u5ce0h2ki_14.ts
|
||||
#EXTINF:4.800,
|
||||
media-u5ce0h2ki_15.ts
|
||||
#EXTINF:4.800,
|
||||
media-u5ce0h2ki_16.ts
|
||||
#EXTINF:2.400,
|
||||
media-u5ce0h2ki_17.ts
|
||||
#EXTINF:4.800,
|
||||
media-u5ce0h2ki_18.ts
|
||||
#EXTINF:4.800,
|
||||
media-u5ce0h2ki_19.ts
|
||||
#EXTINF:2.400,
|
||||
media-u5ce0h2ki_20.ts
|
||||
#EXTINF:4.800,
|
||||
media-u5ce0h2ki_21.ts
|
||||
#EXTINF:4.800,
|
||||
media-u5ce0h2ki_22.ts
|
||||
#EXTINF:2.400,
|
||||
media-u5ce0h2ki_23.ts
|
||||
#EXTINF:4.800,
|
||||
media-u5ce0h2ki_24.ts
|
||||
#EXTINF:4.800,
|
||||
media-u5ce0h2ki_25.ts
|
||||
#EXTINF:2.400,
|
||||
media-u5ce0h2ki_26.ts
|
||||
#EXTINF:4.800,
|
||||
media-u5ce0h2ki_27.ts
|
||||
#EXTINF:4.800,
|
||||
media-u5ce0h2ki_28.ts
|
||||
#EXTINF:2.400,
|
||||
media-u5ce0h2ki_29.ts
|
||||
#EXTINF:4.800,
|
||||
media-u5ce0h2ki_30.ts
|
||||
#EXTINF:4.800,
|
||||
media-u5ce0h2ki_31.ts
|
||||
#EXTINF:2.400,
|
||||
media-u5ce0h2ki_32.ts
|
||||
#EXTINF:4.800,
|
||||
media-u5ce0h2ki_33.ts
|
||||
#EXTINF:4.800,
|
||||
media-u5ce0h2ki_34.ts
|
||||
#EXTINF:2.400,
|
||||
media-u5ce0h2ki_35.ts
|
||||
#EXTINF:4.800,
|
||||
media-u5ce0h2ki_36.ts
|
||||
#EXTINF:4.800,
|
||||
media-u5ce0h2ki_37.ts
|
||||
#EXTINF:2.400,
|
||||
media-u5ce0h2ki_38.ts
|
||||
#EXTINF:4.800,
|
||||
media-u5ce0h2ki_39.ts
|
||||
#EXTINF:4.800,
|
||||
media-u5ce0h2ki_40.ts
|
||||
#EXT-X-ENDLIST
|
||||
@@ -1,18 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-VERSION:3
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=678000,CODECS="avc1.4d0029,mp4a.40.2",RESOLUTION=768x432
|
||||
[email protected]
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=678000,CODECS="avc1.4d0029,mp4a.40.2",RESOLUTION=768x432
|
||||
[email protected]
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=2320000,CODECS="avc1.4d0029,mp4a.40.2",RESOLUTION=1280x720
|
||||
[email protected]
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=2320000,CODECS="avc1.4d0029,mp4a.40.2",RESOLUTION=1280x720
|
||||
[email protected]
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=198000,CODECS="avc1.42e020,mp4a.40.2",RESOLUTION=480x270
|
||||
[email protected]
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=198000,CODECS="avc1.42e020,mp4a.40.2",RESOLUTION=480x270
|
||||
[email protected]
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=1756000,CODECS="avc1.4d0029,mp4a.40.2",RESOLUTION=864x486
|
||||
[email protected]
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=0,BANDWIDTH=1756000,CODECS="avc1.4d0029,mp4a.40.2",RESOLUTION=864x486
|
||||
[email protected]
|
||||
Binary file not shown.
Binary file not shown.
@@ -1,66 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-MEDIA-SEQUENCE:0
|
||||
#EXT-X-ALLOW-CACHE:NO
|
||||
#EXT-X-VERSION:2
|
||||
#EXT-X-TARGETDURATION:8
|
||||
#EXTINF:8,
|
||||
#EXT-X-KEY:METHOD=NONE
|
||||
#EXT-X-PROGRAM-DATE-TIME:2013-06-17T18:32:00Z
|
||||
fms_sampleFrag1Num0.ts
|
||||
#EXTINF:8,
|
||||
#EXT-X-KEY:METHOD=NONE
|
||||
#EXT-X-PROGRAM-DATE-TIME:2013-06-17T18:32:00Z
|
||||
fms_sampleFrag1Num1.ts
|
||||
#EXTINF:8,
|
||||
#EXT-X-KEY:METHOD=NONE
|
||||
#EXT-X-PROGRAM-DATE-TIME:2013-06-17T18:32:00Z
|
||||
fms_sampleFrag2Num2.ts
|
||||
#EXTINF:8,
|
||||
#EXT-X-KEY:METHOD=NONE
|
||||
#EXT-X-PROGRAM-DATE-TIME:2013-06-17T18:32:00Z
|
||||
fms_sampleFrag3Num3.ts
|
||||
#EXTINF:8,
|
||||
#EXT-X-KEY:METHOD=NONE
|
||||
#EXT-X-PROGRAM-DATE-TIME:2013-06-17T18:32:00Z
|
||||
fms_sampleFrag4Num4.ts
|
||||
#EXTINF:8,
|
||||
#EXT-X-KEY:METHOD=NONE
|
||||
#EXT-X-PROGRAM-DATE-TIME:2013-06-17T18:32:00Z
|
||||
fms_sampleFrag5Num5.ts
|
||||
#EXTINF:8,
|
||||
#EXT-X-KEY:METHOD=NONE
|
||||
#EXT-X-PROGRAM-DATE-TIME:2013-06-17T18:32:00Z
|
||||
fms_sampleFrag6Num6.ts
|
||||
#EXTINF:8,
|
||||
#EXT-X-KEY:METHOD=NONE
|
||||
#EXT-X-PROGRAM-DATE-TIME:2013-06-17T18:32:00Z
|
||||
fms_sampleFrag7Num7.ts
|
||||
#EXTINF:8,
|
||||
#EXT-X-KEY:METHOD=NONE
|
||||
#EXT-X-PROGRAM-DATE-TIME:2013-06-17T18:32:00Z
|
||||
fms_sampleFrag8Num8.ts
|
||||
#EXTINF:8,
|
||||
#EXT-X-KEY:METHOD=NONE
|
||||
#EXT-X-PROGRAM-DATE-TIME:2013-06-17T18:32:00Z
|
||||
fms_sampleFrag9Num9.ts
|
||||
#EXTINF:8,
|
||||
#EXT-X-KEY:METHOD=NONE
|
||||
#EXT-X-PROGRAM-DATE-TIME:2013-06-17T18:32:00Z
|
||||
fms_sampleFrag10Num10.ts
|
||||
#EXTINF:8,
|
||||
#EXT-X-KEY:METHOD=NONE
|
||||
#EXT-X-PROGRAM-DATE-TIME:2013-06-17T18:32:00Z
|
||||
fms_sampleFrag11Num11.ts
|
||||
#EXTINF:8,
|
||||
#EXT-X-KEY:METHOD=NONE
|
||||
#EXT-X-PROGRAM-DATE-TIME:2013-06-17T18:32:00Z
|
||||
fms_sampleFrag12Num12.ts
|
||||
#EXTINF:8,
|
||||
#EXT-X-KEY:METHOD=NONE
|
||||
#EXT-X-PROGRAM-DATE-TIME:2013-06-17T18:32:00Z
|
||||
fms_sampleFrag13Num13.ts
|
||||
#EXTINF:3,
|
||||
#EXT-X-KEY:METHOD=NONE
|
||||
#EXT-X-PROGRAM-DATE-TIME:2013-06-17T18:32:00Z
|
||||
fms_sampleFrag14Num14.ts
|
||||
#EXT-X-ENDLIST
|
||||
@@ -1,36 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-PLAYLIST-TYPE:VOD
|
||||
#EXT-X-MEDIA-SEQUENCE:1
|
||||
#EXT-X-ALLOW-CACHE:YES
|
||||
#EXT-X-TARGETDURATION:8
|
||||
#EXT-X-VERSION:3
|
||||
#EXT-X-PROGRAM-DATE-TIME:2012-12-06T19:10:03+00:00
|
||||
#EXT-X-DISCONTINUITY
|
||||
#EXT-X-PROGRAM-DATE-TIME:2012-12-06T19:10:03+00:00
|
||||
#EXTINF:6.006,{}
|
||||
fragment.ts
|
||||
#EXT-X-DISCONTINUITY
|
||||
#EXT-X-PROGRAM-DATE-TIME:2012-12-06T19:11:06+00:00
|
||||
#EXTINF:6.006,{}
|
||||
fragment.ts
|
||||
#EXT-X-DISCONTINUITY
|
||||
#EXT-X-PROGRAM-DATE-TIME:2012-12-06T19:23:23+00:00
|
||||
#EXTINF:6.006,{}
|
||||
fragment.ts
|
||||
#EXT-X-DISCONTINUITY
|
||||
#EXT-X-PROGRAM-DATE-TIME:2012-12-06T19:23:23+00:00
|
||||
#EXTINF:6.006,{}
|
||||
fragment.ts
|
||||
#EXT-X-DISCONTINUITY
|
||||
#EXT-X-PROGRAM-DATE-TIME:2012-12-06T19:23:29+00:00
|
||||
#EXTINF:6.006,{}
|
||||
fragment.ts
|
||||
#EXT-X-DISCONTINUITY
|
||||
#EXT-X-PROGRAM-DATE-TIME:2012-12-06T19:24:56+00:00
|
||||
#EXTINF:6.006,{}
|
||||
fragment.ts
|
||||
#EXT-X-DISCONTINUITY
|
||||
#EXT-X-PROGRAM-DATE-TIME:2012-12-06T19:25:03+00:00
|
||||
#EXTINF:6.006,{}
|
||||
fragment.ts
|
||||
#EXT-X-ENDLIST
|
||||
@@ -1,44 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-VERSION:1
|
||||
## Created with Unified Streaming Platform(version=1.6.6)
|
||||
#EXT-X-MEDIA-SEQUENCE:176505193
|
||||
#EXT-X-ALLOW-CACHE:NO
|
||||
#EXT-X-TARGETDURATION:10
|
||||
#EXT-X-PROGRAM-DATE-TIME:TEST1
|
||||
#EXTINF:8, no desc
|
||||
interpretation-audio=64000-video=500000-176505193.ts
|
||||
#EXTINF:8, no desc
|
||||
interpretation-audio=64000-video=500000-176505194.ts
|
||||
#EXTINF:8, no desc
|
||||
interpretation-audio=64000-video=500000-176505195.ts
|
||||
#EXTINF:8, no desc
|
||||
interpretation-audio=64000-video=500000-176505196.ts
|
||||
#EXTINF:10, no desc
|
||||
interpretation-audio=64000-video=500000-176505197.ts
|
||||
#EXT-X-PROGRAM-DATE-TIME:TEST3
|
||||
#EXTINF:8, no desc
|
||||
interpretation-audio=64000-video=500000-176505198.ts
|
||||
#EXTINF:8, no desc
|
||||
interpretation-audio=64000-video=500000-176505199.ts
|
||||
#EXTINF:8, no desc
|
||||
interpretation-audio=64000-video=500000-176505200.ts
|
||||
#EXTINF:8, no desc
|
||||
interpretation-audio=64000-video=500000-176505201.ts
|
||||
#EXTINF:8, no desc
|
||||
interpretation-audio=64000-video=500000-176505202.ts
|
||||
#EXTINF:10, no desc
|
||||
interpretation-audio=64000-video=500000-176505203.ts
|
||||
#EXTINF:8, no desc
|
||||
interpretation-audio=64000-video=500000-176505204.ts
|
||||
#EXT-X-PROGRAM-DATE-TIME:TEST4
|
||||
#EXTINF:8, no desc
|
||||
interpretation-audio=64000-video=500000-176505205.ts
|
||||
#EXTINF:8, no desc
|
||||
interpretation-audio=64000-video=500000-176505206.ts
|
||||
#EXTINF:8, no desc
|
||||
interpretation-audio=64000-video=500000-176505207.ts
|
||||
#EXTINF:8, no desc
|
||||
interpretation-audio=64000-video=500000-176505208.ts
|
||||
#EXTINF:10, no desc
|
||||
interpretation-audio=64000-video=500000-176505209.ts
|
||||
#EXT-X-ENDLIST
|
||||
@@ -1,5 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-VERSION:1
|
||||
## Created with Unified Streaming Platform(version=1.6.6)
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=597840,CODECS="mp4a.40.2,avc1.66.30",RESOLUTION=640x360
|
||||
interpretation-audio=64000-video=500000.m3u8
|
||||
@@ -1,17 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-VERSION:1
|
||||
#EXT-X-TARGETDURATION:10
|
||||
#EXT-X-MEDIA-SEQUENCE:136803485
|
||||
#EXT-X-KEY:METHOD=NONE
|
||||
#EXT-X-PROGRAM-DATE-TIME:2013-05-08T17:40:50Z
|
||||
#EXTINF:10,
|
||||
segment0.ts
|
||||
#EXTINF:10,
|
||||
segment1.ts
|
||||
#EXTINF:10,
|
||||
segment2.ts
|
||||
#EXTINF:10,
|
||||
segment3.ts
|
||||
#EXTINF:10,
|
||||
segment4.ts
|
||||
#EXT-X-ENDLIST
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,11 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-VERSION:3
|
||||
#EXT-X-TARGETDURATION:14
|
||||
#EXT-X-MEDIA-SEQUENCE:37121
|
||||
#EXTINF:10.224,
|
||||
media_w506387179_37121.ts
|
||||
#EXTINF:10.239,
|
||||
media_w506387179_37122.ts
|
||||
#EXTINF:10.223,
|
||||
media_w506387179_37123.ts
|
||||
#EXT-X-ENDLIST
|
||||
@@ -1,5 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-VERSION:3
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=281439,CODECS="avc1.66.31,mp4a.40.2",RESOLUTION=640x360
|
||||
popularteutonia-video/popularteutonia-video/chunklist_w506387179.m3u8
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-VERSION:3
|
||||
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Chinese",FORCED=NO,AUTOSELECT=YES,URI="chinese/ed.m3u8",LANGUAGE="zh"
|
||||
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="French",FORCED=NO,AUTOSELECT=YES,URI="french/ed.m3u8",LANGUAGE="fr"
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",LANGUAGE="en",NAME="English",DEFAULT=YES,AUTOSELECT=YES,URI="media/b160000-english.m3u8"
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",LANGUAGE="sp",NAME="Spanish",DEFAULT=NO,AUTOSELECT=YES,URI="media/b160000-spanish.m3u8"
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",LANGUAGE="en",NAME="Commentary (eng)",DEFAULT=NO,AUTOSELECT=NO,URI="media/b160000-commentary.m3u8"
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=2962000,NAME="Main",CODECS="avc1.66.30",RESOLUTION=1280x720,AUDIO="aac",SUBTITLES="subs"
|
||||
media/b2962000-video.m3u8
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=1427000,NAME="Main",CODECS="avc1.66.30",RESOLUTION=768x432,AUDIO="aac",SUBTITLES="subs"
|
||||
media/b1427000-video.m3u8
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=688000,NAME="Main",CODECS="avc1.66.30",RESOLUTION=448x252,AUDIO="aac",SUBTITLES="subs"
|
||||
media/b688000-video.m3u8
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=331000,NAME="Main",CODECS="avc1.66.30",RESOLUTION=284x160,AUDIO="aac",SUBTITLES="subs"
|
||||
media/b331000-video.m3u8
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@@ -1,45 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-VERSION:4
|
||||
## Created with Unified Streaming Platform (version=1.15.1-31309)
|
||||
#EXT-X-PLAYLIST-TYPE:VOD
|
||||
#EXT-X-MEDIA-SEQUENCE:1
|
||||
#EXT-X-INDEPENDENT-SEGMENTS
|
||||
#EXT-X-TARGETDURATION:4
|
||||
#USP-X-TIMESTAMP-MAP:MPEGTS=900000,LOCAL=1970-01-01T00:00:00Z
|
||||
#EXTINF:4, no desc
|
||||
manifest-audio_0_q7BAv3mA_WbaG9LKN=112000-video_0_q7BAv3mA_Uql258jy=841568-1.ts
|
||||
#EXTINF:4, no desc
|
||||
manifest-audio_0_q7BAv3mA_WbaG9LKN=112000-video_0_q7BAv3mA_Uql258jy=841568-2.ts
|
||||
#EXTINF:4, no desc
|
||||
manifest-audio_0_q7BAv3mA_WbaG9LKN=112000-video_0_q7BAv3mA_Uql258jy=841568-3.ts
|
||||
#EXTINF:4, no desc
|
||||
manifest-audio_0_q7BAv3mA_WbaG9LKN=112000-video_0_q7BAv3mA_Uql258jy=841568-4.ts
|
||||
#EXTINF:4, no desc
|
||||
manifest-audio_0_q7BAv3mA_WbaG9LKN=112000-video_0_q7BAv3mA_Uql258jy=841568-5.ts
|
||||
#EXTINF:4, no desc
|
||||
manifest-audio_0_q7BAv3mA_WbaG9LKN=112000-video_0_q7BAv3mA_Uql258jy=841568-6.ts
|
||||
#EXTINF:4, no desc
|
||||
manifest-audio_0_q7BAv3mA_WbaG9LKN=112000-video_0_q7BAv3mA_Uql258jy=841568-7.ts
|
||||
#EXTINF:4, no desc
|
||||
manifest-audio_0_q7BAv3mA_WbaG9LKN=112000-video_0_q7BAv3mA_Uql258jy=841568-8.ts
|
||||
#EXTINF:4, no desc
|
||||
manifest-audio_0_q7BAv3mA_WbaG9LKN=112000-video_0_q7BAv3mA_Uql258jy=841568-9.ts
|
||||
#EXTINF:4, no desc
|
||||
manifest-audio_0_q7BAv3mA_WbaG9LKN=112000-video_0_q7BAv3mA_Uql258jy=841568-10.ts
|
||||
#EXTINF:4, no desc
|
||||
manifest-audio_0_q7BAv3mA_WbaG9LKN=112000-video_0_q7BAv3mA_Uql258jy=841568-11.ts
|
||||
#EXTINF:4, no desc
|
||||
manifest-audio_0_q7BAv3mA_WbaG9LKN=112000-video_0_q7BAv3mA_Uql258jy=841568-12.ts
|
||||
#EXTINF:4, no desc
|
||||
manifest-audio_0_q7BAv3mA_WbaG9LKN=112000-video_0_q7BAv3mA_Uql258jy=841568-13.ts
|
||||
#EXTINF:4, no desc
|
||||
manifest-audio_0_q7BAv3mA_WbaG9LKN=112000-video_0_q7BAv3mA_Uql258jy=841568-14.ts
|
||||
#EXTINF:4, no desc
|
||||
manifest-audio_0_q7BAv3mA_WbaG9LKN=112000-video_0_q7BAv3mA_Uql258jy=841568-15.ts
|
||||
#EXTINF:4, no desc
|
||||
manifest-audio_0_q7BAv3mA_WbaG9LKN=112000-video_0_q7BAv3mA_Uql258jy=841568-16.ts
|
||||
#EXTINF:4, no desc
|
||||
manifest-audio_0_q7BAv3mA_WbaG9LKN=112000-video_0_q7BAv3mA_Uql258jy=841568-17.ts
|
||||
#EXTINF:2.8333, no desc
|
||||
manifest-audio_0_q7BAv3mA_WbaG9LKN=112000-video_0_q7BAv3mA_Uql258jy=841568-18.ts
|
||||
#EXT-X-ENDLIST
|
||||
@@ -1,15 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=960000,RESOLUTION=640x360,CODECS="mp4a.40.2,avc1.4d401e",FRAME-RATE=30.0,CLOSED-CAPTIONS=NONE
|
||||
https://videos-cloudfront-usp.jwpsrv.com/697447fb_17168bf482c87a9ca77629506aef91ae741b18d2/sites/MDzvJl71/media/pZxWPRg4/versions/pZxWPRg4/manifest.ism/manifest-audio_0_q7BAv3mA_WbaG9LKN=112000-video_0_q7BAv3mA_Uql258jy=841568.m3u8
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=5220000,RESOLUTION=1920x1080,CODECS="mp4a.40.2,avc1.640028",FRAME-RATE=30.0,CLOSED-CAPTIONS=NONE
|
||||
https://videos-cloudfront-usp.jwpsrv.com/697447fb_17168bf482c87a9ca77629506aef91ae741b18d2/sites/MDzvJl71/media/pZxWPRg4/versions/pZxWPRg4/manifest.ism/manifest-audio_0_q7BAv3mA_WbaG9LKN=112000-video_0_q7BAv3mA_Uql258jy=5099752.m3u8
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2580000,RESOLUTION=1280x720,CODECS="mp4a.40.2,avc1.4d401f",FRAME-RATE=30.0,CLOSED-CAPTIONS=NONE
|
||||
https://videos-cloudfront-usp.jwpsrv.com/697447fb_17168bf482c87a9ca77629506aef91ae741b18d2/sites/MDzvJl71/media/pZxWPRg4/versions/pZxWPRg4/manifest.ism/manifest-audio_0_q7BAv3mA_WbaG9LKN=112000-video_0_q7BAv3mA_Uql258jy=2462768.m3u8
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1650000,RESOLUTION=960x540,CODECS="mp4a.40.2,avc1.4d401f",FRAME-RATE=30.0,CLOSED-CAPTIONS=NONE
|
||||
https://videos-cloudfront-usp.jwpsrv.com/697447fb_17168bf482c87a9ca77629506aef91ae741b18d2/sites/MDzvJl71/media/pZxWPRg4/versions/pZxWPRg4/manifest.ism/manifest-audio_0_q7BAv3mA_WbaG9LKN=112000-video_0_q7BAv3mA_Uql258jy=1537008.m3u8
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=760000,RESOLUTION=480x270,CODECS="mp4a.40.2,avc1.42c015",FRAME-RATE=30.0,CLOSED-CAPTIONS=NONE
|
||||
https://videos-cloudfront-usp.jwpsrv.com/697447fb_17168bf482c87a9ca77629506aef91ae741b18d2/sites/MDzvJl71/media/pZxWPRg4/versions/pZxWPRg4/manifest.ism/manifest-audio_0_q7BAv3mA_WbaG9LKN=112000-video_0_q7BAv3mA_Uql258jy=639296.m3u8
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=530000,RESOLUTION=320x180,CODECS="mp4a.40.2,avc1.42c00d",FRAME-RATE=30.0,CLOSED-CAPTIONS=NONE
|
||||
https://videos-cloudfront-usp.jwpsrv.com/697447fb_17168bf482c87a9ca77629506aef91ae741b18d2/sites/MDzvJl71/media/pZxWPRg4/versions/pZxWPRg4/manifest.ism/manifest-audio_0_q7BAv3mA_WbaG9LKN=112000-video_0_q7BAv3mA_Uql258jy=413600.m3u8
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=120000,CODECS="mp4a.40.2"
|
||||
https://videos-cloudfront-usp.jwpsrv.com/697447fb_17168bf482c87a9ca77629506aef91ae741b18d2/sites/MDzvJl71/media/pZxWPRg4/versions/pZxWPRg4/manifest.ism/manifest-audio_0_q7BAv3mA_WbaG9LKN=112000.m3u8
|
||||
@@ -1,7 +0,0 @@
|
||||
#EXTM3U
|
||||
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="stereo",LANGUAGE="en",NAME="English"
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="stereo",LANGUAGE="dubbing",NAME="Dubbing",URI="audio/stereo/none/128kbit.m3u8"
|
||||
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=831270,CODECS="mp4a.40.2",AUDIO="stereo"
|
||||
audio/stereo/en/128kbit.m3u8
|
||||
@@ -1,236 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-TARGETDURATION:8
|
||||
#EXT-X-VERSION:7
|
||||
#EXT-X-MEDIA-SEQUENCE:1
|
||||
#EXT-X-PLAYLIST-TYPE:VOD
|
||||
#EXT-X-INDEPENDENT-SEGMENTS
|
||||
#EXT-X-MAP:URI="main.mp4",BYTERANGE="1118@0"
|
||||
#EXTINF:7.98333,
|
||||
#EXT-X-BYTERANGE:1700094@1118
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:1789481@1701212
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:1777588@3490693
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:1752144@5268281
|
||||
main.mp4
|
||||
#EXTINF:7.26667,
|
||||
#EXT-X-BYTERANGE:1563219@7020425
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:1801953@8583644
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:1834406@10385597
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:1785475@12220003
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:1823288@14005478
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:1829143@15828766
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:1800453@17657909
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:1803327@19458362
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:1873636@21261689
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:1948640@23135325
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:1840513@25083965
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:1937752@26924478
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:1997584@28862230
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:1924169@30859814
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:1895068@32783983
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:1934194@34679051
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2038511@36613245
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:1930106@38651756
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:1922710@40581862
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2055801@42504572
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:1963459@44560373
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:1960831@46523832
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2038186@48484663
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2065137@50522849
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:1960086@52587986
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:1984801@54548072
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2061777@56532873
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2006124@58594650
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2025156@60600774
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2043210@62625930
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2043844@64669140
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:1993528@66712984
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:1998870@68706512
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2099623@70705382
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2162266@72805005
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:1997458@74967271
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2075347@76964729
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2180556@79040076
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2023098@81220632
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2053500@83243730
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2074093@85297230
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2133059@87371323
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2015841@89504382
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2051188@91520223
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2149171@93571411
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2103043@95720582
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2039241@97823625
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2127240@99862866
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2162908@101990106
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2067454@104153014
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2038579@106220468
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2119116@108259047
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2142043@110378163
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2049034@112520206
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2163788@114569240
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2171266@116733028
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2136193@118904294
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2113276@121040487
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2205504@123153763
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2237552@125359267
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2129080@127596819
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2115078@129725899
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2258589@131840977
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2177462@134099566
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2174962@136277028
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2253878@138451990
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2361884@140705868
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2272546@143067752
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2228068@145340298
|
||||
main.mp4
|
||||
#EXTINF:8.00000,
|
||||
#EXT-X-BYTERANGE:2320491@147568366
|
||||
main.mp4
|
||||
#EXTINF:7.96667,
|
||||
#EXT-X-BYTERANGE:2087892@149888857
|
||||
main.mp4
|
||||
#EXTINF:0.78333,
|
||||
#EXT-X-BYTERANGE:195177@151976749
|
||||
main.mp4
|
||||
#EXT-X-ENDLIST
|
||||
@@ -1,152 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-VERSION:6
|
||||
#EXT-X-INDEPENDENT-SEGMENTS
|
||||
|
||||
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="a1/prog_index.m3u8"
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a2",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="6",URI="a2/prog_index.m3u8"
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a3",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="6",URI="a3/prog_index.m3u8"
|
||||
|
||||
|
||||
#EXT-X-MEDIA:TYPE=CLOSED-CAPTIONS,GROUP-ID="cc",LANGUAGE="en",NAME="English",DEFAULT=YES,AUTOSELECT=YES,INSTREAM-ID="CC1"
|
||||
|
||||
|
||||
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="sub1",LANGUAGE="en",NAME="English",AUTOSELECT=YES,DEFAULT=YES,FORCED=NO,URI="s1/en/prog_index.m3u8"
|
||||
|
||||
|
||||
#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=928091,BANDWIDTH=1015727,CODECS="avc1.640028",RESOLUTION=1920x1080,URI="tp5/iframe_index.m3u8"
|
||||
#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=731514,BANDWIDTH=760174,CODECS="avc1.64001f",RESOLUTION=1280x720,URI="tp4/iframe_index.m3u8"
|
||||
#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=509153,BANDWIDTH=520162,CODECS="avc1.64001f",RESOLUTION=960x540,URI="tp3/iframe_index.m3u8"
|
||||
#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=176942,BANDWIDTH=186651,CODECS="avc1.64001f",RESOLUTION=640x360,URI="tp2/iframe_index.m3u8"
|
||||
#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=90796,BANDWIDTH=95410,CODECS="avc1.64001f",RESOLUTION=480x270,URI="tp1/iframe_index.m3u8"
|
||||
|
||||
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=2190673,BANDWIDTH=2523597,CODECS="avc1.640020,mp4a.40.2",RESOLUTION=960x540,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v5/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=8052613,BANDWIDTH=9873268,CODECS="avc1.64002a,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v9/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=6133114,BANDWIDTH=7318337,CODECS="avc1.64002a,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v8/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=4681537,BANDWIDTH=5421720,CODECS="avc1.64002a,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v7/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=3183969,BANDWIDTH=3611257,CODECS="avc1.640020,mp4a.40.2",RESOLUTION=1280x720,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v6/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1277747,BANDWIDTH=1475903,CODECS="avc1.64001f,mp4a.40.2",RESOLUTION=768x432,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v4/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=890848,BANDWIDTH=1017705,CODECS="avc1.64001f,mp4a.40.2",RESOLUTION=640x360,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v3/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=533420,BANDWIDTH=582820,CODECS="avc1.64001f,mp4a.40.2",RESOLUTION=480x270,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v2/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=303898,BANDWIDTH=339404,CODECS="avc1.64001f,mp4a.40.2",RESOLUTION=416x234,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v1/prog_index.m3u8
|
||||
|
||||
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=2413172,BANDWIDTH=2746096,CODECS="avc1.640020,ac-3",RESOLUTION=960x540,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v5/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=8275112,BANDWIDTH=10095767,CODECS="avc1.64002a,ac-3",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v9/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=6355613,BANDWIDTH=7540836,CODECS="avc1.64002a,ac-3",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v8/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=4904036,BANDWIDTH=5644219,CODECS="avc1.64002a,ac-3",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v7/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=3406468,BANDWIDTH=3833756,CODECS="avc1.640020,ac-3",RESOLUTION=1280x720,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v6/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1500246,BANDWIDTH=1698402,CODECS="avc1.64001f,ac-3",RESOLUTION=768x432,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v4/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1113347,BANDWIDTH=1240204,CODECS="avc1.64001f,ac-3",RESOLUTION=640x360,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v3/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=755919,BANDWIDTH=805319,CODECS="avc1.64001f,ac-3",RESOLUTION=480x270,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v2/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=526397,BANDWIDTH=561903,CODECS="avc1.64001f,ac-3",RESOLUTION=416x234,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v1/prog_index.m3u8
|
||||
|
||||
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=2221172,BANDWIDTH=2554096,CODECS="avc1.640020,ec-3",RESOLUTION=960x540,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v5/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=8083112,BANDWIDTH=9903767,CODECS="avc1.64002a,ec-3",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v9/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=6163613,BANDWIDTH=7348836,CODECS="avc1.64002a,ec-3",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v8/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=4712036,BANDWIDTH=5452219,CODECS="avc1.64002a,ec-3",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v7/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=3214468,BANDWIDTH=3641756,CODECS="avc1.640020,ec-3",RESOLUTION=1280x720,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v6/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1308246,BANDWIDTH=1506402,CODECS="avc1.64001f,ec-3",RESOLUTION=768x432,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v4/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=921347,BANDWIDTH=1048204,CODECS="avc1.64001f,ec-3",RESOLUTION=640x360,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v3/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=563919,BANDWIDTH=613319,CODECS="avc1.64001f,ec-3",RESOLUTION=480x270,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v2/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=334397,BANDWIDTH=369903,CODECS="avc1.64001f,ec-3",RESOLUTION=416x234,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v1/prog_index.m3u8
|
||||
|
||||
|
||||
#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=287207,BANDWIDTH=328352,CODECS="hvc1.2.4.L123.B0",RESOLUTION=1920x1080,URI="tp10/iframe_index.m3u8"
|
||||
#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=216605,BANDWIDTH=226274,CODECS="hvc1.2.4.L123.B0",RESOLUTION=1280x720,URI="tp9/iframe_index.m3u8"
|
||||
#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=154000,BANDWIDTH=159037,CODECS="hvc1.2.4.L123.B0",RESOLUTION=960x540,URI="tp8/iframe_index.m3u8"
|
||||
#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=90882,BANDWIDTH=92800,CODECS="hvc1.2.4.L123.B0",RESOLUTION=640x360,URI="tp7/iframe_index.m3u8"
|
||||
#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=50569,BANDWIDTH=51760,CODECS="hvc1.2.4.L123.B0",RESOLUTION=480x270,URI="tp6/iframe_index.m3u8"
|
||||
|
||||
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1966314,BANDWIDTH=2164328,CODECS="hvc1.2.4.L123.B0,mp4a.40.2",RESOLUTION=960x540,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v14/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=6105163,BANDWIDTH=6664228,CODECS="hvc1.2.4.L123.B0,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v18/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=4801073,BANDWIDTH=5427899,CODECS="hvc1.2.4.L123.B0,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v17/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=3441312,BANDWIDTH=4079770,CODECS="hvc1.2.4.L123.B0,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v16/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=2635933,BANDWIDTH=2764701,CODECS="hvc1.2.4.L123.B0,mp4a.40.2",RESOLUTION=1280x720,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v15/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1138612,BANDWIDTH=1226255,CODECS="hvc1.2.4.L123.B0,mp4a.40.2",RESOLUTION=768x432,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v13/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=829339,BANDWIDTH=901770,CODECS="hvc1.2.4.L123.B0,mp4a.40.2",RESOLUTION=640x360,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v12/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=522229,BANDWIDTH=548927,CODECS="hvc1.2.4.L123.B0,mp4a.40.2",RESOLUTION=480x270,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v11/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=314941,BANDWIDTH=340713,CODECS="hvc1.2.4.L123.B0,mp4a.40.2",RESOLUTION=416x234,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a1",SUBTITLES="sub1"
|
||||
v10/prog_index.m3u8
|
||||
|
||||
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=2188813,BANDWIDTH=2386827,CODECS="hvc1.2.4.L123.B0,ac-3",RESOLUTION=960x540,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v14/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=6327662,BANDWIDTH=6886727,CODECS="hvc1.2.4.L123.B0,ac-3",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v18/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=5023572,BANDWIDTH=5650398,CODECS="hvc1.2.4.L123.B0,ac-3",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v17/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=3663811,BANDWIDTH=4302269,CODECS="hvc1.2.4.L123.B0,ac-3",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v16/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=2858432,BANDWIDTH=2987200,CODECS="hvc1.2.4.L123.B0,ac-3",RESOLUTION=1280x720,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v15/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1361111,BANDWIDTH=1448754,CODECS="hvc1.2.4.L123.B0,ac-3",RESOLUTION=768x432,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v13/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1051838,BANDWIDTH=1124269,CODECS="hvc1.2.4.L123.B0,ac-3",RESOLUTION=640x360,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v12/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=744728,BANDWIDTH=771426,CODECS="hvc1.2.4.L123.B0,ac-3",RESOLUTION=480x270,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v11/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=537440,BANDWIDTH=563212,CODECS="hvc1.2.4.L123.B0,ac-3",RESOLUTION=416x234,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a2",SUBTITLES="sub1"
|
||||
v10/prog_index.m3u8
|
||||
|
||||
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1996813,BANDWIDTH=2194827,CODECS="hvc1.2.4.L123.B0,ec-3",RESOLUTION=960x540,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v14/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=6135662,BANDWIDTH=6694727,CODECS="hvc1.2.4.L123.B0,ec-3",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v18/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=4831572,BANDWIDTH=5458398,CODECS="hvc1.2.4.L123.B0,ec-3",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v17/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=3471811,BANDWIDTH=4110269,CODECS="hvc1.2.4.L123.B0,ec-3",RESOLUTION=1920x1080,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v16/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=2666432,BANDWIDTH=2795200,CODECS="hvc1.2.4.L123.B0,ec-3",RESOLUTION=1280x720,FRAME-RATE=60.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v15/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1169111,BANDWIDTH=1256754,CODECS="hvc1.2.4.L123.B0,ec-3",RESOLUTION=768x432,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v13/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=859838,BANDWIDTH=932269,CODECS="hvc1.2.4.L123.B0,ec-3",RESOLUTION=640x360,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v12/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=552728,BANDWIDTH=579426,CODECS="hvc1.2.4.L123.B0,ec-3",RESOLUTION=480x270,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v11/prog_index.m3u8
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=345440,BANDWIDTH=371212,CODECS="hvc1.2.4.L123.B0,ec-3",RESOLUTION=416x234,FRAME-RATE=30.000,CLOSED-CAPTIONS="cc",AUDIO="a3",SUBTITLES="sub1"
|
||||
v10/prog_index.m3u8
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-VERSION:7
|
||||
#EXT-X-TARGETDURATION:2
|
||||
#EXT-X-SERVER-CONTROL:CAN-BLOCK-RELOAD=YES,PART-HOLD-BACK=2.171
|
||||
#EXT-X-PART-INF:PART-TARGET=1.034
|
||||
#EXT-X-MAP:URI="https://chunk-gcp-us-east1-vop1.fastly.mux.com/v1/chunk/qgC2PzuWbZKlPMYq76Ou02pdqXx00ohqZa7q9iXse2UvJdBXkgAkWF1jOw2GA02W7dFr8NA01xeI7NsC9nFYL8cbM1jngZy39vkNmyH7azaHbXM/18446744073709551615.m4s?skid=default&signature=NjlhMDE5YTBfZTkxMzAwNTZiOTczOTI3NTgwOThlNDU4NzA0ZTc5NjlkMmI4MjYyZWVjN2Q5Yjk0OTVlZTQxNTRlZTM0NzU3OA==&zone=0"
|
||||
#EXT-X-MEDIA-SEQUENCE:13767
|
||||
#EXT-X-PROGRAM-DATE-TIME:2026-02-19T10:04:50.593+00:00
|
||||
#EXTINF:2,
|
||||
https://chunk-gcp-us-east1-vop1.fastly.mux.com/v1/chunk/qgC2PzuWbZKlPMYq76Ou02pdqXx00ohqZa7q9iXse2UvJdBXkgAkWF1jOw2GA02W7dFr8NA01xeI7NsC9nFYL8cbM1jngZy39vkNmyH7azaHbXM/13767.m4s?skid=default&signature=NjlhMDE5YTBfNjk5YzgwNTRlMDg3NGZkYjdjMzYzMWUzMDc1ZjdlMmFmOGVhNzY5NDk4MmFhOTEwNWQ3ZjBlMDM2ZjIyY2RmNA==&zone=0
|
||||
#EXT-X-PROGRAM-DATE-TIME:2026-02-19T10:04:52.593+00:00
|
||||
#EXTINF:2,
|
||||
https://chunk-gcp-us-east1-vop1.fastly.mux.com/v1/chunk/qgC2PzuWbZKlPMYq76Ou02pdqXx00ohqZa7q9iXse2UvJdBXkgAkWF1jOw2GA02W7dFr8NA01xeI7NsC9nFYL8cbM1jngZy39vkNmyH7azaHbXM/13768.m4s?skid=default&signature=NjlhMDE5YTBfZmIzOTE1OTYwNTdkZjFhYzA0ZDgxNjZkMjI4N2QyZmM4ZDQ5YjQyN2QwMzIzNGE5MmZjODJkNDM4ZjA4YWRlZA==&zone=0
|
||||
#EXT-X-PROGRAM-DATE-TIME:2026-02-19T10:04:54.593+00:00
|
||||
#EXTINF:2,
|
||||
https://chunk-gcp-us-east1-vop1.fastly.mux.com/v1/chunk/qgC2PzuWbZKlPMYq76Ou02pdqXx00ohqZa7q9iXse2UvJdBXkgAkWF1jOw2GA02W7dFr8NA01xeI7NsC9nFYL8cbM1jngZy39vkNmyH7azaHbXM/13769.m4s?skid=default&signature=NjlhMDE5YTBfNTU1ZDNlODkzZTYwYTcxZGM5ZjJlMzJhMGQ5YWI4MTMzZGI0YzdiYjRmZjQ5MTFkYzM1YWE4ZTFkYWQzM2NmNQ==&zone=0
|
||||
#EXT-X-PROGRAM-DATE-TIME:2026-02-19T10:04:56.593+00:00
|
||||
#EXTINF:2,
|
||||
https://chunk-gcp-us-east1-vop1.fastly.mux.com/v1/chunk/qgC2PzuWbZKlPMYq76Ou02pdqXx00ohqZa7q9iXse2UvJdBXkgAkWF1jOw2GA02W7dFr8NA01xeI7NsC9nFYL8cbM1jngZy39vkNmyH7azaHbXM/13770.m4s?skid=default&signature=NjlhMDE5YTBfZTQxYTZjYWMzMzc5ZjcxZWUwZmY0M2FmNWQ4ZDcxNjVjOGJmYTY0M2RjOTdiMDExMDhjNTQ4M2QzMDA0ZWQ0Yw==&zone=0
|
||||
#EXT-X-PROGRAM-DATE-TIME:2026-02-19T10:04:58.593+00:00
|
||||
#EXTINF:2,
|
||||
https://chunk-gcp-us-east1-vop1.fastly.mux.com/v1/chunk/qgC2PzuWbZKlPMYq76Ou02pdqXx00ohqZa7q9iXse2UvJdBXkgAkWF1jOw2GA02W7dFr8NA01xeI7NsC9nFYL8cbM1jngZy39vkNmyH7azaHbXM/13771.m4s?skid=default&signature=NjlhMDE5YTBfODdkYmZiYmI3NDZjMzdmNmNkMDhjNjQzMjA5YjQ3YTI3NzYwNmVlY2JmNjYxZDEzMGM2ZWY4ZWZkMWExODdhNw==&zone=0
|
||||
#EXT-X-PROGRAM-DATE-TIME:2026-02-19T10:05:00.593+00:00
|
||||
#EXTINF:2,
|
||||
https://chunk-gcp-us-east1-vop1.fastly.mux.com/v1/chunk/qgC2PzuWbZKlPMYq76Ou02pdqXx00ohqZa7q9iXse2UvJdBXkgAkWF1jOw2GA02W7dFr8NA01xeI7NsC9nFYL8cbM1jngZy39vkNmyH7azaHbXM/13772.m4s?skid=default&signature=NjlhMDE5YTBfOTFjOTU5YWE4NzJlZmYyOTkyNzI5NjhiNDdiMzBhYmEwZjYzZjU1ZTFlYzM4MjhkZDIwZjhhZWFjMzRkOGVmYg==&zone=0
|
||||
#EXT-X-PROGRAM-DATE-TIME:2026-02-19T10:05:02.593+00:00
|
||||
#EXTINF:2,
|
||||
https://chunk-gcp-us-east1-vop1.fastly.mux.com/v1/chunk/qgC2PzuWbZKlPMYq76Ou02pdqXx00ohqZa7q9iXse2UvJdBXkgAkWF1jOw2GA02W7dFr8NA01xeI7NsC9nFYL8cbM1jngZy39vkNmyH7azaHbXM/13773.m4s?skid=default&signature=NjlhMDE5YTBfMTQ2NzA2NjY2OGFlNzUyZjZiZTllNDhjMWMzZjQxMDcwNWMxY2U0MWU5NzFjZDgwM2VlMzlmMjRmY2U0ZTMxYg==&zone=0
|
||||
#EXT-X-PROGRAM-DATE-TIME:2026-02-19T10:05:04.593+00:00
|
||||
#EXT-X-PART:DURATION=1,URI="https://chunk-gcp-us-east1-vop1.fastly.mux.com/v1/chunk/qgC2PzuWbZKlPMYq76Ou02pdqXx00ohqZa7q9iXse2UvJdBXkgAkWF1jOw2GA02W7dFr8NA01xeI7NsC9nFYL8cbM1jngZy39vkNmyH7azaHbXM/13774.0.m4s?skid=default&signature=NjlhMDE5YTBfMTFhZmNjNGJlODk1NzM3NGQ1NmU2ZmEyMzU0OTAwNTdkMDVhOWE4Yjg5ZDMyYmViZmNhNjU1MmI1ZjNlNjhlMQ==&zone=0",INDEPENDENT=YES
|
||||
#EXT-X-PART:DURATION=1,URI="https://chunk-gcp-us-east1-vop1.fastly.mux.com/v1/chunk/qgC2PzuWbZKlPMYq76Ou02pdqXx00ohqZa7q9iXse2UvJdBXkgAkWF1jOw2GA02W7dFr8NA01xeI7NsC9nFYL8cbM1jngZy39vkNmyH7azaHbXM/13774.1.m4s?skid=default&signature=NjlhMDE5YTBfMzNjMzc0ZjgwNGQ1MTI5MzE3OTc1YjNmM2FjNzE2Y2U5ZDU3YjIzNWIyMDQ2NzAxNTVkNzRjMGMwMmE0YmVlOQ==&zone=0"
|
||||
#EXTINF:2,
|
||||
https://chunk-gcp-us-east1-vop1.fastly.mux.com/v1/chunk/qgC2PzuWbZKlPMYq76Ou02pdqXx00ohqZa7q9iXse2UvJdBXkgAkWF1jOw2GA02W7dFr8NA01xeI7NsC9nFYL8cbM1jngZy39vkNmyH7azaHbXM/13774.m4s?skid=default&signature=NjlhMDE5YTBfMzZlNDBhYjQ0YTlmNGNiODZkNTRiYmYwMzk4ZGUxYzVmN2M5Mzk2YTA3MTA2MDQ1NmJkNzM3Mzk3YTA0YjVlNA==&zone=0
|
||||
#EXT-X-PROGRAM-DATE-TIME:2026-02-19T10:05:06.593+00:00
|
||||
#EXT-X-PART:DURATION=1,URI="https://chunk-gcp-us-east1-vop1.fastly.mux.com/v1/chunk/qgC2PzuWbZKlPMYq76Ou02pdqXx00ohqZa7q9iXse2UvJdBXkgAkWF1jOw2GA02W7dFr8NA01xeI7NsC9nFYL8cbM1jngZy39vkNmyH7azaHbXM/13775.0.m4s?skid=default&signature=NjlhMDE5YTBfMjNjMGVjMzdkYzA5MjlmOWU2Y2JjMTQ0NjdiYmFmYTgyMTcwYzU1ZDM5ZmJhMjMwNzFjNGExNmM4NTU4Y2ZjZg==&zone=0",INDEPENDENT=YES
|
||||
#EXT-X-PART:DURATION=1,URI="https://chunk-gcp-us-east1-vop1.fastly.mux.com/v1/chunk/qgC2PzuWbZKlPMYq76Ou02pdqXx00ohqZa7q9iXse2UvJdBXkgAkWF1jOw2GA02W7dFr8NA01xeI7NsC9nFYL8cbM1jngZy39vkNmyH7azaHbXM/13775.1.m4s?skid=default&signature=NjlhMDE5YTBfZTkyYWI2MDA4NjAyNjI3OGM2NmM2YjNmOTdhMzcwOWNlMTEwZmU0ZmM1OGYzN2E1YmFkZTQzYTQwMWQyYTRiMg==&zone=0"
|
||||
#EXTINF:2,
|
||||
https://chunk-gcp-us-east1-vop1.fastly.mux.com/v1/chunk/qgC2PzuWbZKlPMYq76Ou02pdqXx00ohqZa7q9iXse2UvJdBXkgAkWF1jOw2GA02W7dFr8NA01xeI7NsC9nFYL8cbM1jngZy39vkNmyH7azaHbXM/13775.m4s?skid=default&signature=NjlhMDE5YTBfZTI1NjVjZTgzNzNjOGFkYjdiODEzNzY5N2ZiNWY3NjZlYTg0M2ViZDc3ZDdhZTExMjk5MjI4ZTI5YjllNGVlZA==&zone=0
|
||||
#EXT-X-PROGRAM-DATE-TIME:2026-02-19T10:05:08.593+00:00
|
||||
#EXT-X-PART:DURATION=1,URI="https://chunk-gcp-us-east1-vop1.fastly.mux.com/v1/chunk/qgC2PzuWbZKlPMYq76Ou02pdqXx00ohqZa7q9iXse2UvJdBXkgAkWF1jOw2GA02W7dFr8NA01xeI7NsC9nFYL8cbM1jngZy39vkNmyH7azaHbXM/13776.0.m4s?skid=default&signature=NjlhMDE5YTBfMjEwNjMyZGVlYzY4MmZlNDA2ZDhlNmM2Yzg0ZTg3YThlMDkyMDE1YzhmNTdlMDg1MjU0NWM3ZDdlMmI1OTNlOA==&zone=0",INDEPENDENT=YES
|
||||
#EXT-X-PART:DURATION=1,URI="https://chunk-gcp-us-east1-vop1.fastly.mux.com/v1/chunk/qgC2PzuWbZKlPMYq76Ou02pdqXx00ohqZa7q9iXse2UvJdBXkgAkWF1jOw2GA02W7dFr8NA01xeI7NsC9nFYL8cbM1jngZy39vkNmyH7azaHbXM/13776.1.m4s?skid=default&signature=NjlhMDE5YTBfODQzYzFhZThlMzViMGUwY2ZmNzAzMDViODA5NmMwZDkyMDc2MzBmOGI4YzJmY2U4ZjgwYzQ3ZDRkNTkxYzMyOQ==&zone=0"
|
||||
#EXTINF:2,
|
||||
https://chunk-gcp-us-east1-vop1.fastly.mux.com/v1/chunk/qgC2PzuWbZKlPMYq76Ou02pdqXx00ohqZa7q9iXse2UvJdBXkgAkWF1jOw2GA02W7dFr8NA01xeI7NsC9nFYL8cbM1jngZy39vkNmyH7azaHbXM/13776.m4s?skid=default&signature=NjlhMDE5YTBfODFjZDNlMjEyOTRiNzg5ODJhNzYyN2Y4YTA0MWM0NjFkOTliMWZlNjUwNGI0ZWIwMjc5YjRiNzk3ODdjMzgxMg==&zone=0
|
||||
#EXT-X-PART:DURATION=1,URI="https://chunk-gcp-us-east1-vop1.fastly.mux.com/v1/chunk/qgC2PzuWbZKlPMYq76Ou02pdqXx00ohqZa7q9iXse2UvJdBXkgAkWF1jOw2GA02W7dFr8NA01xeI7NsC9nFYL8cbM1jngZy39vkNmyH7azaHbXM/13777.0.m4s?skid=default&signature=NjlhMDE5YTBfYmNiOWJiZjIxMGUwZWI2MDM3ZGRiMzFmNTFiZGY0MWZiYjQ2NDAzZmZmZWM4N2E2MmNiOWJmNzMzNTQ4Yzk3Yw==&zone=0",INDEPENDENT=YES
|
||||
#EXT-X-PRELOAD-HINT:TYPE=PART,URI="https://chunk-gcp-us-east1-vop1.fastly.mux.com/v1/chunk/qgC2PzuWbZKlPMYq76Ou02pdqXx00ohqZa7q9iXse2UvJdBXkgAkWF1jOw2GA02W7dFr8NA01xeI7NsC9nFYL8cbM1jngZy39vkNmyH7azaHbXM/13777.1.m4s?skid=default&signature=NjlhMDE5YTBfZWE1ZjlkNzQ0NzFmYWI4YzViZmFjNjFmZjJlYmI1MGQ2OWVhNzgzOTUyYjIyNGJkY2FhNDEzNGFkZGU0MTA1NA==&zone=0"
|
||||
#EXT-X-RENDITION-REPORT:URI="/exHWYv6RMb5Ebv02Qg1jgY8nm45rh4g02M7J4rgKQOTrAW2j5eO1a9p7yeI7r252brzExe4NqZMhacJ9WvVLbQPXEMjj3pOB6cQH01v7TmrgEg/rendition.m3u8?cdn=fastly&expires=1772100000&live=1&skid=default&signature=NjlhMDE5YTBfYTcyNDI4NDIwZjlkNGQ4NTJjZjhhNmMxYzczZWViNzE1ZmM4NzhmNDMxNTU0ZTE5MzVlZDJkZDgwYmYyMTg5NA=="
|
||||
#EXT-X-RENDITION-REPORT:URI="/402gWK4kVgmdBJzX1Pc00DEFywkLj0139RYuIZtepGttudbFdMzlikw7E1FGY5vNhmuAkV01xkRItrBcIQTygNRYbwxYHRZ00feMU/rendition.m3u8?cdn=fastly&expires=1772100000&live=1&skid=default&signature=NjlhMDE5YTBfNjgzODA5NTJmODY1MDkxZmU4MTgwNmZhZjM4MTgwMDUxMzliMzc5OWY4YzlhMDBiN2MwYWZmNjlkM2M3NTY0MQ=="
|
||||
#EXT-X-RENDITION-REPORT:URI="/5uM3MOkfoRnOqNUfk1JVRfFfBcvoVhtOnJxF01fIhPRxviPL6ToqgB38Rqm3IjIXzWs00HpC4i9I5z022NcRgVVieDmvqlBWj00mBZClXyn84Dw/rendition.m3u8?cdn=fastly&expires=1772100000&live=1&skid=default&signature=NjlhMDE5YTBfMDY2M2Q1YzdlZGM4ODM1MGUxYzU0NTkxNGNmMDE0MWUxZTNlNzg4M2ZiM2YxNWQ2ZDM0ODQ5OTlkNDE2MTdiZQ=="
|
||||
#EXT-X-RENDITION-REPORT:URI="/dfjhdoc1n4ZvHXGPL4mX01srgXbDUDV9sGPnyUvCfiy5jObUqQxwWCBM6n78osvlRPIONlmcD00Fea100au6lg6NrsFZcoOL9K2/rendition.m3u8?cdn=fastly&expires=1772100000&live=1&skid=default&signature=NjlhMDE5YTBfNDc1NDk0MzIzNzJhOTgzYjJhYzQ3ZWFlYzcwNWIxZjM1M2I1NjZhNWFiNGMwNjUyYmY3NDE2MTQ5YjkzMjY3OA=="
|
||||
#EXT-X-RENDITION-REPORT:URI="/H01ZlTPGBC3UShrFGCoIvq4ZiYpIYCGKXZ0002Pw02cpsnKaQFDWALC7gQsyRXe95E84px2THVcoa7bRW4iMNCWjhg/rendition.m3u8?cdn=fastly&expires=1772100000&live=1&skid=default&signature=NjlhMDE5YTBfNWRmMDg5MDhkMjc4MDdhZDhiNzI3ZmU1ZmFiMzIzMTc1MDVhOWZiMTRkNTMxMDliMWM2YTBjMzQ5OWYwNTVlZg=="
|
||||
@@ -1,15 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-VERSION:7
|
||||
#EXT-X-INDEPENDENT-SEGMENTS
|
||||
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-hi-0",NAME="Default",CHANNELS="2",AUTOSELECT=YES,DEFAULT=YES,URI="https://manifest-gcp-us-east4-vop1.edgemv.mux.com/x02cwe8AnQdIrmeTtwxjV4CwAYmGv2Af0002ni01fu5201ZcMDOmmqlkm2XxrYBuq02qrACvqwi202NxAYgGYDrnkng1w/rendition.m3u8?cdn=fastly&expires=1772121600&live=1&skid=edgemv-default-1&signature=NjlhMDZlMDBfOWQ1NjY2NzFjOTg0Mjc1OTc4NTM5OTc5NWQ3YTFhNzM1NWNhZDJmOGE1NmJlNDUwYmRmNTg4YWUyNjAyODZkOA==&vsid=KkV1Lvb8OsQe6uONjPJcYxRSKkd7cev9LnmtlvUqEypaZpls4wIPLRzIAroJnP0000XtIWjzEq00oY"
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=2564100,AVERAGE-BANDWIDTH=2564100,CODECS="mp4a.40.2,avc1.640020",AUDIO="audio-hi-0",RESOLUTION=1280x720,CLOSED-CAPTIONS=NONE
|
||||
https://manifest-gcp-us-east4-vop1.edgemv.mux.com/Ajw5FEXHZ2kfb009Eynt01PGs01C014n6DOsbZu5bzX6mNzSWkx3uNURbdCEhvg1OlpjYxY2QIAO012mD1E007JaL029sdohSJ00JBzLwJ2bTvd4Kcw/rendition.m3u8?cdn=fastly&expires=1772121600&live=1&skid=edgemv-default-1&signature=NjlhMDZlMDBfMGIyMGUyMjIwM2ZhZTk3NjM1Yzc2NWFmYWI3Y2M1YWVmNzYyNzNlZWU5ZGE5ODRlMjZiMTZlZDJkY2Q4MDhhNQ==&vsid=KkV1Lvb8OsQe6uONjPJcYxRSKkd7cev9LnmtlvUqEypaZpls4wIPLRzIAroJnP0000XtIWjzEq00oY
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=1696200,AVERAGE-BANDWIDTH=1696200,CODECS="mp4a.40.2,avc1.640020",AUDIO="audio-hi-0",RESOLUTION=960x540,CLOSED-CAPTIONS=NONE
|
||||
https://manifest-gcp-us-east4-vop1.edgemv.mux.com/lfHuw00BszIttr55HYSItzrAuO5lCI1lXnlNd43Zf5rirXQIkMCfezeR01J01GH75aazTAI4kTQAgP2hRB500iXHnbYCOvsBlPtuJ5KCJ00Xg6u00/rendition.m3u8?cdn=fastly&expires=1772121600&live=1&skid=edgemv-default-1&signature=NjlhMDZlMDBfMmQ0ZDIwMjkxYmUxZGQ5ZjMyMDljOWFjZDJlZTIyZTU5ODA4MmU3NTEyZTc1NTZiMjNhZGIyNDgyZWM3N2RmNg==&vsid=KkV1Lvb8OsQe6uONjPJcYxRSKkd7cev9LnmtlvUqEypaZpls4wIPLRzIAroJnP0000XtIWjzEq00oY
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=4712400,AVERAGE-BANDWIDTH=4712400,CODECS="mp4a.40.2,avc1.64002a",AUDIO="audio-hi-0",RESOLUTION=1920x1080,CLOSED-CAPTIONS=NONE
|
||||
https://manifest-gcp-us-east4-vop1.edgemv.mux.com/xIb3vQ2JY02bdd9noWFI8CA4EEA38ttChhpg1601Vi8KPra1lHJVR1bRNKsqUFmjns8ICU00FQCdcQhY02wFYVlk00W6FZXni5PNC/rendition.m3u8?cdn=fastly&expires=1772121600&live=1&skid=edgemv-default-1&signature=NjlhMDZlMDBfMDVjODEyZGY1NjcxZjhmN2ZiYmU1MjE1ZTJlNjI4N2IwNmIxMDdmMGQ1ZDRlMTU5ZjQ2MWRlZjRkODQ2MWNhNw==&vsid=KkV1Lvb8OsQe6uONjPJcYxRSKkd7cev9LnmtlvUqEypaZpls4wIPLRzIAroJnP0000XtIWjzEq00oY
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=987800,AVERAGE-BANDWIDTH=987800,CODECS="mp4a.40.2,avc1.64001f",AUDIO="audio-hi-0",RESOLUTION=640x360,CLOSED-CAPTIONS=NONE
|
||||
https://manifest-gcp-us-east4-vop1.edgemv.mux.com/OAh8j7wI02wIZjlj11ITDTbFv02iLRViF024rFITqf00zna4mDKj2L268Se5rlkLdXC83RvWMsVLn9KkpIDy0055ZdGzfU005CfyXN7Q85QO00N2ug/rendition.m3u8?cdn=fastly&expires=1772121600&live=1&skid=edgemv-default-1&signature=NjlhMDZlMDBfNTA4MWQ2NWQzMTc0NDU4OGUwNGQ2ZjdkNmQzNTIxZTU3NjcyZTg1M2VkMDFlNDU3OTA0M2E1ZDBjMzliZjdlMQ==&vsid=KkV1Lvb8OsQe6uONjPJcYxRSKkd7cev9LnmtlvUqEypaZpls4wIPLRzIAroJnP0000XtIWjzEq00oY
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=700700,AVERAGE-BANDWIDTH=700700,CODECS="mp4a.40.2,avc1.64001e",AUDIO="audio-hi-0",RESOLUTION=480x270,CLOSED-CAPTIONS=NONE
|
||||
https://manifest-gcp-us-east4-vop1.edgemv.mux.com/YnwKeA9pBuwssrpLK6AMhUEbtDrlsLeBf2JVqgAhkQqcCWxP9sd1OOq01fcJEXelm85KMt01EdDhOlxdPZKHgUeubMY00T02FZ5L/rendition.m3u8?cdn=fastly&expires=1772121600&live=1&skid=edgemv-default-1&signature=NjlhMDZlMDBfYjVhNTNhYWEyOThiNWQ3YTBjNzY2MmUzOGVlYjMyOGNiZGFlMWEwYjEzMmFmMDQ5ZWU3ODBjYjkzZWFiOTA3YQ==&vsid=KkV1Lvb8OsQe6uONjPJcYxRSKkd7cev9LnmtlvUqEypaZpls4wIPLRzIAroJnP0000XtIWjzEq00oY
|
||||
@@ -1,17 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-MEDIA:TYPE=SUBTITLES,URI="text-540/playlist.m3u8",GROUP-ID="text-540",NAME="Text"
|
||||
#EXT-X-MEDIA:TYPE=SUBTITLES,URI="text-720/playlist.m3u8",GROUP-ID="text-720",NAME="Text"
|
||||
#EXT-X-MEDIA:TYPE=SUBTITLES,URI="text-1080/playlist.m3u8",GROUP-ID="text-1080",NAME="Text"
|
||||
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,URI="audio-540/playlist.m3u8",GROUP-ID="audio-540",LANGUAGE="en",NAME="ENGLISH",CHANNELS="2"
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,URI="audio-720/playlist.m3u8",GROUP-ID="audio-720",LANGUAGE="en",NAME="ENGLISH",CHANNELS="2"
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,URI="audio-1080/playlist.m3u8",GROUP-ID="audio-1080",LANGUAGE="en",NAME="ENGLISH",CHANNELS="2"
|
||||
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=240648,AVERAGE-BANDWIDTH=229254,CODECS="avc1.64001f,mp4a.40.2",RESOLUTION=960x540,AUDIO="audio-540",SUBTITLES="text-540"
|
||||
video-540/playlist.m3u8
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=273583,AVERAGE-BANDWIDTH=261082,CODECS="avc1.64001f,mp4a.40.2",RESOLUTION=1280x720,AUDIO="audio-720",SUBTITLES="text-720"
|
||||
video-720/playlist.m3u8
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=446911,AVERAGE-BANDWIDTH=416641,CODECS="avc1.640028,mp4a.40.2",RESOLUTION=1920x1080,AUDIO="audio-1080",SUBTITLES="text-1080"
|
||||
video-1080/playlist.m3u8
|
||||
|
||||
https://mtoczko.github.io/hls-test-streams/test-group/video-540/playlist.m3u8
|
||||
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
@@ -1,113 +0,0 @@
|
||||
#EXTM3U
|
||||
|
||||
#EXT-X-VERSION:5
|
||||
#EXT-X-MEDIA-SEQUENCE:0
|
||||
#EXT-X-TARGETDURATION:4
|
||||
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_0.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_1.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_2.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_3.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_4.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_5.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_6.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_7.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_8.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_9.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_10.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_11.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_12.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_13.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_14.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_15.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_16.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_17.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_18.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_19.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_20.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_21.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_22.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_23.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_24.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_25.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_26.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_27.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_28.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_29.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_30.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_31.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_32.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_33.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_34.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_35.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_36.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_37.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_38.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_39.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_40.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_41.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_42.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_43.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_44.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_45.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_46.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_47.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_48.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_49.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_50.ts
|
||||
#EXTINF:4.0,
|
||||
video/720p/ts/segment_51.ts
|
||||
#EXTINF:2.280000000000001,
|
||||
video/720p/ts/segment_52.ts
|
||||
#EXT-X-ENDLIST
|
||||
@@ -1,34 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-VERSION:3
|
||||
|
||||
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="Chinese",FORCED=NO,AUTOSELECT=YES,URI="media/chinese/ed.m3u8",LANGUAGE="zh"
|
||||
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="French",FORCED=NO,AUTOSELECT=YES,URI="media/french/ed.m3u8",LANGUAGE="fr"
|
||||
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",LANGUAGE="en",NAME="English",DEFAULT=YES,AUTOSELECT=YES,URI="media/b160000-english.m3u8"
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",LANGUAGE="sp",NAME="Spanish",DEFAULT=NO,AUTOSELECT=YES,URI="media/b160000-spanish.m3u8"
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",LANGUAGE="en",NAME="Commentary (eng)",DEFAULT=NO,AUTOSELECT=NO,URI="media/b160000-commentary.m3u8"
|
||||
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=2962000,NAME="Main",CODECS="avc1.66.30",RESOLUTION=1280x720,AUDIO="aac",SUBTITLES="subs"
|
||||
media/b2962000-video.m3u8
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=1427000,NAME="Main",CODECS="avc1.66.30",RESOLUTION=768x432,AUDIO="aac",SUBTITLES="subs"
|
||||
media/b1427000-video.m3u8
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=688000,NAME="Main",CODECS="avc1.66.30",RESOLUTION=448x252,AUDIO="aac",SUBTITLES="subs"
|
||||
media/b688000-video.m3u8
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=331000,NAME="Main",CODECS="avc1.66.30",RESOLUTION=284x160,AUDIO="aac",SUBTITLES="subs"
|
||||
media/b331000-video.m3u8
|
||||
|
||||
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs_b",NAME="Chinese",FORCED=NO,AUTOSELECT=YES,URI="media_b/chinese/ed.m3u8",LANGUAGE="zh"
|
||||
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs_b",NAME="French",FORCED=NO,AUTOSELECT=YES,URI="media_b/french/ed.m3u8",LANGUAGE="fr"
|
||||
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac_b",LANGUAGE="en",NAME="English",DEFAULT=YES,AUTOSELECT=YES,URI="media_b/b160000-english.m3u8"
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac_b",LANGUAGE="sp",NAME="Spanish",DEFAULT=NO,AUTOSELECT=YES,URI="media_b/b160000-spanish.m3u8"
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac_b",LANGUAGE="en",NAME="Commentary (eng)",DEFAULT=NO,AUTOSELECT=NO,URI="media_b/b160000-commentary.m3u8"
|
||||
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=2962000,NAME="Main",CODECS="avc1.66.30",RESOLUTION=1280x720,AUDIO="aac_b",SUBTITLES="subs_b"
|
||||
media_b/b2962000-video.m3u8
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=1427000,NAME="Main",CODECS="avc1.66.30",RESOLUTION=768x432,AUDIO="aac_b",SUBTITLES="subs_b"
|
||||
media_b/b1427000-video.m3u8
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=688000,NAME="Main",CODECS="avc1.66.30",RESOLUTION=448x252,AUDIO="aac_b",SUBTITLES="subs_b"
|
||||
media_b/b688000-video.m3u8
|
||||
#EXT-X-STREAM-INF:BANDWIDTH=331000,NAME="Main",CODECS="avc1.66.30",RESOLUTION=284x160,AUDIO="aac_b",SUBTITLES="subs_b"
|
||||
media_b/b331000-video.m3u8
|
||||
@@ -1,133 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-VERSION:3
|
||||
#EXT-X-PLAYLIST-TYPE:VOD
|
||||
#EXT-X-TARGETDURATION:11
|
||||
#EXTINF:10.000,
|
||||
url_846/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_847/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_848/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_849/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_850/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_851/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_852/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:9.967,
|
||||
url_853/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.033,
|
||||
url_854/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_855/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_856/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_857/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_858/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_859/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_860/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_861/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_862/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_863/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_864/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_865/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_866/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_867/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_868/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_869/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_870/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_871/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_872/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_873/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_874/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:9.967,
|
||||
url_875/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.033,
|
||||
url_876/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_877/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_878/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_879/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_880/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_881/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_882/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_883/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_884/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_885/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_886/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_887/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_888/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:9.967,
|
||||
url_889/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.033,
|
||||
url_890/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_891/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_892/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_893/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_894/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_895/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_896/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_897/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_898/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_899/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_900/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_901/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_902/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_903/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_904/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_905/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_906/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_907/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:10.000,
|
||||
url_908/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXTINF:4.600,
|
||||
url_909/193039199_mp4_h264_aac_hq_7.ts
|
||||
#EXT-X-ENDLIST
|
||||
@@ -1,13 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=187738,RESOLUTION=416x234
|
||||
stream_110k_48k_416x234.m3u8
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=274228,RESOLUTION=416x234
|
||||
stream_200k_48k_416x234.m3u8
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=466428,RESOLUTION=416x234
|
||||
stream_400k_48k_416x234.m3u8
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=658628,RESOLUTION=640x360
|
||||
stream_600k_48k_640x360.m3u8
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=850828,RESOLUTION=640x360
|
||||
stream_800k_48k_640x360.m3u8
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1043028,RESOLUTION=640x360
|
||||
stream_1000k_48k_640x360.m3u8
|
||||
@@ -1,78 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-YOSPACE-ANALYTICS-URL:"https://csm-e-cebteurxaws416-2hjvnjz85og7.tls1.yospace.com/csm/analytics;jsessionid=E97CB20FD3BCE93F89ADDB12E8C82895.csm-e-cebteurxaws416-2hjvnjz85og7.tls1.yospace.com"
|
||||
#EXT-X-TARGETDURATION:10
|
||||
#EXT-X-VERSION:3
|
||||
#EXT-X-PLAYLIST-TYPE:EVENT
|
||||
#EXT-X-KEY:METHOD=AES-128,URI="key1.json?f=1041&s=0&p=1822767&m=1506045858",IV=0x000000000000000000000000001BD02F
|
||||
#EXTINF:10,
|
||||
1041_6_1822767.ts?m=1506045858
|
||||
#EXT-X-KEY:METHOD=AES-128,URI="key2.json?f=1041&s=0&p=1822768&m=1506045858",IV=0x000000000000000000000000001BD030
|
||||
#EXTINF:10,
|
||||
1041_6_1822768.ts?m=1506045858
|
||||
#EXT-X-KEY:METHOD=AES-128,URI="key3.json?f=1041&s=0&p=1822769&m=1506045858",IV=0x000000000000000000000000001BD031
|
||||
#EXTINF:10,
|
||||
1041_6_1822769.ts?m=1506045858
|
||||
#EXT-X-KEY:METHOD=AES-128,URI="key4.json?f=1041&s=0&p=1822770&m=1506045858",IV=0x000000000000000000000000001BD032
|
||||
#EXTINF:6.28,
|
||||
1041_6_1822770.ts?m=1506045858
|
||||
#EXT-X-DISCONTINUITY
|
||||
#EXT-X-KEY:METHOD=NONE
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-1.ts
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-2.ts
|
||||
#EXTINF:7.2,
|
||||
u-6400-m-720x408-1628-a-96-1-3.ts
|
||||
#EXTINF:2.8,
|
||||
u-6400-m-720x408-1628-a-96-1-4.ts
|
||||
#EXT-X-DISCONTINUITY
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-1-1.ts
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-2-1.ts
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-3-1.ts
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-4-1.ts
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-5.ts
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-6.ts
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-7.ts
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-8.ts
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-9.ts
|
||||
#EXTINF:7.56,
|
||||
u-6400-m-720x408-1628-a-96-1-10.ts
|
||||
#EXTINF:2.44,
|
||||
u-6400-m-720x408-1628-a-96-1-11.ts
|
||||
#EXT-X-DISCONTINUITY
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-1-2.ts
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-2.ts
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-3-2.ts
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-4-2.ts
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-5-1.ts
|
||||
#EXT-X-DISCONTINUITY
|
||||
#EXT-X-KEY:METHOD=AES-128,URI="key5.json?f=1041&s=0&p=1822791&m=1506045858",IV=0x000000000000000000000000001BD047
|
||||
#EXTINF:9.72,
|
||||
1041_6_1822791.ts?m=1506045858
|
||||
#EXT-X-KEY:METHOD=AES-128,URI="key6.json?f=1041&s=0&p=1822792&m=1506045858",IV=0x000000000000000000000000001BD048
|
||||
#EXTINF:10,
|
||||
1041_6_1822792.ts?m=1506045858
|
||||
#EXT-X-KEY:METHOD=AES-128,URI="key7.json?f=1041&s=0&p=1822793&m=1506045858",IV=0x000000000000000000000000001BD049
|
||||
#EXTINF:10,
|
||||
1041_6_1822793.ts?m=1506045858
|
||||
#EXT-X-KEY:METHOD=AES-128,URI="key8.json?f=1041&s=0&p=1822794&m=1506045858",IV=0x000000000000000000000000001BD04A
|
||||
#EXTINF:10,
|
||||
1041_6_1822794.ts?m=1506045858
|
||||
#EXT-X-KEY:METHOD=AES-128,URI="key9.json?f=1041&s=0&p=1822795&m=1506045858",IV=0x000000000000000000000000001BD04B
|
||||
#EXTINF:10,
|
||||
1041_6_1822795.ts?m=1506045858
|
||||
#EXT-X-ENDLIST
|
||||
@@ -1,78 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-YOSPACE-ANALYTICS-URL:"https://csm-e-cebteurxaws416-2hjvnjz85og7.tls1.yospace.com/csm/analytics;jsessionid=E97CB20FD3BCE93F89ADDB12E8C82895.csm-e-cebteurxaws416-2hjvnjz85og7.tls1.yospace.com"
|
||||
#EXT-X-TARGETDURATION:10
|
||||
#EXT-X-VERSION:3
|
||||
#EXT-X-PLAYLIST-TYPE:EVENT
|
||||
#EXT-X-KEY:METHOD=AES-128,URI="key1.json?f=1041&s=0&p=1822767&m=1506045858",IV=0x000000000000000000000000001BD02F
|
||||
#EXTINF:10,
|
||||
1041_6_1822767.ts?m=1506045858
|
||||
#EXT-X-KEY:METHOD=AES-128,URI="key2.json?f=1041&s=0&p=1822768&m=1506045858",IV=0x000000000000000000000000001BD030
|
||||
#EXTINF:10,
|
||||
1041_6_1822768.ts?m=1506045858
|
||||
#EXT-X-KEY:METHOD=AES-128,URI="key3.json?f=1041&s=0&p=1822769&m=1506045858",IV=0x000000000000000000000000001BD031
|
||||
#EXTINF:10,
|
||||
1041_6_1822769.ts?m=1506045858
|
||||
#EXT-X-KEY:METHOD=AES-128,URI="key4.json?f=1041&s=0&p=1822770&m=1506045858",IV=0x000000000000000000000000001BD032
|
||||
#EXTINF:6.28,
|
||||
1041_6_1822770.ts?m=1506045858
|
||||
#EXT-X-DISCONTINUITY
|
||||
#EXT-X-KEY:METHOD=NONE
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-1.ts
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-2.ts
|
||||
#EXTINF:7.2,
|
||||
u-6400-m-720x408-1628-a-96-1-3.ts
|
||||
#EXTINF:2.8,
|
||||
u-6400-m-720x408-1628-a-96-1-4.ts
|
||||
#EXT-X-DISCONTINUITY
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-1-1.ts
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-2-1.ts
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-3-1.ts
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-4-1.ts
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-5.ts
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-6.ts
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-7.ts
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-8.ts
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-9.ts
|
||||
#EXTINF:7.56,
|
||||
u-6400-m-720x408-1628-a-96-1-10.ts
|
||||
#EXTINF:2.44,
|
||||
u-6400-m-720x408-1628-a-96-1-11.ts
|
||||
#EXT-X-DISCONTINUITY
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-1-2.ts
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-2.ts
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-3-2.ts
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-4-2.ts
|
||||
#EXTINF:10,
|
||||
u-6400-m-720x408-1628-a-96-1-5-1.ts
|
||||
#EXT-X-DISCONTINUITY
|
||||
#EXT-X-KEY:METHOD=AES-128,URI="key5.json?f=1041&s=0&p=1822791&m=1506045858",IV=0x000000000000000000000000001BD047
|
||||
#EXTINF:9.72,
|
||||
1041_6_1822791.ts?m=1506045858
|
||||
#EXT-X-KEY:METHOD=AES-128,URI="key6.json?f=1041&s=0&p=1822792&m=1506045858",IV=0x000000000000000000000000001BD048
|
||||
#EXTINF:10,
|
||||
1041_6_1822792.ts?m=1506045858
|
||||
#EXT-X-KEY:METHOD=AES-128,URI="key7.json?f=1041&s=0&p=1822793&m=1506045858",IV=0x000000000000000000000000001BD049
|
||||
#EXTINF:10,
|
||||
1041_6_1822793.ts?m=1506045858
|
||||
#EXT-X-KEY:METHOD=AES-128,URI="key8.json?f=1041&s=0&p=1822794&m=1506045858",IV=0x000000000000000000000000001BD04A
|
||||
#EXTINF:10,
|
||||
1041_6_1822794.ts?m=1506045858
|
||||
#EXT-X-KEY:METHOD=AES-128,URI="key9.json?f=1041&s=0&p=1822795&m=1506045858",IV=0x000000000000000000000000001BD04B
|
||||
#EXTINF:10,
|
||||
1041_6_1822795.ts?m=1506045858
|
||||
#EXT-X-ENDLIST
|
||||
@@ -1,78 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-VERSION:4
|
||||
#EXT-X-ALLOW-CACHE:YES
|
||||
#EXT-X-TARGETDURATION:4
|
||||
#EXT-X-MEDIA-SEQUENCE:0
|
||||
#EXTINF:2.000000,
|
||||
#EXT-X-BYTERANGE:501584@0
|
||||
cisq0gim60007xzvi505emlxx.ts
|
||||
#EXTINF:3.560000,
|
||||
#EXT-X-BYTERANGE:1005424@501584
|
||||
cisq0gim60007xzvi505emlxx.ts
|
||||
#EXTINF:2.360000,
|
||||
#EXT-X-BYTERANGE:567196@1507008
|
||||
cisq0gim60007xzvi505emlxx.ts
|
||||
#EXTINF:2.000000,
|
||||
#EXT-X-BYTERANGE:423752@2074204
|
||||
cisq0gim60007xzvi505emlxx.ts
|
||||
#EXTINF:2.000000,
|
||||
#EXT-X-BYTERANGE:434844@2497956
|
||||
cisq0gim60007xzvi505emlxx.ts
|
||||
#EXTINF:0.480000,
|
||||
#EXT-X-BYTERANGE:128404@2932800
|
||||
cisq0gim60007xzvi505emlxx.ts
|
||||
#EXTINF:2.000000,
|
||||
#EXT-X-BYTERANGE:435408@3061204
|
||||
cisq0gim60007xzvi505emlxx.ts
|
||||
#EXTINF:2.000000,
|
||||
#EXT-X-BYTERANGE:488988@3496612
|
||||
cisq0gim60007xzvi505emlxx.ts
|
||||
#EXTINF:1.960000,
|
||||
#EXT-X-BYTERANGE:482784@3985600
|
||||
cisq0gim60007xzvi505emlxx.ts
|
||||
#EXTINF:2.000000,
|
||||
#EXT-X-BYTERANGE:350620@4468384
|
||||
cisq0gim60007xzvi505emlxx.ts
|
||||
#EXTINF:2.000000,
|
||||
#EXT-X-BYTERANGE:328812@4819004
|
||||
cisq0gim60007xzvi505emlxx.ts
|
||||
#EXTINF:2.920000,
|
||||
#EXT-X-BYTERANGE:677364@5147816
|
||||
cisq0gim60007xzvi505emlxx.ts
|
||||
#EXTINF:2.000000,
|
||||
#EXT-X-BYTERANGE:466804@5825180
|
||||
cisq0gim60007xzvi505emlxx.ts
|
||||
#EXTINF:2.000000,
|
||||
#EXT-X-BYTERANGE:532980@6291984
|
||||
cisq0gim60007xzvi505emlxx.ts
|
||||
#EXTINF:2.000000,
|
||||
#EXT-X-BYTERANGE:524144@6824964
|
||||
cisq0gim60007xzvi505emlxx.ts
|
||||
#EXTINF:2.000000,
|
||||
#EXT-X-BYTERANGE:517564@7349108
|
||||
cisq0gim60007xzvi505emlxx.ts
|
||||
#EXTINF:2.520000,
|
||||
#EXT-X-BYTERANGE:647472@7866672
|
||||
cisq0gim60007xzvi505emlxx.ts
|
||||
#EXTINF:2.000000,
|
||||
#EXT-X-BYTERANGE:579228@8514144
|
||||
cisq0gim60007xzvi505emlxx.ts
|
||||
#EXTINF:0.600000,
|
||||
#EXT-X-BYTERANGE:177284@9093372
|
||||
cisq0gim60007xzvi505emlxx.ts
|
||||
#EXTINF:2.760000,
|
||||
#EXT-X-BYTERANGE:560052@9270656
|
||||
cisq0gim60007xzvi505emlxx.ts
|
||||
#EXTINF:2.000000,
|
||||
#EXT-X-BYTERANGE:395176@9830708
|
||||
cisq0gim60007xzvi505emlxx.ts
|
||||
#EXTINF:2.000000,
|
||||
#EXT-X-BYTERANGE:479024@10225884
|
||||
cisq0gim60007xzvi505emlxx.ts
|
||||
#EXTINF:2.000000,
|
||||
#EXT-X-BYTERANGE:481468@10704908
|
||||
cisq0gim60007xzvi505emlxx.ts
|
||||
#EXTINF:0.080000,
|
||||
#EXT-X-BYTERANGE:93812@11186376
|
||||
cisq0gim60007xzvi505emlxx.ts
|
||||
#EXT-X-ENDLIST
|
||||
@@ -1,43 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-MEDIA-SEQUENCE:1
|
||||
#EXT-X-TARGETDURATION:10
|
||||
#EXT-X-ALLOW-CACHE:YES
|
||||
#EXTINF:10,
|
||||
130130211307_1.ts
|
||||
#EXTINF:10,
|
||||
130130211307_2.ts
|
||||
#EXTINF:10,
|
||||
130130211307_3.ts
|
||||
#EXTINF:10,
|
||||
130130211307_4.ts
|
||||
#EXTINF:10,
|
||||
130130211307_5.ts
|
||||
#EXTINF:10,
|
||||
130130211307_6.ts
|
||||
#EXTINF:10,
|
||||
130130211307_7.ts
|
||||
#EXTINF:10,
|
||||
130130211307_8.ts
|
||||
#EXTINF:10,
|
||||
130130211307_9.ts
|
||||
#EXTINF:10,
|
||||
130130211307_10.ts
|
||||
#EXTINF:10,
|
||||
130130211307_11.ts
|
||||
#EXTINF:10,
|
||||
130130211307_12.ts
|
||||
#EXTINF:10,
|
||||
130130211307_13.ts
|
||||
#EXTINF:10,
|
||||
130130211307_14.ts
|
||||
#EXTINF:10,
|
||||
130130211307_15.ts
|
||||
#EXTINF:10,
|
||||
130130211307_16.ts
|
||||
#EXTINF:10,
|
||||
130130211307_17.ts
|
||||
#EXTINF:10,
|
||||
130130211307_18.ts
|
||||
#EXTINF:10,
|
||||
130130211307_19.ts
|
||||
#EXT-X-ENDLIST
|
||||
@@ -1,38 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-VERSION:1
|
||||
## Created with Unified Streaming Platform(version=1.6.7)
|
||||
#EXT-X-MEDIA-SEQUENCE:1
|
||||
#EXT-X-ALLOW-CACHE:NO
|
||||
#EXT-X-TARGETDURATION:11
|
||||
#EXT-X-KEY:METHOD=AES-128,URI="oceans.key"
|
||||
#EXTINF:11, no desc
|
||||
oceans_aes-audio=65000-video=236000-1.ts
|
||||
#EXTINF:7, no desc
|
||||
oceans_aes-audio=65000-video=236000-2.ts
|
||||
#EXTINF:7, no desc
|
||||
oceans_aes-audio=65000-video=236000-3.ts
|
||||
#EXTINF:8, no desc
|
||||
oceans_aes-audio=65000-video=236000-4.ts
|
||||
#EXTINF:10, no desc
|
||||
oceans_aes-audio=65000-video=236000-5.ts
|
||||
#EXTINF:6, no desc
|
||||
oceans_aes-audio=65000-video=236000-6.ts
|
||||
#EXTINF:9, no desc
|
||||
oceans_aes-audio=65000-video=236000-7.ts
|
||||
#EXTINF:7, no desc
|
||||
oceans_aes-audio=65000-video=236000-8.ts
|
||||
#EXTINF:9, no desc
|
||||
oceans_aes-audio=65000-video=236000-9.ts
|
||||
#EXTINF:8, no desc
|
||||
oceans_aes-audio=65000-video=236000-10.ts
|
||||
#EXTINF:8, no desc
|
||||
oceans_aes-audio=65000-video=236000-11.ts
|
||||
#EXTINF:8, no desc
|
||||
oceans_aes-audio=65000-video=236000-12.ts
|
||||
#EXTINF:6, no desc
|
||||
oceans_aes-audio=65000-video=236000-13.ts
|
||||
#EXTINF:9, no desc
|
||||
oceans_aes-audio=65000-video=236000-14.ts
|
||||
#EXTINF:5, no desc
|
||||
oceans_aes-audio=65000-video=236000-15.ts
|
||||
#EXT-X-ENDLIST
|
||||
@@ -1,17 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-VERSION:1
|
||||
## Created with Unified Streaming Platform(version=1.6.7)
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=319060,CODECS="mp4a.40.2,avc1.66.30",RESOLUTION=304x128
|
||||
oceans_aes-audio=65000-video=236000.m3u8
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=461100,CODECS="mp4a.40.2,avc1.66.30",RESOLUTION=384x160
|
||||
oceans_aes-audio=65000-video=370000.m3u8
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=674160,CODECS="mp4a.40.2,avc1.66.30",RESOLUTION=544x224
|
||||
oceans_aes-audio=65000-video=571000.m3u8
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=999580,CODECS="mp4a.40.2,avc1.66.30",RESOLUTION=736x304
|
||||
oceans_aes-audio=65000-video=878000.m3u8
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1489300,CODECS="mp4a.40.2,avc1.66.30",RESOLUTION=960x400
|
||||
oceans_aes-audio=65000-video=1340000.m3u8
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2233420,CODECS="mp4a.40.2,avc1.66.31",RESOLUTION=1264x528
|
||||
oceans_aes-audio=65000-video=2042000.m3u8
|
||||
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=68900,CODECS="mp4a.40.2"
|
||||
oceans_aes-audio=65000.m3u8
|
||||
@@ -1,17 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-VERSION:4
|
||||
#EXT-X-PLAYLIST-TYPE:VOD
|
||||
#EXT-X-TARGETDURATION:6
|
||||
#EXT-X-MEDIA-SEQUENCE:0
|
||||
#EXT-X-KEY:METHOD=AES-128,URI="key.bin"
|
||||
#EXTINF:6.016000,
|
||||
segment-0.aac
|
||||
#EXTINF:6.016000,
|
||||
segment-1.aac
|
||||
#EXTINF:6.016000,
|
||||
segment-2.aac
|
||||
#EXTINF:6.016000,
|
||||
segment-3.aac
|
||||
#EXTINF:5.482667,
|
||||
segment-4.aac
|
||||
#EXT-X-ENDLIST
|
||||
@@ -1,33 +0,0 @@
|
||||
#EXTM3U
|
||||
#EXT-X-VERSION:4
|
||||
#EXT-X-PLAYLIST-TYPE:VOD
|
||||
#EXT-X-I-FRAMES-ONLY
|
||||
#EXT-X-INDEPENDENT-SEGMENTS
|
||||
#EXT-X-TARGETDURATION:8
|
||||
#EXT-X-MEDIA-SEQUENCE:0
|
||||
#EXT-X-KEY:METHOD=AES-128,URI="key.bin"
|
||||
#EXTINF:8.400000,
|
||||
#EXT-X-BYTERANGE:107724@376
|
||||
segment-0.ts
|
||||
#EXTINF:4.560000,
|
||||
#EXT-X-BYTERANGE:38540@376
|
||||
segment-1.ts
|
||||
#EXTINF:3.120000,
|
||||
#EXT-X-BYTERANGE:46060@176720
|
||||
segment-1.ts
|
||||
#EXTINF:5.640000,
|
||||
#EXT-X-BYTERANGE:125208@376
|
||||
segment-2.ts
|
||||
#EXTINF:1.880000,
|
||||
#EXT-X-BYTERANGE:89676@902964
|
||||
segment-2.ts
|
||||
#EXTINF:2.160000,
|
||||
#EXT-X-BYTERANGE:125396@376
|
||||
segment-3.ts
|
||||
#EXTINF:2.080000,
|
||||
#EXT-X-BYTERANGE:52076@232744
|
||||
segment-3.ts
|
||||
#EXTINF:1.680000,
|
||||
#EXT-X-BYTERANGE:117688@627920
|
||||
segment-3.ts
|
||||
#EXT-X-ENDLIST
|
||||
@@ -1,14 +0,0 @@
|
||||
#EXTM3U
|
||||
# Created with Bento4 mp4-hls.py version 1.2.0r637
|
||||
|
||||
#EXT-X-VERSION:4
|
||||
|
||||
# Audio
|
||||
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio_aac",NAME="Unknown",LANGUAGE="und",AUTOSELECT=YES,DEFAULT=YES,URI="audio/aac/und/stream.m3u8"
|
||||
|
||||
# Media Playlists
|
||||
#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1468268,BANDWIDTH=2051101,CODECS="avc1.4D401F,mp4a.40.2",RESOLUTION=1280x720,AUDIO="audio_aac"
|
||||
media-1/stream.m3u8
|
||||
|
||||
# I-Frame Playlists
|
||||
#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=190343,BANDWIDTH=560419,CODECS="avc1.4D401F",RESOLUTION=1280x720,URI="media-1/iframes.m3u8"
|
||||
Binary file not shown.
@@ -1,3 +0,0 @@
|
||||
{
|
||||
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user