ابدأ بتقديم المحتوى عند الطلب باستخدام .NET SDK

media services logo


ldkjfhask;dfhj

يرشدك هذا البرنامج التعليمي خلال خطوات تنفيذ خدمة تسليم محتوى Video-on-Demand (VoD) الأساسية باستخدام تطبيق Azure Media Services (AMS) باستخدام Azure Media Services .NET SDK.

المتطلبات الأساسية

فيما يلي مطلوب لإكمال البرنامج التعليمي:

يتضمن هذا البرنامج التعليمي المهام التالية:

  1. بدء تدفق نقطة النهاية (باستخدام مدخل Microsoft Azure).
  2. إنشاء مشروع Visual Studio وتكوينه.
  3. الاتصال إلى حساب خدمات الوسائط.
  4. Upload ملف فيديو.
  5. ترميز الملف المصدر في مجموعة من ملفات MP4 معدل البت التكيفي.
  6. نشر الأصل والحصول على دفق وعناوين URL للتنزيل التدريجي.
  7. تشغيل المحتوى الخاص بك.

نظرة عامة

يرشدك هذا البرنامج التعليمي خلال خطوات تنفيذ تطبيق تسليم محتوى Video-on-Demand (VoD) باستخدام Azure Media Services (AMS) SDK ل .NET.

يقدم البرنامج التعليمي سير عمل خدمات الوسائط الأساسية وكائنات البرمجة والمهام الأكثر شيوعا المطلوبة لتطوير خدمات الوسائط. عند الانتهاء من البرنامج التعليمي، ستكون قادرا على دفق أو تنزيل نموذج ملف وسائط قمت بتحميله وترميزه وتنزيله تدريجيا.

نموذج AMS

تظهر الصورة التالية بعض الكائنات الأكثر استخداما عند تطوير تطبيقات VoD مقابل نموذج Media Services OData.

انقر فوق الصورة لعرضها بالحجم الكامل.

Diagram showing some of the most commonly used objects in the Azure Media Services object data model for developing Video on Demand applications.

يمكنك عرض النموذج بأكمله هنا.

بدء بث نقاط النهاية باستخدام مدخل Microsoft Azure

عند العمل مع Azure Media Services، فإن أحد السيناريوهات الأكثر شيوعا هو تقديم الفيديو عبر تدفق معدل البت التكيفي. توفر خدمات الوسائط حزمة ديناميكية، والتي تسمح لك بتسليم المحتوى المشفرة MP4 معدل البت التكيفي بتنسيقات الدفق التي تدعمها خدمات الوسائط (MPEG DASH، HLS، Smooth Streaming) في الوقت المناسب، دون الحاجة إلى تخزين الإصدارات المحزمة مسبقا من كل تنسيق من تنسيقات الدفق هذه.

ملاحظة

عند إنشاء حساب AMS الخاص بك، تتم إضافة نقطة نهاية دفق افتراضية إلى حسابك في حالة الإيقاف . لبدء دفق المحتوى والاستفادة من التعبئة والتغليف الديناميكي والتشفير الديناميكي، يجب أن تكون نقطة نهاية الدفق التي تريد دفق المحتوى منها في حالة التشغيل .

لبدء نقطة نهاية الدفق، قم بما يلي:

  1. تسجيل الدخول في مدخل Microsoft Azure.

  2. في نافذة الإعدادات، انقر فوق دفق نقاط النهاية.

  3. انقر فوق نقطة نهاية البث الافتراضية.

    تظهر نافذة تفاصيل نقطة النهاية المتدفقة الافتراضية.

  4. انقر فوق أيقونة البدء.

  5. انقر فوق الزر حفظ لحفظ التغييرات.

إنشاء مشروع Visual Studio وتكوينه

  1. قم بإعداد بيئة التطوير الخاصة بك وملء ملف app.config بمعلومات الاتصال، كما هو موضح في تطوير خدمات الوسائط باستخدام .NET.
  2. أنشئ مجلدا جديدا (يمكن أن يكون المجلد في أي مكان على محرك الأقراص المحلي) وانسخ ملفا .mp4 تريد ترميزه ودفقه أو تنزيله تدريجيا. في هذا المثال، يتم استخدام مسار "C:\VideoFiles".

