public Sample(string name, bool preferExtensionDecoders, string abrAlgorithm, DrmInfo drmInfo)
 {
     this.name = name;
     this.preferExtensionDecoders = preferExtensionDecoders;
     this.abrAlgorithm            = abrAlgorithm;
     this.drmInfo = drmInfo;
 }
 public PlaylistSample(
     string name,
     bool preferExtensionDecoders,
     string abrAlgorithm,
     DrmInfo drmInfo,
     params UriSample[] children) : base(name, preferExtensionDecoders, abrAlgorithm, drmInfo)
 {
     this.children = children;
 }
 public UriSample(
     string name,
     bool preferExtensionDecoders,
     string abrAlgorithm,
     DrmInfo drmInfo,
     android.Net.Uri uri,
     string extension,
     string adTagUri) : base(name, preferExtensionDecoders, abrAlgorithm, drmInfo)
 {
     this.uri       = uri;
     this.extension = extension;
     this.adTagUri  = adTagUri;
 }
            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));
                }
            }