Пример #1
0
        public ActionResult GetBlobs(int?Id, int?page, int?limit, string sortBy, string direction, CloudFile obj)
        {
            string searchStorageConnectionString = ""; string container = "";

            try
            {
                if (obj.StorageAccount == "Asra Account")
                {
                    searchStorageConnectionString = Asra;
                    container = Default;
                }
                else if (obj.StorageAccount == "Joseph Account")
                {
                    searchStorageConnectionString = Joseph;
                    container = JosephContainer;
                }
                else
                {
                    searchStorageConnectionString = RaviKotuwar;
                    container = Default;
                }
                var records = new List <CloudFile>();
                CloudStorageAccount storageAccount      = CloudStorageAccount.Parse(searchStorageConnectionString);
                CloudBlobClient     cloudBlobClient     = storageAccount.CreateCloudBlobClient();
                CloudBlobContainer  searchBlobContainer = cloudBlobClient.GetContainerReference(container);

                //searchBlobContainer.SetPermissionsAsync(new BlobContainerPermissions
                //{
                //    PublicAccess = BlobContainerPublicAccessType.Blob
                //});
                // Get list of all blobs URLs which are stored inside container
                //IEnumerable<IListBlobItem> blobs = searchBlobContainer.ListBlobs().OrderByDescending().ToList();
                var blobs = searchBlobContainer.ListBlobs().OfType <CloudBlockBlob>().OrderByDescending(m => m.Properties.LastModified).ToList();
                var query = blobs.Select(p => new CloudFile
                {
                    FileName  = HttpUtility.UrlDecode(p.Uri.AbsoluteUri.ToString().Substring(p.Uri.AbsoluteUri.ToString().LastIndexOf("/") + 1)),
                    URL       = p.Uri.AbsoluteUri,
                    StartTime = p.Properties.LastModified.Value.UtcDateTime
                });

                if (!string.IsNullOrWhiteSpace(obj.FileName))
                {
                    query = query.Where(q => q.FileName.ToLower().Contains(obj.FileName.ToLower()));
                }
                var total = query.Count();
                if (page.HasValue && limit.HasValue)
                {
                    int start = (page.Value - 1) * limit.Value;
                    records = query.Skip(start).Take(limit.Value).ToList();
                }
                else
                {
                    records = query.ToList();
                }
                return(this.Json(new { records, total }, JsonRequestBehavior.AllowGet));
            }
            catch (Exception ex)
            {
                return(null);
            }
        }
Пример #2
0
        public ActionResult EncodeToAdaptiveBitrateMP4s(string assetId)
        {
            // Note: You need atleast 1 reserve streaming unit for dynamic packaging of encoded media. If you don't have that, you can't see video file playing.

            IAsset inputAsset             = GetAssetById(assetId);
            string token                  = string.Empty;
            string uploadFileOriginalName = string.Empty;
            string fileName               = string.Empty;

            ////// Without preset (say default preset), works very well
            //IJob job = context.Jobs.CreateWithSingleTask(MediaProcessorNames.AzureMediaEncoder,
            //    MediaEncoderTaskPresetStrings.H264AdaptiveBitrateMP4Set720p,
            //    inputAsset,
            //    "UploadedVideo-" + Guid.NewGuid().ToString().ToLower() + "-Adaptive-Bitrate-MP4",
            //    AssetCreationOptions.None);
            //job.Submit();
            //IAsset encodedOutputAsset = job.OutputMediaAssets[0];


            //// XML Preset
            IJob job = context.Jobs.Create(inputAsset.Name);

            if (inputAsset.AssetType.ToString() == "Video")
            {
                IMediaProcessor processor     = GetLatestMediaProcessorByName("Media Encoder Standard");
                string          configuration = System.IO.File.ReadAllText(HttpContext.Server.MapPath("~/MediaServicesCustomPreset.xml"));
                ITask           task          = job.Tasks.AddNew(inputAsset.Name + "- encoding task", processor, configuration, TaskOptions.None);
                task.InputAssets.Add(inputAsset);
                task.OutputAssets.AddNew(inputAsset.Name + "-Adaptive-Bitrate-MP4", AssetCreationOptions.None);
            }

            else if (true)
            {
                IMediaProcessor processor     = GetLatestMediaProcessorByName("Media Encoder Standard");
                string          configuration = System.IO.File.ReadAllText(HttpContext.Server.MapPath("~/MediaServicesCustomPreset.xml"));
                ITask           task          = job.Tasks.AddNew("Media Encoder Standard encoding task", processor, "Adaptive Streaming", TaskOptions.None);

                //ITask task = job.Tasks.AddNew("My encoding task", processor, configuration, TaskOptions.None);
                task.InputAssets.Add(inputAsset);
                task.OutputAssets.AddNew(inputAsset.Name + "-Adaptive-Bitrate-MP4", AssetCreationOptions.None);
            }
            job.Submit();

            //Task progressJobTask = job.GetExecutionProgressTask(CancellationToken.None);

            //progressJobTask.Wait();
            IAsset encodedAsset = job.OutputMediaAssets[0];

            // process policy & encryption
            ProcessPolicyAndEncryption(encodedAsset);

            // Get file name
            string fileSession = "CurrentFile";

            if (Session[fileSession] != null)
            {
                CloudFile model = (CloudFile)Session[fileSession];
                uploadFileOriginalName = model.OriginalName;
                fileName = model.FileName;
            }
            // Generate Streaming URL
            string smoothStreamingUri = GetStreamingOriginLocator(encodedAsset, fileName);

            // add jobid and output asset id in database
            var video = new Video();

            video.AssetId        = assetId;
            video.EncodingJobId  = job.Id;
            video.EncodedAssetId = encodedAsset.Id;
            video.LocatorUri     = smoothStreamingUri;
            video.IsEncrypted    = useAESRestriction;
            video.IndexedAssetId = ((IAsset)Session["indexingMediaAssets"]).Id;
            video.AssetFileName  = uploadFileOriginalName;
            video.text           = Session["textParsed"].ToString();
            var videoformatlist = new List <string> {
                ".mp4", ".avi", ".mkv", ".flv", ".wmv"
            };
            var audioformatlist = new List <string> {
                ".wav", ".mp3", ".aac"
            };
            var format = uploadFileOriginalName.Substring(uploadFileOriginalName.Length - 4);

            if (videoformatlist.Contains(format))
            {
                video.filetype = "video";
            }
            else if (audioformatlist.Contains(format))
            {
                video.filetype = "audio";
            }
            else
            {
                video.filetype = "other";
            }

            //  Repository dal = new Repository();
            //var result = dal.SaveVideo(video);
            SaveVideoListtoJson(video);
            if (useAESRestriction)
            {
                token = AzureMediaAsset.GetTestToken(encodedAsset.Id, encodedAsset);
            }

            // Remove session
            Session.Remove("CurrentFile");
            Session.Clear();
            // return success response
            return(Json(new
            {
                error = false,
                message = "Congratulations! Video is uploaded and pipelined for encoding, check console log for after encoding playback details.",
                assetId = assetId,
                jobId = job.Id,
                locator = smoothStreamingUri,
                encrypted = useAESRestriction,
                token = token
            }));
        }