コード例 #1
0
        static void SampleThreadedChunkUpload()
        {
            KalturaClient client = new KalturaClient(GetConfig());

            client.KS = client.GenerateSession(ADMIN_SECRET, USER_ID, KalturaSessionType.ADMIN, PARTNER_ID, 86400, "");

            string             fname      = "DemoVideo.flv";
            FileStream         fileStream = new FileStream(fname, FileMode.Open, FileAccess.Read, FileShare.Read);
            KalturaUploadToken myToken    = new KalturaUploadToken();

            myToken.FileName = fname;
            FileInfo f = new FileInfo(fname);

            myToken.FileSize = f.Length;

            string mediaName = "C# Media Entry Uploaded in chunks using threads";

            KalturaUploadToken uploadToken = client.UploadTokenService.Add(myToken);

            chunkThreaded(client.KS, fileStream, uploadToken.Id);

            KalturaUploadedFileTokenResource mediaResource = new KalturaUploadedFileTokenResource();

            mediaResource.Token = uploadToken.Id;
            KalturaMediaEntry mediaEntry = new KalturaMediaEntry();

            mediaEntry.Name      = mediaName;
            mediaEntry.MediaType = KalturaMediaType.VIDEO;
            mediaEntry           = client.MediaService.Add(mediaEntry);
            mediaEntry           = client.MediaService.AddContent(mediaEntry.Id, mediaResource);
        }
コード例 #2
0
ファイル: KalturaClientTester.cs プロジェクト: Atul9/server
        static void SampleMetadataOperations()
        {
            // The Schema file for the field
            // Currently, you must build the xsd yourself. There is no utility provided.
            string       xsdFile    = "MetadataSchema.xsd";
            StreamReader fileStream = File.OpenText(xsdFile);
            string       xsd        = fileStream.ReadToEnd();

            string fieldValue = "VobSub";
            string xmlData    = "<metadata><SubtitleFormat>" + fieldValue + "</SubtitleFormat></metadata>";

            KalturaClient client = new KalturaClient(GetConfig());

            // start new session (client session is enough when we do operations in a users scope)
            client.KS = client.GenerateSession(ADMIN_SECRET, USER_ID, KalturaSessionType.ADMIN, PARTNER_ID);

            // Setup a pager and search to use
            KalturaMediaEntryFilter mediaEntryFilter = new KalturaMediaEntryFilter();

            mediaEntryFilter.OrderBy        = KalturaMediaEntryOrderBy.CREATED_AT_ASC;
            mediaEntryFilter.MediaTypeEqual = KalturaMediaType.VIDEO;

            KalturaFilterPager pager = new KalturaFilterPager();

            pager.PageSize  = 1;
            pager.PageIndex = 1;

            KalturaMetadataProfile newMetadataProfile = new KalturaMetadataProfile();

            newMetadataProfile.MetadataObjectType = KalturaMetadataObjectType.ENTRY;
            newMetadataProfile.Name = "Test";

            Console.WriteLine("List videos, get the first one...");
            IList <KalturaMediaEntry> entries = client.MediaService.List(mediaEntryFilter, pager).Objects;
            KalturaMediaEntry         entry   = entries[0];

            KalturaMetadataProfile metadataProfile = client.MetadataProfileService.Add(newMetadataProfile, xsd);

            Console.WriteLine("1. Successfully created the custom metadata profile " + metadataProfile.Name + ".");

            KalturaMetadata metadata = client.MetadataService.Add(metadataProfile.Id, metadataProfile.MetadataObjectType, entry.Id, xmlData);

            Console.WriteLine("2. Successfully added the custom data field for entryid: " + entry.Id);

            KalturaMetadataFilter metadataFilter = new KalturaMetadataFilter();

            metadataFilter.ObjectIdEqual          = entry.Id;
            metadataFilter.MetadataProfileIdEqual = metadataProfile.Id;
            IList <KalturaMetadata> metadataList = client.MetadataService.List(metadataFilter).Objects;

            if (metadataList.Count == 0)
            {
                throw new Exception("Failed to find metadata for entryid: " + entry.Id);
            }
        }
