GCDWebserver для потоковой передачи с удаленного сервера - PullRequest
0 голосов
/ 22 февраля 2020

Я работаю над приложением UPNP iOS. Я пытаюсь загрузить видео с удаленного сервера и затем отправить его клиенту с помощью GCDWebserver.

Ниже приведены шаги:

  • Получен запрос диапазона от клиента.
  • Инициировал GCDWebServerStreamedResponse, создал URLSession и запустил его асинхронно.
  • Передача данных в GCDWebServerAsyncStreamBlock в didReceiveData.

Соединение отправило данные некоторое время, но затем я сталкиваюсь со следующей ошибкой:

Ошибка при записи в сокет 29: Сломанный канал (32)

Я провел некоторое исследование и обнаружил, что только GCDWebserverFileResponse развлекает Content-Range.

Ниже приведен код:

GCDWebServerStreamedResponse *streamedResponse = [GCDWebServerStreamedResponse responseWithContentType:@"video/mp4" asyncStreamBlock:^(GCDWebServerBodyReaderCompletionBlock completionBlock) {
        self.cb = completionBlock;
        NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
        NSURLSession *urlSession = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]];
        NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:remoteUrl]];
        [urlRequest addValue:[request.headers objectForKey:@"Range"] forHTTPHeaderField:@"Range"];
        NSURLSessionDataTask *dataTask = [urlSession dataTaskWithRequest: urlRequest];
        [dataTask resume];
}];

- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {
    NSLog(@"got data size == %lu", data.length);
    self.cb(data, nil);
}

Я нашел похожий вопрос, но на который нет ответа ,

...