Событие RTFataChannel "bufferedamountlow" не запускается в Safari? - PullRequest
0 голосов
/ 09 февраля 2020

Я работаю над проектом, в котором для передачи файлов используется WebRT C, недавно кто-то сообщил о проблеме , сказав, что передача файлов преждевременно прекращается для больших файлов. Я нашел проблему, и мое решение этой проблемы состояло в том, чтобы полагаться на событие bufferedamountlow для координации отправки кусков. Я также прекратил закрывать соединение, когда отправитель считает, что оно установлено.

По какой-то причине в Safari это событие не срабатывает.

Вот соответствующий код:

const connection = new RTCPeerConnection(rtcConfiguration);

const channel = connection.createDataChannel('sendDataChannel');
channel.binaryType = 'arraybuffer';

channel.addEventListener('open', () => {
    const fileReader = new FileReader();
    let offset = 0;

    const nextSlice = (currentOffset: number) => {
        // Do asynchronous thing with FileReader, that will result in
        // channel.send(buffer) getting called.
        // Also, offset gets increased by 16384 (the size of the buffer).
    };

    channel.bufferedAmountLowThreshold = 0;
    channel.addEventListener('bufferedamountlow', () => nextSlice(offset));

    nextSlice(0);
});

Более длинная версия моего кода доступна здесь.

Исследуя проблему, я понял, что в Safari мой connection.stcp не определен. (Поскольку я переключился на connection.sctp.maxMessageSize вместо 16384 для моего размера буфера.) Я бы предположил, что проблема связана с этим.

В чем может быть причина этой проблемы? Позвольте мне добавить, что на Chrome и Firefox все прекрасно работает без каких-либо проблем.

Событие bufferedamountlow не требуется для правильной работы моего кода, я бы хотел, чтобы он работал Тем не менее, чтобы получить более точные оценки текущего прогресса и скорости на отправляющем конце передачи файла.

...