コード例 #3
0
        /// <summary>
        /// Shows how to start session, create a mix, add media, and append it to a mix timeline using multi request
        /// </summary>
        private static void AdvancedMultiRequestExample()
        {
            KalturaClient client = new KalturaClient(GetConfig());

            client.StartMultiRequest();

            // Request 1
            client.SessionService.Start(ADMIN_SECRET, "", KalturaSessionType.ADMIN, PARTNER_ID, 86400, "");
            client.KS = "{1:result}"; // for the current multi request, the result of the first call will be used as the ks for next calls

            FileStream fileStream = new FileStream("DemoVideo.flv", FileMode.Open, FileAccess.Read);

            // Request 2
            KalturaUploadToken uploadToken = client.UploadTokenService.Add();

            // Request 3
            uploadToken = client.UploadTokenService.Upload("{2:result}", fileStream);

            // Request 4
            KalturaMediaEntry mediaEntry = new KalturaMediaEntry();

            mediaEntry.Name      = "Media Entry Using C#.Net Client To Test Flavor Replace";
            mediaEntry.MediaType = KalturaMediaType.VIDEO;
            mediaEntry           = client.MediaService.Add(mediaEntry);

            // Request 5
            KalturaUploadedFileTokenResource mediaResource = new KalturaUploadedFileTokenResource();

            mediaResource.Token = "{2:result:id}";
            mediaEntry          = client.MediaService.AddContent("{4:result}", mediaResource);

            // map paramters from responses to requests according to response calling order and names to request calling order and C# method parameter name
            client.MapMultiRequestParam(2, ":id", 3, "uploadTokenId");
            client.MapMultiRequestParam(4, ":id", 5, "entryId");

            KalturaMultiResponse response = client.DoMultiRequest();

            foreach (object obj in response)
            {
                if (obj.GetType() == typeof(KalturaAPIException))
                {
                    Console.WriteLine("Error occurred: " + ((KalturaAPIException)obj).Message);
                }
            }

            // when accessing the response object we will use an index and not the response number (response number - 1)
            if (response[4].GetType() == typeof(KalturaMediaEntry))
            {
                KalturaMediaEntry newMediaEntry = (KalturaMediaEntry)response[4];
                Console.WriteLine("Multirequest newly added entry id: " + newMediaEntry.Id);
            }
        }
コード例 #4
0
ファイル: KalturaClientTester.cs プロジェクト: Atul9/server
        private static KalturaMediaEntry createEntry()
        {
            KalturaClient client = new KalturaClient(GetConfig());

            client.KS = client.GenerateSession(ADMIN_SECRET, USER_ID, KalturaSessionType.USER, PARTNER_ID, 86400, "");

            KalturaMediaEntry entry = new KalturaMediaEntry();

            entry.MediaType = KalturaMediaType.VIDEO;
            entry.Name      = "test_" + Guid.NewGuid().ToString();
            entry.Tags      = uniqueTag;

            return(client.MediaService.Add(entry));
        }
コード例 #5
0
        public KalturaMediaEntry Add(KalturaMediaEntry entry)
        {
            KalturaParams kparams = new KalturaParams();

            if (entry != null)
            {
                kparams.Add("entry", entry.ToParams());
            }
            _Client.QueueServiceCall("media", "add", kparams);
            if (this._Client.IsMultiRequest)
            {
                return(null);
            }
            XmlElement result = _Client.DoQueue();

            return((KalturaMediaEntry)KalturaObjectFactory.Create(result));
        }
コード例 #6
0
ファイル: KalturaClientTester.cs プロジェクト: Atul9/server
        // this method is deprecated and should be avoided.
        // see above SampleReplaceVideoFlavorAndAddCaption for the current method of uploading media.
        // new method should use the Add method along with specific appropriate Resource object.
        static void StartSessionAndUploadMedia(Uri url)
        {
            KalturaClient client = new KalturaClient(GetConfig());

            // start new session (client session is enough when we do operations in a users scope)
            client.KS = client.GenerateSession(ADMIN_SECRET, USER_ID, KalturaSessionType.USER, PARTNER_ID, 86400, "");

            KalturaMediaEntry mediaEntry = new KalturaMediaEntry();

            mediaEntry.Name      = "Media Entry Using .Net Client";
            mediaEntry.MediaType = KalturaMediaType.VIDEO;

            // add the media using the upload token
            mediaEntry = client.MediaService.AddFromUrl(mediaEntry, url.ToString());

            Console.WriteLine("New media was created with the following id: " + mediaEntry.Id);
        }