الاتصال إلى حساب خدمات الوسائط

عند استخدام خدمات الوسائط مع .NET، يجب استخدام فئة CloudMediaContext لمعظم مهام برمجة خدمات الوسائط: الاتصال بحساب خدمات الوسائط؛ إنشاء الكائنات التالية وتحديثها والوصول إليها وحذفها: الأصول وملفات الأصول والوظائف ونهج الوصول والمحددات وما إلى ذلك.

الكتابة فوق فئة البرنامج الافتراضية مع التعليمات البرمجية التالية: توضح التعليمات البرمجية كيفية قراءة قيم الاتصال من ملف App.config وكيفية إنشاء كائن CloudMediaContext للاتصال بخدمات الوسائط. لمزيد من المعلومات، راجع الاتصال بواجهة برمجة تطبيقات خدمات الوسائط.

تأكد من تحديث اسم الملف والمسار إلى المكان الذي يوجد فيه ملف الوسائط.

تستدعي الدالة Main الطرق التي سيتم تعريفها بشكل أكبر في هذا القسم.

ملاحظة

ستتلقى أخطاء التحويل البرمجي حتى تضيف تعريفات لكافة الدالات التي تم تعريفها لاحقا في هذه المقالة.

	class Program
	{
	    // Read values from the App.config file.
        private static readonly string _AADTenantDomain =
            ConfigurationManager.AppSettings["AMSAADTenantDomain"];
        private static readonly string _RESTAPIEndpoint =
            ConfigurationManager.AppSettings["AMSRESTAPIEndpoint"];
        private static readonly string _AMSClientId =
            ConfigurationManager.AppSettings["AMSClientId"];
        private static readonly string _AMSClientSecret =
            ConfigurationManager.AppSettings["AMSClientSecret"];

	    private static CloudMediaContext _context = null;

	    static void Main(string[] args)
	    {
        try
        {
            AzureAdTokenCredentials tokenCredentials = 
                new AzureAdTokenCredentials(_AADTenantDomain,
                    new AzureAdClientSymmetricKey(_AMSClientId, _AMSClientSecret),
                    AzureEnvironments.AzureCloudEnvironment);

            var tokenProvider = new AzureAdTokenProvider(tokenCredentials);

            _context = new CloudMediaContext(new Uri(_RESTAPIEndpoint), tokenProvider);

            // Add calls to methods defined in this section.
            // Make sure to update the file name and path to where you have your media file.
            IAsset inputAsset =
            UploadFile(@"C:\VideoFiles\BigBuckBunny.mp4", AssetCreationOptions.None);

            IAsset encodedAsset =
            EncodeToAdaptiveBitrateMP4s(inputAsset, AssetCreationOptions.None);

            PublishAssetGetURLs(encodedAsset);
        }
        catch (Exception exception)
        {
            // Parse the XML error message in the Media Services response and create a new
            // exception with its content.
            exception = MediaServicesExceptionParser.Parse(exception);

            Console.Error.WriteLine(exception.Message);
        }
        finally
        {
            Console.ReadLine();
        }
	    }

إنشاء أصل جديد وتحميل ملف فيديو

في خدمات الوسائط، يمكنك تحميل (أو استيعاب) ملفاتك الرقمية في أصل. يمكن أن يحتوي كيان Asset على الفيديو والصوت والصور ومجموعات الصور المصغرة والمسارات النصية وملفات التسمية التوضيحية المغلقة (وبيانات التعريف حول هذه الملفات.) بمجرد تحميل الملفات، يتم تخزين المحتوى الخاص بك بشكل آمن في السحابة لمزيد من المعالجة والتدفق. تسمى الملفات الموجودة في الأصل ملفات الأصول.

يستدعي أسلوب UploadFile المعرف أدناه CreateFromFile (المحدد في ملحقات .NET SDK). ينشئ CreateFromFile أصل جديد يتم فيه تحميل الملف المصدر المحدد.

يأخذ أسلوب CreateFromFileAssetCreationOptions، والذي يتيح لك تحديد أحد خيارات إنشاء الأصول التالية:

  • بلا - لا يتم استخدام أي تشفير. هذه هي القيمة الافتراضية. لاحظ أنه عند استخدام هذا الخيار، لا يكون المحتوى الخاص بك محميا أثناء النقل أو في وضع الثبات في التخزين. إذا كنت تخطط لتسليم MP4 باستخدام التنزيل التدريجي، فاستخدم هذا الخيار.
  • StorageEncrypted - استخدم هذا الخيار لتشفير المحتوى الواضح محليا باستخدام تشفير Advanced Encryption Standard (AES)-256 بت، والذي يقوم بعد ذلك بتحميله إلى Azure Storage حيث يتم تخزينه مشفرا في حالة الثبات. يتم إلغاء تشفير الأصول المحمية بتشفير التخزين تلقائيا ووضعها في نظام ملفات مشفر قبل الترميز، وإعادة تشفيرها اختياريا قبل التحميل مرة أخرى كأصل إخراج جديد. حالة الاستخدام الأساسية لتشفير التخزين هي عندما تريد تأمين ملفات وسائط الإدخال عالية الجودة مع تشفير قوي في وضع الثبات على القرص.
  • CommonEncryptionProtected - استخدم هذا الخيار إذا كنت تقوم بتحميل محتوى تم تشفيره وحمايته بالفعل باستخدام التشفير الشائع أو PlayReady DRM (على سبيل المثال، التدفق السلس المحمي ب PlayReady DRM).
  • EnvelopeEncryptionProtected - استخدم هذا الخيار إذا كنت تقوم بتحميل HLS مشفر باستخدام AES. لاحظ أنه يجب ترميز الملفات وتشفيرها بواسطة Transform Manager.

يتيح لك أسلوب CreateFromFile أيضا تحديد رد اتصال من أجل الإبلاغ عن تقدم تحميل الملف.

في المثال التالي، نحدد بلا لخيارات الأصول.

أضف الطريقة التالية إلى فئة البرنامج.

    static public IAsset UploadFile(string fileName, AssetCreationOptions options)
    {
        IAsset inputAsset = _context.Assets.CreateFromFile(
            fileName,
            options,
            (af, p) =>
            {
                Console.WriteLine("Uploading '{0}' - Progress: {1:0.##}%", af.Name, p.Progress);
            });

        Console.WriteLine("Asset {0} created.", inputAsset.Id);

        return inputAsset;
    }

ترميز الملف المصدر في مجموعة من ملفات MP4 معدل البت التكيفي

بعد استيعاب الأصول في خدمات الوسائط، يمكن ترميز الوسائط، وتحويلها، ووضع علامة مائية عليها، وما إلى ذلك، قبل تسليمها إلى العملاء. تتم جدولة هذه الأنشطة وتشغيلها مقابل مثيلات دور خلفية متعددة لضمان الأداء العالي والتوافر. تسمى هذه الأنشطة الوظائف، وتتكون كل وظيفة من المهام الذرية التي تقوم بالعمل الفعلي على ملف الأصول.

كما ذكرنا سابقا، عند العمل مع Azure Media Services، فإن أحد السيناريوهات الأكثر شيوعا هو تقديم تدفق معدل البت التكيفي لعملائك. يمكن لخدمات الوسائط حزم مجموعة من ملفات MP4 معدل البت التكيفي ديناميكيا في أحد التنسيقات التالية: HTTP Live Streaming (HLS) وS smooth Streaming وMPEG DASH.

للاستفادة من التعبئة والتغليف الديناميكي، تحتاج إلى ترميز أو ترميز ملف mezzanine (المصدر) الخاص بك في مجموعة من ملفات MP4 معدل البت التكيفي أو ملفات التدفق السلس لمرات البت التكيفية.

توضح التعليمات البرمجية التالية كيفية إرسال مهمة ترميز. تحتوي المهمة على مهمة واحدة تحدد تحويل ملف mezzanine إلى مجموعة من ملفات MP4 معدل البت التكيفية باستخدام Media Encoder Standard. ترسل التعليمات البرمجية المهمة وتنتظر حتى تكتمل.

بمجرد اكتمال المهمة، ستكون قادرا على دفق الأصول الخاصة بك أو تنزيل ملفات MP4 التي تم إنشاؤها نتيجة تحويل الترميز تدريجيا.

أضف الطريقة التالية إلى فئة البرنامج.

    static public IAsset EncodeToAdaptiveBitrateMP4s(IAsset asset, AssetCreationOptions options)
    {

        // Prepare a job with a single task to transcode the specified asset
        // into a multi-bitrate asset.

        IJob job = _context.Jobs.CreateWithSingleTask(
            "Media Encoder Standard",
            "Adaptive Streaming",
            asset,
            "Adaptive Bitrate MP4",
            options);

        Console.WriteLine("Submitting transcoding job...");


        // Submit the job and wait until it is completed.
        job.Submit();

        job = job.StartExecutionProgressTask(
            j =>
            {
                Console.WriteLine("Job state: {0}", j.State);
                Console.WriteLine("Job progress: {0:0.##}%", j.GetOverallProgress());
            },
            CancellationToken.None).Result;

        Console.WriteLine("Transcoding job finished.");

        IAsset outputAsset = job.OutputMediaAssets[0];

        return outputAsset;
    }

نشر الأصل والحصول على عناوين URL للبث والتنزيل التدريجي

لدفق أصل أو تنزيله، تحتاج أولا إلى "نشره" عن طريق إنشاء محدد موقع. توفر محددات المواقع الوصول إلى الملفات الموجودة في الأصل. تدعم خدمات الوسائط نوعين من محددات المواقع: محددات مواقع OnDemandOrigin، المستخدمة لبث الوسائط (على سبيل المثال، MPEG DASH أو HLS أو Smooth Streaming) ومحددات مواقع توقيع الوصول (SAS)، المستخدمة لتنزيل ملفات الوسائط.

بعض التفاصيل حول تنسيقات URL

بعد إنشاء محددات المواقع، يمكنك إنشاء عناوين URL التي سيتم استخدامها لدفق ملفاتك أو تنزيلها. العينة في هذا البرنامج التعليمي إخراج عناوين URL التي يمكنك لصقها في المستعرضات المناسبة. يقدم هذا القسم فقط أمثلة قصيرة لما تبدو عليه التنسيقات المختلفة.

يحتوي عنوان URL المتدفق ل MPEG DASH على التنسيق التالي:

{streaming endpoint name-media services account name}.streaming.mediaservices.windows.net/{locator ID}/{filename}.ism/Manifest**(format=mpd-time-csf)**

يحتوي عنوان URL المتدفق ل HLS على التنسيق التالي:

{streaming endpoint name-media services account name}.streaming.mediaservices.windows.net/{locator ID}/{filename}.ism/Manifest**(format=m3u8-aapl)**

يحتوي عنوان URL المتدفق ل Smooth Streaming على التنسيق التالي:

{streaming endpoint name-media services account name}.streaming.mediaservices.windows.net/{locator ID}/{filename}.ism/Manifest

يحتوي عنوان URL SAS المستخدم لتنزيل الملفات على التنسيق التالي:

{blob container name}/{asset name}/{file name}/{SAS signature}

توفر ملحقات Media Services .NET SDK أساليب مساعدة ملائمة ترجع عناوين URL المنسقة للأصل المنشور.

تستخدم التعليمات البرمجية التالية .NET SDK Extensions لإنشاء محددات المواقع والحصول على عناوين URL للتنزيل المتدفق والتدريجي. توضح التعليمات البرمجية أيضا كيفية تنزيل الملفات إلى مجلد محلي.

أضف الطريقة التالية إلى فئة البرنامج.

    static public void PublishAssetGetURLs(IAsset asset)
    {
        // Publish the output asset by creating an Origin locator for adaptive streaming,
        // and a SAS locator for progressive download.

        _context.Locators.Create(
            LocatorType.OnDemandOrigin,
            asset,
            AccessPermissions.Read,
            TimeSpan.FromDays(30));

        _context.Locators.Create(
            LocatorType.Sas,
            asset,
            AccessPermissions.Read,
            TimeSpan.FromDays(30));


        IEnumerable<IAssetFile> mp4AssetFiles = asset
                .AssetFiles
                .ToList()
                .Where(af => af.Name.EndsWith(".mp4", StringComparison.OrdinalIgnoreCase));

        // Get the Smooth Streaming, HLS and MPEG-DASH URLs for adaptive streaming,
        // and the Progressive Download URL.
        Uri smoothStreamingUri = asset.GetSmoothStreamingUri();
        Uri hlsUri = asset.GetHlsUri();
        Uri mpegDashUri = asset.GetMpegDashUri();

        // Get the URls for progressive download for each MP4 file that was generated as a result
        // of encoding.
        List<Uri> mp4ProgressiveDownloadUris = mp4AssetFiles.Select(af => af.GetSasUri()).ToList();


        // Display  the streaming URLs.
        Console.WriteLine("Use the following URLs for adaptive streaming: ");
        Console.WriteLine(smoothStreamingUri);
        Console.WriteLine(hlsUri);
        Console.WriteLine(mpegDashUri);
        Console.WriteLine();

        // Display the URLs for progressive download.
        Console.WriteLine("Use the following URLs for progressive download.");
        mp4ProgressiveDownloadUris.ForEach(uri => Console.WriteLine(uri + "\n"));
        Console.WriteLine();

        // Download the output asset to a local folder.
        string outputFolder = "job-output";
        if (!Directory.Exists(outputFolder))
        {
            Directory.CreateDirectory(outputFolder);
        }

        Console.WriteLine();
        Console.WriteLine("Downloading output asset files to a local folder...");
        asset.DownloadToFolder(
            outputFolder,
            (af, p) =>
            {
                Console.WriteLine("Downloading '{0}' - Progress: {1:0.##}%", af.Name, p.Progress);
            });

        Console.WriteLine("Output asset files available at '{0}'.", Path.GetFullPath(outputFolder));
    }

الاختبار عن طريق تشغيل المحتوى الخاص بك

بمجرد تشغيل البرنامج المحدد في القسم السابق، سيتم عرض عناوين URL المشابهة للآتي في نافذة وحدة التحكم.

عناوين URL للبث التكيفي:

دفق سلس

http://amstestaccount001.streaming.mediaservices.windows.net/ebf733c4-3e2e-4a68-b67b-cc5159d1d7f2/BigBuckBunny.ism/manifest

HLS

http://amstestaccount001.streaming.mediaservices.windows.net/ebf733c4-3e2e-4a68-b67b-cc5159d1d7f2/BigBuckBunny.ism/manifest(format=m3u8-aapl)

MPEG DASH

http://amstestaccount001.streaming.mediaservices.windows.net/ebf733c4-3e2e-4a68-b67b-cc5159d1d7f2/BigBuckBunny.ism/manifest(format=mpd-time-csf)

عناوين URL للتنزيل التدريجي (الصوت والفيديو).

https://storagetestaccount001.blob.core.windows.net/asset-38058602-a4b8-4b33-b9f0-6880dc1490ea/BigBuckBunny_H264_650kbps_AAC_und_ch2_96kbps.mp4?sv=2012-02-12&sr=c&si=166d5154-b801-410b-a226-ee2f8eac1929&sig=P2iNZJAvAWpp%2Bj9yV6TQjoz5DIIaj7ve8ARynmEM6Xk%3D&se=2015-02-14T01:13:05Z

https://storagetestaccount001.blob.core.windows.net/asset-38058602-a4b8-4b33-b9f0-6880dc1490ea/BigBuckBunny_H264_400kbps_AAC_und_ch2_96kbps.mp4?sv=2012-02-12&sr=c&si=166d5154-b801-410b-a226-ee2f8eac1929&sig=P2iNZJAvAWpp%2Bj9yV6TQjoz5DIIaj7ve8ARynmEM6Xk%3D&se=2015-02-14T01:13:05Z

https://storagetestaccount001.blob.core.windows.net/asset-38058602-a4b8-4b33-b9f0-6880dc1490ea/BigBuckBunny_H264_3400kbps_AAC_und_ch2_96kbps.mp4?sv=2012-02-12&sr=c&si=166d5154-b801-410b-a226-ee2f8eac1929&sig=P2iNZJAvAWpp%2Bj9yV6TQjoz5DIIaj7ve8ARynmEM6Xk%3D&se=2015-02-14T01:13:05Z

https://storagetestaccount001.blob.core.windows.net/asset-38058602-a4b8-4b33-b9f0-6880dc1490ea/BigBuckBunny_H264_2250kbps_AAC_und_ch2_96kbps.mp4?sv=2012-02-12&sr=c&si=166d5154-b801-410b-a226-ee2f8eac1929&sig=P2iNZJAvAWpp%2Bj9yV6TQjoz5DIIaj7ve8ARynmEM6Xk%3D&se=2015-02-14T01:13:05Z

https://storagetestaccount001.blob.core.windows.net/asset-38058602-a4b8-4b33-b9f0-6880dc1490ea/BigBuckBunny_H264_1500kbps_AAC_und_ch2_96kbps.mp4?sv=2012-02-12&sr=c&si=166d5154-b801-410b-a226-ee2f8eac1929&sig=P2iNZJAvAWpp%2Bj9yV6TQjoz5DIIaj7ve8ARynmEM6Xk%3D&se=2015-02-14T01:13:05Z

https://storagetestaccount001.blob.core.windows.net/asset-38058602-a4b8-4b33-b9f0-6880dc1490ea/BigBuckBunny_H264_1000kbps_AAC_und_ch2_96kbps.mp4?sv=2012-02-12&sr=c&si=166d5154-b801-410b-a226-ee2f8eac1929&sig=P2iNZJAvAWpp%2Bj9yV6TQjoz5DIIaj7ve8ARynmEM6Xk%3D&se=2015-02-14T01:13:05Z

https://storagetestaccount001.blob.core.windows.net/asset-38058602-a4b8-4b33-b9f0-6880dc1490ea/BigBuckBunny_AAC_und_ch2_96kbps.mp4?sv=2012-02-12&sr=c&si=166d5154-b801-410b-a226-ee2f8eac1929&sig=P2iNZJAvAWpp%2Bj9yV6TQjoz5DIIaj7ve8ARynmEM6Xk%3D&se=2015-02-14T01:13:05Z

https://storagetestaccount001.blob.core.windows.net/asset-38058602-a4b8-4b33-b9f0-6880dc1490ea/BigBuckBunny_AAC_und_ch2_56kbps.mp4?sv=2012-02-12&sr=c&si=166d5154-b801-410b-a226-ee2f8eac1929&sig=P2iNZJAvAWpp%2Bj9yV6TQjoz5DIIaj7ve8ARynmEM6Xk%3D&se=2015-02-14T01:13:05Z

لدفق الفيديو، الصق عنوان URL في مربع نص URL في Azure Media Services Player.

لاختبار التنزيل التدريجي، الصق عنوان URL في مستعرض (على سبيل المثال، Internet Explorer أو Chrome أو Safari).

للمزيد من المعلومات، راجع المواضيع الآتية:

عينة التنزيل

يحتوي نموذج التعليمات البرمجية التالي على التعليمات البرمجية التي قمت بإنشائها في هذا البرنامج التعليمي: نموذج.