Потоковое аудио файл в правильном порядке - PullRequest
0 голосов
/ 08 апреля 2019

Я работаю над API-интерфейсом для воспроизведения mp3-аудио и потоков в мое приложение.Я провел некоторый тест, чтобы узнать, как будет выглядеть поведение, если в конечном итоге пользователь получит недостаток пропускной способности.Таким образом, играя на версии приложения для Android, если я отключаю интернет по телефону (это имитирует пропускную способность интернета с низкой пропускной способностью или даже временную потерю), после поиска трека, пока песня не буферизуется, музыка не останавливается, а затем, когда я включаю интернет,музыка возобновляется в текущее время.

Я глубоко погрузился, чтобы найти решение, и понял, что, возможно, проблема может быть на headers.Я протестировал приведенный ниже код, удалив код первого if block и запустив его, как я и ожидал, но если пользователь получит низкую полосу пропускания, проигрыватель остановится и не будет пытаться играть вместо него.

    const range = req.headers.range;
        if (range !== undefined) {
            const parts = range.replace(/bytes=/, "").split("-");

            const partial_start = parts[0];
            const partial_end = parts[1];

            if ((isNaN(partial_start) && partial_start.length > 1) || (isNaN(partial_end) && partial_end.length > 1)) {
                return res.sendStatus(500);
            }

            const start = parseInt(partial_start, 10);
            const end = partial_end ? parseInt(partial_end, 10) : fileSize - 1;
            const content_length = (end - start) + 1;

            res.status(206).header({
                'Content-Type': 'audio/mpeg',
                'Content-Length': content_length,
                'Content-Range': "bytes " + start + "-" + end + "/" + fileSize
            });

        } else {
            res.header({
                'Content-Type': 'audio/mpeg',
                'Content-Length': fileSize
            });
        }

request(urlmp3).pipe(res);

Что-то мне не хватает?

...