fetchAvTransportControlUrl function
解析 DLNA description.xml,取得 AVTransport controlURL
Implementation
Future<String?> fetchAvTransportControlUrl(String descriptionUrl) async {
try {
final client = HttpClient();
final request = await client.getUrl(Uri.parse(descriptionUrl));
final response = await request.close();
if (response.statusCode != 200) return null;
final body = await response.transform(utf8.decoder).join();
final document = XmlDocument.parse(body);
final services = document.findAllElements('service');
for (final service in services) {
final serviceType = service.getElement('serviceType')?.value ?? '';
if (serviceType.contains('AVTransport')) {
final controlUrl = service.getElement('controlURL')?.value;
if (controlUrl != null && controlUrl.isNotEmpty) {
final uri = Uri.parse(descriptionUrl);
return uri.resolve(controlUrl).toString();
}
}
}
return null;
} catch (e) {
print('[DLNA] fetchAvTransportControlUrl error: $e');
return null;
}
}