コード例 #7
0
        public KalturaMediaEntry Update(string entryId, KalturaMediaEntry mediaEntry)
        {
            KalturaParams kparams = new KalturaParams();

            kparams.AddStringIfNotNull("entryId", entryId);
            if (mediaEntry != null)
            {
                kparams.Add("mediaEntry", mediaEntry.ToParams());
            }
            _Client.QueueServiceCall("media", "update", kparams);
            if (this._Client.IsMultiRequest)
            {
                return(null);
            }
            XmlElement result = _Client.DoQueue();

            return((KalturaMediaEntry)KalturaObjectFactory.Create(result));
        }
コード例 #8
0
        public KalturaMediaEntry AddFromUrl(KalturaMediaEntry mediaEntry, string url)
        {
            KalturaParams kparams = new KalturaParams();

            if (mediaEntry != null)
            {
                kparams.Add("mediaEntry", mediaEntry.ToParams());
            }
            kparams.AddStringIfNotNull("url", url);
            _Client.QueueServiceCall("media", "addFromUrl", kparams);
            if (this._Client.IsMultiRequest)
            {
                return(null);
            }
            XmlElement result = _Client.DoQueue();

            return((KalturaMediaEntry)KalturaObjectFactory.Create(result));
        }
コード例 #9
0
        public KalturaMediaEntry AddFromFlavorAsset(string sourceFlavorAssetId, KalturaMediaEntry mediaEntry)
        {
            KalturaParams kparams = new KalturaParams();

            kparams.AddStringIfNotNull("sourceFlavorAssetId", sourceFlavorAssetId);
            if (mediaEntry != null)
            {
                kparams.Add("mediaEntry", mediaEntry.ToParams());
            }
            _Client.QueueServiceCall("media", "addFromFlavorAsset", kparams);
            if (this._Client.IsMultiRequest)
            {
                return(null);
            }
            XmlElement result = _Client.DoQueue();

            return((KalturaMediaEntry)KalturaObjectFactory.Create(result));
        }
コード例 #10
0
ファイル: KalturaClientTester.cs プロジェクト: Atul9/server
        // this method is deprecated and should be avoided.
        // see above SampleReplaceVideoFlavorAndAddCaption for the current method of uploading media.
        // new method should use the Add method along with specific appropriate Resource object and Upload Token.
        static KalturaMediaEntry StartSessionAndUploadMedia(FileStream fileStream)
        {
            KalturaClient client = new KalturaClient(GetConfig());

            // start new session (client session is enough when we do operations in a users scope)
            client.KS = client.GenerateSession(ADMIN_SECRET, USER_ID, KalturaSessionType.USER, PARTNER_ID, 86400, "");

            // upload the media
            string            uploadTokenId = client.MediaService.Upload(fileStream); // synchronous proccess
            KalturaMediaEntry mediaEntry    = new KalturaMediaEntry();

            mediaEntry.Name      = "Media Entry Using .Net Client";
            mediaEntry.MediaType = KalturaMediaType.VIDEO;

            // add the media using the upload token
            mediaEntry = client.MediaService.AddFromUploadedFile(mediaEntry, uploadTokenId);

            Console.WriteLine("New media was created with the following id: " + mediaEntry.Id);

            return(mediaEntry);
        }
コード例 #11
0
        public KalturaMediaEntry AddFromSearchResult(KalturaMediaEntry mediaEntry, KalturaSearchResult searchResult)
        {
            KalturaParams kparams = new KalturaParams();

            if (mediaEntry != null)
            {
                kparams.Add("mediaEntry", mediaEntry.ToParams());
            }
            if (searchResult != null)
            {
                kparams.Add("searchResult", searchResult.ToParams());
            }
            _Client.QueueServiceCall("media", "addFromSearchResult", kparams);
            if (this._Client.IsMultiRequest)
            {
                return(null);
            }
            XmlElement result = _Client.DoQueue();

            return((KalturaMediaEntry)KalturaObjectFactory.Create(result));
        }
