fetchAvTransportControlUrl function

Future<String?> fetchAvTransportControlUrl(
  1. String descriptionUrl
)

解析 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;
  }
}