Files
ArtPlayer/packages/artplayer-plugin-flv/src/flvParse/fetchStream.js
T
2018-12-19 17:36:28 +08:00

50 lines
1.7 KiB
JavaScript

import { errorHandle } from '../utils';
export default function fetchStream(flv, url) {
flv.emit('flvFetchStart');
fetch(url).then(response => {
errorHandle(
response.ok && response.status >= 200 && response.status <= 299,
`${response.status} ${response.statusText}`,
);
const contentType = response.headers.get('content-type');
errorHandle(contentType.includes('x-flv'), 'The resource does not seem to be a flv file');
return new Response(
new ReadableStream({
start(controller) {
const reader = response.body.getReader();
flv.on('destroy', () => {
reader.cancel();
});
flv.on('readerCancel', () => {
reader.cancel();
});
(function read() {
reader
.read()
.then(({ done, value }) => {
if (done) {
flv.emit('flvFetchEnd');
controller.close();
return;
}
flv.emit('flvFetching', value);
controller.enqueue(value);
read();
})
.catch(error => {
flv.emit('flvFetchError', error);
});
})();
},
cancel() {
flv.emit('flvFetchCancel');
},
}),
);
});
}