コード例 #12
0
        public KalturaMediaEntry AddMediaEntry(KalturaMediaEntry mediaEntry, string uploadTokenId, int emailProfId, string fromAddress, string emailMsgId)
        {
            KalturaParams kparams = new KalturaParams();

            if (mediaEntry != null)
            {
                kparams.Add("mediaEntry", mediaEntry.ToParams());
            }
            kparams.AddStringIfNotNull("uploadTokenId", uploadTokenId);
            kparams.AddIntIfNotNull("emailProfId", emailProfId);
            kparams.AddStringIfNotNull("fromAddress", fromAddress);
            kparams.AddStringIfNotNull("emailMsgId", emailMsgId);
            _Client.QueueServiceCall("emailingestionprofile", "addMediaEntry", kparams);
            if (this._Client.IsMultiRequest)
            {
                return(null);
            }
            XmlElement result = _Client.DoQueue();

            return((KalturaMediaEntry)KalturaObjectFactory.Create(result));
        }
コード例 #13
0
ファイル: KalturaClientTester.cs プロジェクト: Atul9/server
        /// <summary>
        /// Shows how to start session, create a mix, add media, and append it to a mix timeline using multi request
        /// </summary>
        private static void AdvancedMultiRequestExample()
        {
            FileStream fileStream = new FileStream("DemoVideo.flv", FileMode.Open, FileAccess.Read);

            KalturaMediaEntry mediaEntry = new KalturaMediaEntry();

            mediaEntry.Name      = "Media Entry Using C#.Net Client To Test Flavor Replace";
            mediaEntry.MediaType = KalturaMediaType.VIDEO;

            KalturaUploadedFileTokenResource mediaResource = new KalturaUploadedFileTokenResource();

            mediaResource.Token = "{1:result:id}";

            KalturaClient client = new KalturaClient(GetConfig());

            client.KS = client.GenerateSession(ADMIN_SECRET, "", KalturaSessionType.ADMIN, PARTNER_ID);
            client.StartMultiRequest();
            client.UploadTokenService.Add();
            client.MediaService.Add(mediaEntry);
            client.UploadTokenService.Upload("{1:result:id}", fileStream);
            client.MediaService.AddContent("{2:result:id}", mediaResource);

            KalturaMultiResponse response = client.DoMultiRequest();

            foreach (object obj in response)
            {
                if (obj is KalturaAPIException)
                {
                    Console.WriteLine("Error occurred: " + ((KalturaAPIException)obj).Message);
                }
            }

            // when accessing the response object we will use an index and not the response number (response number - 1)
            if (response[3] is KalturaMediaEntry)
            {
                KalturaMediaEntry newMediaEntry = (KalturaMediaEntry)response[3];
                Console.WriteLine("Multirequest newly added entry id: " + newMediaEntry.Id + ", status: " + newMediaEntry.Status);
            }
        }
