البرنامج التعليمي: منح تطبيق Azure Function حق الوصول إلى حساب خدمات الوسائط
تحذير
سيتم إيقاف Azure Media Services في 30 يونيو 2024. لمزيد من المعلومات، راجع دليل إيقاف AMS.
لنفترض أنك تريد السماح لزوار موقع الويب أو التطبيق الخاص بك بمعرفة أنك "على الهواء" في استوديو البث الخاص بك. يمكنك تحديد متى يتم تشغيل Media Services Live Events باستخدام API خدمات الوسائط؛ ولكن قد يكون من الصعب استدعاء هذا من جهاز مضمن. بدلا من ذلك، يمكنك عرض واجهة برمجة تطبيقات HTTP لجهازك المضمن باستخدام وظائف Azure. يمكن لوظائف Azure بعد ذلك استدعاء خدمات الوسائط للحصول على حالة الحدث المباشر.
يستخدم هذا البرنامج التعليمي واجهة برمجة تطبيقات خدمات الوسائط 2020-05-01.
تسجيل الدخول إلى Azure
لاستخدام أي من الأوامر في هذه المقالة، يجب أولاً أن تسجل الدخول إلى الاشتراك الذي تريد استخدامه.
تسجيل الدخول إلى Azure. عند استخدام هذا الأمر سيُطلب منك الاشتراك الذي تريد تفعيله.
az login
تعيين اشتراك
استخدم هذا الأمر لتعيين الاشتراك الذي تريد العمل به.
تعيين اشتراك Azure باستخدام CLI
في الأمر التالي، وفّر معرف اشتراك Azure الذي تريد استخدامه لحساب خدمات الوسائط.
az account set --subscription <subscriptionName>
المتطلبات الأساسية
هام
نحثك بشدة على العمل من خلال إنشاء C# function في Azure من بداية سريعة لسطر الأوامر قبل محاولة استخدام هذا البرنامج التعليمي. وذلك لأن خطوات الإعداد المضمنة هناك نفس الخطوات المطلوبة هنا. سوف يمنحك أيضاً فرصة للعمل مع مثال بسيط يعتمد عليه هذا البرنامج التعليمي.
أسماء الموارد
قبل البدء، حدد أسماء الموارد التي ستقوم بإنشائها. يجب أن يسهل التعرف عليها كمجموعة، خاصة إذا كنت لا تخطط لاستخدامها بعد الانتهاء من الاختبار. تختلف قواعد التسمية بالنسبة إلى العديد من أنواع الموارد، لذا من الأفضل الالتزام بكل الحالات الأقل. على سبيل المثال، "mediatest1rg" لاسم مجموعة الموارد، و"mediatest1stor" لاسم حساب التخزين. استخدم نفس الأسماء لكل خطوة في هذه المقالة.
سترى هذه الأسماء مشاراً إليها في الأوامر أدناه. أسماء الموارد التي ستحتاج إليها هي:
- myRG
- myStorageAccount
- myAmsAccount
- الموقع
- myFunction: استخدام "OnAir"
- myLiveEvent: استخدم "live1"
- ipaddresses use: "0.0.0./32"
ملاحظة
يتم استخدام الواصلات أعلاه فقط لفصل الكلمات الإرشادية. وبسبب عدم تناسق تسمية الموارد في خدمات Azure، لا تستخدم الواصلات عند تسمية الموارد.
أي شيء يمثله 00000000-0000-0000-0000000000 هو المعرف المميز للمورد. عادة ما يتم إرجاع هذه القيمة بواسطة استجابة JSON. يجب نسخ استجابات JSON ولصقها في المفكرة أو محرر نصوص آخر، حيث ستحتوي هذه الاستجابات على قيم ستحتاجها لأوامر CLI اللاحقة.
كما أنك لا تنشئ اسم المنطقة. يقوم Azure بتحديد اسم المنطقة.
قائمة مناطق Azure
إذا لم تكن متأكداً من اسم المنطقة الفعلي الذي تريد استخدامه، فاستخدم هذا الأمر للحصول على قائمة:
استخدم هذا الأمر لسرد المناطق المتوفرة لحسابك.
az account list-locations --query "[].{DisplayName:displayName, Name:name}" -o table
تسلسل
يتم تنفيذ كل خطوة من الخطوات أدناه بترتيب معين؛ لأنه يتم استخدام قيمة واحدة أو أكثر من استجابات JSON في الخطوة التالية في التسلسل.
إنشاء حساب تخزين:
يجب أن يكون حساب خدمات الوسائط الذي ستقوم بإنشائه مقترناً بحساب تخزين. قم بإنشاء حساب التخزين لحساب خدمات الوسائط أولاً. ستستخدم your-storage-account-name
للخطوات اللاحقة.
إنشاء حساب Azure Storage باستخدام CLI
استخدم الأوامر التالية لإنشاء حساب Azure Storage.
لإنشاء حساب تخزين، يجب أولا إنشاء مجموعة موارد داخل موقع.
لسرد المواقع المتوفرة، استخدم الأمر التالي:
سرد المواقع المتوفرة باستخدام CLI
لسرد المواقع المتوفرة، استخدم الأمر التالي:
az account list-locations
إنشاء مجموعة موارد باستخدام CLI
لإنشاء مجموعة موارد، استخدم الأمر التالي:
az group create -n <resourceGroupName> --location chooseLocation
اختر SKU
تحتاج أيضا إلى اختيار SKU لحساب التخزين الخاص بك. يمكنك سرد حسابات التخزين.
اختر SKU من القائمة التالية: Standard_LRS، Standard_GRS، Standard_RAGRS، Standard_ZRS، Premium_LRS، Premium_ZRS، Standard_GZRS، Standard_RAGZRS.
- قم بالتغيير
myStorageAccount
إلى اسم فريد بطول أقل من 24 حرفا. - قم بالتغيير
chooseLocation
إلى المنطقة التي تريد العمل داخلها. - قم بالتغيير
chooseSKU
إلى SKU المفضل لديك.
az storage account create -n <myStorageAccount> -g <resourceGroup> --location <chooseLocation> --sku <chooseSKU>
إنشاء حساب خدمات الوسائط
الآن إنشاء حساب خدمات الوسائط. ابحث عن '
لمزيد من المعلومات حول هذا الأمر، راجع مرجع Media Services CLI.
فحص Azure Function
في هذا القسم، ستقوم بإعداد وظيفة Azure.
الحصول على الرمز
استخدم وظائف Azure لإنشاء مشروع الدالة، واسترداد التعليمة البرمجية من قالب HTTP.
func init MediaServicesLiveMonitor –dotnet
تغيير الدليل
تأكد من تغيير دليل العمل إلى دليل المشروع. وإلا ستحصل على أخطاء.
cd .\MediaServicesLiveMonitor\
قم بتسمية الدالة الخاصة بك
func new --name OnAir --template "HTTP trigger" --authlevel "anonymous"
تكوين مشروع الوظائف
تثبيت خدمات الوسائط وغيرها من الملحقات
قم بتشغيل الأمر dotnet add package في نافذة Terminal لتثبيت حزم الملحقات التي تحتاجها في مشروعك. يقوم الأمر التالي بتثبيت حزم Media Services وAzure Identity.
dotnet add package Microsoft.Azure.Management.Media
dotnet add package Azure.Identity
تحرير التعليمة البرمجية .cs OnAir
قم بتغيير الملف OnAir.cs
. قم بتغيير متغيرات subscriptionId
وresourceGroup
وmediaServicesAccountName
إلى تلك التي قررتها سابقاً.
using Azure.Core;
using Azure.Identity;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Management.Media;
using Microsoft.Azure.Management.Media.Models;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;
using Microsoft.Rest;
using System.Threading.Tasks;
namespace MediaServicesLiveMonitor
{
public static class OnAir
{
[FunctionName("OnAir")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string name = req.Query["name"];
if (string.IsNullOrWhiteSpace(name))
{
return new BadRequestObjectResult("Missing 'name' URL parameter");
}
var credential = new ManagedIdentityCredential();
var accessTokenRequest = await credential.GetTokenAsync(
new TokenRequestContext(
scopes: new string[] { "https://management.core.windows.net" + "/.default" }
)
);
ServiceClientCredentials credentials = new TokenCredentials(accessTokenRequest.Token, "Bearer");
var subscriptionId = "00000000-0000-0000-000000000000"; // Update
var resourceGroup = "<your-resource-group-name>"; // Update
var mediaServicesAccountName = "<your-media-services-account-name>"; // Update
var mediaServices = new AzureMediaServicesClient(credentials)
{
SubscriptionId = subscriptionId
};
var liveEvent = await mediaServices.LiveEvents.GetAsync(resourceGroup, mediaServicesAccountName, name);
if (liveEvent == null)
{
return new NotFoundResult();
}
return new OkObjectResult(liveEvent.ResourceState == LiveEventResourceState.Running ? "On air" : "Off air");
}
}
}
فحص تطبيق الدالة
قم بإنشاء تطبيق الوظيفة لاستضافة الوظيفة. الاسم هو نفس الاسم الذي قمت بتنزيله سابقاً، MediaServicesLiveMonitorApp
.
az functionapp create --resource-group <your-resource-group-name> --consumption-plan-location your-region --runtime dotnet --functions-version 3 --name MediaServicesLiveMonitorApp --storage-account mediatest3store --assign-identity "[system]"
ابحث عن principalId
في استجابة JSON:
{
...
"identity": {
//Note the principalId value for the following step
"principalId": "00000000-0000-0000-000000000000",
"tenantId": "00000000-0000-0000-000000000000",
"type": "SystemAssigned",
"userAssignedIdentities": null
}
...
منح حق الوصول إلى تطبيق الدالة إلى مورد حساب خدمات الوسائط
لهذا الطلب:
-
assignee
هوprincipalId
ذلك الموجود في استجابة JSON منaz functionapp create
-
scope
هوid
الموجود في استجابة JSON منaz ams account create
. اطلع على مثال استجابة JSON أعلاه.
az role assignment create --assignee 00000000-0000-0000-000000000000 --role "Media Services Account Administrator" --scope "/subscriptions/<the-subscription-id>/resourceGroups/<your-resource-group>/providers/Microsoft.Media/mediaservices/<your-media-services-account-name>"
انشر الدالة
func azure functionapp publish MediaServicesLiveMonitorApp
التحقق من الصحة
في المستعرض، انتقل إلى عنوان URL الخاص بالدالة، على سبيل المثال:
https://mediaserviceslivemonitorapp.azurewebsites.net/api/onair?name=live1
يجب أن يعرض هذا الخطأ 404 (لم يتم العثور على)؛ لأن الحدث المباشر غير موجود حتى الآن.
إنشاء حدث مباشر
az ams live-event create --resource-group test3 --account-name mediatest3 --name live1 --streaming-protocol RTMP
في المستعرض، انتقل إلى عنوان URL الخاص بالدالة، على سبيل المثال:
https://mediaserviceslivemonitorapp.azurewebsites.net/api/onair?name=live1
يجب أن يظهر هذا الآن "خارج الهواء".
بدء الحدث المباشر
إذا بدأ الحدث المباشر، يجب أن تعود الدالة "على الهواء".
az ams live-event start live1
تسمح هذه الدالة بالوصول إلى أي شخص. يعد تأمين الوصول إلى وظيفة Azure، وتوصيل مصباح "على الهواء" خارج نطاق هذا المستند.
تنظيف الموارد
إذا لم تكن تخطط لاستخدام الموارد التي أنشأتها، فاحذف مجموعة الموارد.
حذف مجموعة موارد مع CLI
az group delete --name <your-resource-group-name>
الحصول على التعليمات والدعم
يمكنك الاتصال بخدمات الوسائط مع الأسئلة أو متابعة تحديثاتنا بإحدى الطرق التالية:
- س & أ
-
موقع Stack Overflow. وضع علامة على الأسئلة باستخدام
azure-media-services
. - @MSFTAzureMediaأو استخدم @AzureSupport لطلب الدعم.
- افتح تذكرة دعم من خلال مدخل Microsoft Azure.