первый раз задайте вопрос здесь. Я создаю приложение с помощью native native и expo, и я реализовал аудиоплеер, который воспроизводится из потока Icecast.
Сейчас я пытаюсь добиться того, чтобы получить метаданные из потока Icecast, поэтому у меня есть Установил эту библиотеку: https://github.com/ghaiklor/icecast-parser. Однако, поскольку он использует узел формы http, events и stream module, я установил следующий пакет, чтобы получить их в реагирующем нативе: https://github.com/parshap/node-libs-react-native/, которому удалось заставить библиотеку синтаксического анализа работать.
Теперь проблема, с которой я столкнулся, заключается в том, что после того, как анализатор icecast делает http-запрос для потока, я получаю следующие ошибки:
- «Предоставленное значение» moz-chunked-arraybuffer 'не является допустимым' responseType '. "
- " Предоставленное значение ms-stream' не является допустимым 'responseType'. "
После чтения https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequestResponseType Я думаю, что проблема в том, что по какой-то причине ответ на запрос относится к тому типу, который и дает мне ошибку. Поэтому я пытаюсь выяснить, есть ли способ преобразовать его или заставить его работать, и мне было интересно, если у вас была идея или вы могли бы указать мне правильное направление?
Вот часть кода, где ошибка происходит:
_makeRequest () {
const request = (this.getConfig('url').indexOf('https://') === 0) ?
https.request(this.getConfig('url')) : http.request(this.getConfig('url'));
request.setHeader('Icy-MetaData', '1');
request.setHeader('User-Agent', this.getConfig('userAgent'));
request.once('socket', function (socket) {
socket.once('end', this._onSocketEnd.bind(this));
}.bind(this));
console.log("I get here")
request.once('response', this._onRequestResponse.bind(this));
console.log("I don't get here")
request.once('error', this._onRequestError.bind(this));
request.end();
return this;
}
_onRequestResponse (response) {
console.log("not getting here")
const icyMetaInt = response.headers['icy-metaint'];
if (icyMetaInt) {
const reader = new StreamReader(icyMetaInt);
reader.on('metadata', metadata => {
this._destroyResponse(response);
this._queueNextRequest(this.getConfig('metadataInterval'));
this.emit('metadata', metadata);
});
response.pipe(reader);
this.emit('stream', reader);
} else {
this._destroyResponse(response);
this._queueNextRequest(this.getConfig('emptyInterval'));
this.emit('empty');
}
return this;
}