コード例 #14
0
        // This will guide you through uploading a video, getting a specific transcoding flavor, replacing a flavor, and uploading a caption file.
        static void SampleReplaceVideoFlavorAndAddCaption()
        {
            // Upload a file
            Console.WriteLine("1. Upload a video file");
            FileStream    fileStream = new FileStream("DemoVideo.flv", FileMode.Open, FileAccess.Read);
            KalturaClient client     = new KalturaClient(GetConfig());
            string        ks         = client.GenerateSession(ADMIN_SECRET, USER_ID, KalturaSessionType.ADMIN, PARTNER_ID, 86400, "");

            client.KS = ks;
            KalturaUploadToken uploadToken = client.UploadTokenService.Add();

            client.UploadTokenService.Upload(uploadToken.Id, fileStream);
            KalturaUploadedFileTokenResource mediaResource = new KalturaUploadedFileTokenResource();

            mediaResource.Token = uploadToken.Id;
            KalturaMediaEntry mediaEntry = new KalturaMediaEntry();

            mediaEntry.Name      = "Media Entry Using C#.Net Client To Test Flavor Replace";
            mediaEntry.MediaType = KalturaMediaType.VIDEO;
            mediaEntry           = client.MediaService.Add(mediaEntry);
            mediaEntry           = client.MediaService.AddContent(mediaEntry.Id, mediaResource);

            //verify that the account we're testing has the iPad flavor enabled
            int?flavorId = CheckIfFlavorExist("iPad");

            if (flavorId == null)
            {
                Console.WriteLine("!! Default conversion profile does NOT include the new iPad flavor");
                Console.WriteLine("!! Skipping the iPad flavor replace test, make sure account has newiPad flavor enabled.");
            }
            else
            {
                int iPadFlavorId = (int)flavorId; //C# failsafe from nullable int - we cast it to int
                Console.WriteLine("** Default conversion profile includes the new iPad flavor, id is: " + iPadFlavorId);

                //Detect the conversion readiness status of the iPad flavor and download the file when ready -
                Boolean            statusB    = false;
                KalturaFlavorAsset iPadFlavor = null;
                while (statusB == false)
                {
                    Console.WriteLine("2. Waiting for the iPad flavor to be available...");
                    System.Threading.Thread.Sleep(5000);
                    KalturaFlavorAssetFilter flavorAssetsFilter = new KalturaFlavorAssetFilter();
                    flavorAssetsFilter.EntryIdEqual = mediaEntry.Id;
                    KalturaFlavorAssetListResponse flavorAssets = client.FlavorAssetService.List(flavorAssetsFilter);
                    foreach (KalturaFlavorAsset flavor in flavorAssets.Objects)
                    {
                        if (flavor.FlavorParamsId == iPadFlavorId)
                        {
                            iPadFlavor = flavor;
                            statusB    = flavor.Status == KalturaFlavorAssetStatus.READY;
                            if (flavor.Status == KalturaFlavorAssetStatus.NOT_APPLICABLE)
                            {
                                //in case the Kaltura Transcoding Decision Layer decided not to convert to this flavor, let's force it.
                                client.FlavorAssetService.Convert(mediaEntry.Id, iPadFlavor.FlavorParamsId);
                            }
                            Console.WriteLine("3. iPad flavor (" + iPadFlavor.FlavorParamsId + "). It's " + (statusB ? "Ready to ROCK!" : "being converted. Waiting..."));
                        }
                    }
                }

                //this is the download URL for the actual Video file of the iPad flavor
                string iPadFlavorUrl = client.FlavorAssetService.GetDownloadUrl(iPadFlavor.Id);
                Console.WriteLine("4. iPad Flavor URL is: " + iPadFlavorUrl);

                //Alternatively, download URL for a given flavor id can also be retrived by creating the playManifest URL -
                string playManifestURL = "http://www.kaltura.com/p/{partnerId}/sp/0/playManifest/entryId/{entryId}/format/url/flavorParamId/{flavorParamId}/ks/{ks}/{fileName}.mp4";
                playManifestURL = playManifestURL.Replace("{partnerId}", PARTNER_ID.ToString());
                playManifestURL = playManifestURL.Replace("{entryId}", mediaEntry.Id);
                playManifestURL = playManifestURL.Replace("{flavorParamId}", iPadFlavor.FlavorParamsId.ToString());
                playManifestURL = playManifestURL.Replace("{ks}", client.KS);
                playManifestURL = playManifestURL.Replace("{fileName}", mediaEntry.Name);
                Console.WriteLine("4. iPad Flavor playManifest URL is: " + playManifestURL);

                //now let's replace the flavor with our video file (e.g. after processing the file outside of Kaltura)
                FileStream fileStreamiPad = new FileStream("DemoVideoiPad.mp4", FileMode.Open, FileAccess.Read);
                uploadToken = client.UploadTokenService.Add();
                client.UploadTokenService.Upload(uploadToken.Id, fileStreamiPad);
                mediaResource       = new KalturaUploadedFileTokenResource();
                mediaResource.Token = uploadToken.Id;
                KalturaFlavorAsset newiPadFlavor = client.FlavorAssetService.SetContent(iPadFlavor.Id, mediaResource);
                Console.WriteLine("5. iPad Flavor was replaced! id: " + newiPadFlavor.Id);
            }

            //now let's upload a new caption file to this entry
            FileStream fileStreamCaption = new FileStream("DemoCaptions.srt", FileMode.Open, FileAccess.Read);

            uploadToken = client.UploadTokenService.Add();
            client.UploadTokenService.Upload(uploadToken.Id, fileStreamCaption);
            KalturaCaptionAsset captionAsset = new KalturaCaptionAsset();

            captionAsset.Label    = "Test C# Uploaded Caption";
            captionAsset.Language = KalturaLanguage.EN;
            captionAsset.Format   = KalturaCaptionType.SRT;
            captionAsset.FileExt  = "srt";
            captionAsset          = client.CaptionAssetService.Add(mediaEntry.Id, captionAsset);
            Console.WriteLine("6. Added a new caption asset. Id: " + captionAsset.Id);
            KalturaUploadedFileTokenResource captionResource = new KalturaUploadedFileTokenResource();

            captionResource.Token = uploadToken.Id;
            captionAsset          = client.CaptionAssetService.SetContent(captionAsset.Id, captionResource);
            Console.WriteLine("7. Uploaded a new caption file and attached to caption asset id: " + captionAsset.Id);
            string captionUrl = client.CaptionAssetService.GetUrl(captionAsset.Id);

            Console.WriteLine("7. Newly created Caption Asset URL is: " + captionUrl);
        }
