private Sample ReadEntry(JsonReader reader, bool insidePlaylist) { string sampleName = null; android.Net.Uri uri = null; string extension = null; string drmScheme = null; string drmLicenseUrl = null; string[] drmKeyRequestProperties = null; bool drmMultiSession = false; bool preferExtensionDecoders = false; List <UriSample> playlistSamples = null; string adTagUri = null; string abrAlgorithm = null; reader.BeginObject(); while (reader.HasNext) { string name = reader.NextName(); switch (name) { case "name": sampleName = reader.NextString(); break; case "uri": uri = android.Net.Uri.Parse(reader.NextString()); break; case "extension": extension = reader.NextString(); break; case "drm_scheme": Assertions.CheckState(!insidePlaylist, "Invalid attribute on nested item: drm_scheme"); drmScheme = reader.NextString(); break; case "drm_license_url": Assertions.CheckState(!insidePlaylist, "Invalid attribute on nested item: drm_license_url"); drmLicenseUrl = reader.NextString(); break; case "drm_key_request_properties": Assertions.CheckState(!insidePlaylist, "Invalid attribute on nested item: drm_key_request_properties"); List <string> drmKeyRequestPropertiesList = new List <string>(); reader.BeginObject(); while (reader.HasNext) { drmKeyRequestPropertiesList.Add(reader.NextName()); drmKeyRequestPropertiesList.Add(reader.NextString()); } reader.EndObject(); drmKeyRequestProperties = drmKeyRequestPropertiesList.ToArray(); break; case "drm_multi_session": drmMultiSession = reader.NextBoolean(); break; case "prefer_extension_decoders": Assertions.CheckState(!insidePlaylist, "Invalid attribute on nested item: prefer_extension_decoders"); preferExtensionDecoders = reader.NextBoolean(); break; case "playlist": Assertions.CheckState(!insidePlaylist, "Invalid nesting of playlists"); playlistSamples = new List <UriSample>(); reader.BeginArray(); while (reader.HasNext) { playlistSamples.Add((UriSample)ReadEntry(reader, true)); } reader.EndArray(); break; case "ad_tag_uri": adTagUri = reader.NextString(); break; case "abr_algorithm": Assertions.CheckState( !insidePlaylist, "Invalid attribute on nested item: abr_algorithm"); abrAlgorithm = reader.NextString(); break; default: throw new ParserException("Unsupported attribute name: " + name); } } reader.EndObject(); DrmInfo drmInfo = drmScheme == null ? null : new DrmInfo(drmScheme, drmLicenseUrl, drmKeyRequestProperties, drmMultiSession); if (playlistSamples != null) { UriSample[] playlistSamplesArray = playlistSamples.ToArray(); return(new PlaylistSample( sampleName, preferExtensionDecoders, abrAlgorithm, drmInfo, playlistSamplesArray)); } else { return(new UriSample( sampleName, preferExtensionDecoders, abrAlgorithm, drmInfo, uri, extension, adTagUri)); } }
private Sample ReadEntry(JsonReader reader, bool insidePlaylist) { string sampleName = null; string uri = null; string extension = null; UUID drmUuid = null; string drmLicenseUrl = null; string[] drmKeyRequestProperties = null; var preferExtensionDecoders = false; List <UriSample> playlistSamples = null; string adTagUri = null; reader.BeginObject(); while (reader.HasNext) { var name = reader.NextName(); switch (name) { case "name": sampleName = reader.NextString(); break; case "uri": uri = reader.NextString(); break; case "extension": extension = reader.NextString(); break; case "drm_scheme": Assertions.CheckState(!insidePlaylist, "Invalid attribute on nested item: drm_scheme"); drmUuid = GetDrmUuid(reader.NextString()); break; case "drm_license_url": Assertions.CheckState(!insidePlaylist, "Invalid attribute on nested item: drm_license_url"); drmLicenseUrl = reader.NextString(); break; case "drm_key_request_properties": Assertions.CheckState(!insidePlaylist, "Invalid attribute on nested item: drm_key_request_properties"); var drmKeyRequestPropertiesList = new List <string>(); reader.BeginObject(); while (reader.HasNext) { drmKeyRequestPropertiesList.Add(reader.NextName()); drmKeyRequestPropertiesList.Add(reader.NextString()); } reader.EndObject(); drmKeyRequestProperties = drmKeyRequestPropertiesList.ToArray(); break; case "prefer_extension_decoders": Assertions.CheckState(!insidePlaylist, "Invalid attribute on nested item: prefer_extension_decoders"); preferExtensionDecoders = reader.NextBoolean(); break; case "playlist": Assertions.CheckState(!insidePlaylist, "Invalid nesting of playlists"); playlistSamples = new List <UriSample>(); reader.BeginArray(); while (reader.HasNext) { playlistSamples.Add((UriSample)ReadEntry(reader, true)); } reader.EndArray(); break; case "ad_tag_uri": adTagUri = reader.NextString(); break; default: throw new ParserException("Unsupported attribute name: " + name); } } reader.EndObject(); if (playlistSamples != null) { var playlistSamplesArray = playlistSamples.ToArray(); return(new PlaylistSample(sampleName, drmUuid, drmLicenseUrl, drmKeyRequestProperties, preferExtensionDecoders, playlistSamplesArray)); } else { return(new UriSample(sampleName, drmUuid, drmLicenseUrl, drmKeyRequestProperties, preferExtensionDecoders, uri, extension, adTagUri)); } }