sendVideoStream method
send video streamming
Implementation
Future<void> sendVideoStream(String filePath) async {
try {
final file = File(filePath);
if (!await file.exists()) {
response
..statusCode = HttpStatus.notFound
..write('File not found')
..close();
return;
}
final total = await file.length();
int start = 0;
int end = total - 1;
final rangeHeader = headers.value(HttpHeaders.rangeHeader);
if (rangeHeader != null) {
final match = RegExp(r'bytes=(\d+)-(\d*)').firstMatch(rangeHeader);
if (match != null) {
start = int.parse(match.group(1)!);
if (match.group(2) != null && match.group(2)!.isNotEmpty) {
end = int.parse(match.group(2)!);
}
}
response.statusCode = HttpStatus.partialContent;
}
final length = end - start + 1;
response.headers
..set(HttpHeaders.contentTypeHeader, 'video/mp4')
..set(HttpHeaders.acceptRangesHeader, 'bytes')
..set(HttpHeaders.contentLengthHeader, length.toString())
..set(HttpHeaders.contentRangeHeader, 'bytes $start-$end/$total');
final stream = file.openRead(start, end + 1);
await stream.pipe(response);
} catch (e) {
TLogger.instance.showLog(e.toString(), tag: 'sendVideoStream');
response
..statusCode = HttpStatus.internalServerError
..write('Server Error')
..close();
}
}