コード例 #15
0
 public KalturaMediaEntry AddFromSearchResult(KalturaMediaEntry mediaEntry)
 {
     return(this.AddFromSearchResult(mediaEntry, null));
 }
コード例 #16
0
ファイル: KalturaClientTester.cs プロジェクト: Atul9/server
        private static IList <KalturaMediaEntry> createEntriesWithMetadataObjects(int entriesCount, int metadataProfileCount)
        {
            IList <KalturaMediaEntry> entries = new List <KalturaMediaEntry>(2);
            IDictionary <string, KalturaMetadataProfile> metadataProfiles = new Dictionary <string, KalturaMetadataProfile>(3);

            string xsd;

            for (int i = 1; i <= metadataProfileCount; i++)
            {
                xsd = @"<xsd:schema xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">
        <xsd:element name=""metadata"">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element name=""Choice" + i + @""" minOccurs=""0"" maxOccurs=""1"">
                        <xsd:annotation>
                            <xsd:documentation></xsd:documentation>
                            <xsd:appinfo>
                                <label>Example choice " + i + @"</label>
                                <key>choice" + i + @"</key>
                                <searchable>true</searchable>
                                <description>Example choice " + i + @"</description>
                            </xsd:appinfo>
                        </xsd:annotation>
                        <xsd:simpleType>
                            <xsd:restriction base=""listType"">
                                <xsd:enumeration value=""on"" />
                                <xsd:enumeration value=""off"" />
                            </xsd:restriction>
                        </xsd:simpleType>
                    </xsd:element>
                    <xsd:element name=""FreeText" + i + @""" minOccurs=""0"" maxOccurs=""1"" type=""textType"">
                        <xsd:annotation>
                            <xsd:documentation></xsd:documentation>
                            <xsd:appinfo>
                                <label>Free text " + i + @"</label>
                                <key>freeText" + i + @"</key>
                                <searchable>true</searchable>
                                <description>Free text " + i + @"</description>
                            </xsd:appinfo>
                        </xsd:annotation>
                    </xsd:element>
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
        <xsd:complexType name=""textType"">
            <xsd:simpleContent>
                <xsd:extension base=""xsd:string"" />
            </xsd:simpleContent>
        </xsd:complexType>
        <xsd:complexType name=""objectType"">
            <xsd:simpleContent>
                <xsd:extension base=""xsd:string"" />
            </xsd:simpleContent>
        </xsd:complexType>
        <xsd:simpleType name=""listType"">
            <xsd:restriction base=""xsd:string"" />
        </xsd:simpleType>
    </xsd:schema>";

                metadataProfiles.Add(i.ToString(), createMetadataProfile(KalturaMetadataObjectType.ENTRY, xsd));
            }

            string xml;

            for (int i = 0; i < entriesCount; i++)
            {
                KalturaMediaEntry entry = createEntry();
                entries.Add(entry);

                foreach (string index in metadataProfiles.Keys)
                {
                    xml = @"<metadata>
        <Choice" + index + ">on</Choice" + index + @">
        <FreeText" + index + ">example text " + index + "</FreeText" + index + @">
    </metadata>";

                    createMetadata(metadataProfiles[index].Id, KalturaMetadataObjectType.ENTRY, entry.Id, xml);
                }
            }

            return(entries);
        }
コード例 #17
0
 public KalturaMediaEntry AddFromEntry(string sourceEntryId, KalturaMediaEntry mediaEntry)
 {
     return(this.AddFromEntry(sourceEntryId, mediaEntry, Int32.MinValue));
 }