Videolarınızı karşıya yükleme ve dizinleme

Videonuz karşıya yüklendikten sonra, medya için Azure video Çözümleyicisi (eskiden Video Indexer), videoyu (isteğe bağlı olarak) kodluyor (makalede ele alınmıştır). Medya hesabı için bir video Çözümleyicisi oluştururken, ücretsiz bir deneme hesabı (örneğin, belirli bir sayıda dizin oluşturma dakikası alırsınız) veya ücretli bir seçenek (Kota ile sınırlı olmamak üzere) arasından seçim yapabilirsiniz. Ücretsiz deneme ile medya için video Çözümleyicisi, Web sitesi kullanıcılarına en fazla 600 dakikalık ücretsiz dizin ve API kullanıcılarına en fazla 2400 dakikalık ücretsiz dizin sağlar. Ücretli seçenekle, Azure aboneliğinize ve bir Azure Media Services hesabına bağlımedya hesabı Için bir video Çözümleyicisi oluşturacaksınız. Dizin oluşturma için ödeme yaparsınız. daha fazla bilgi için bkz. Media Services fiyatlandırması.

Medya API 'SI için video Çözümleyicisi ile videoları karşıya yüklerken aşağıdaki karşıya yükleme seçeneklerine sahip olursunuz:

  • Videonuzu bir URL'den karşıya yükleyin (tercih edilir).
  • video dosyasını istek gövdesinde bir bayt dizisi olarak gönderin,
  • Varlık kimliğini sağlayarak mevcut Azure Media Services varlığını kullanın (yalnızca ücretli hesaplarda desteklenir).

Makalesinde, bu seçeneklerle videolarınızı karşıya yükleme ve dizin oluşturma işlemlerinin nasıl yapılacağı gösterilmektedir:

  • Medya için video Çözümleyicisi Web sitesi
  • Medya API 'Leri için video Çözümleyicisi

Medya için video Çözümleyicisi için desteklenen dosya biçimleri

Medya için video Çözümleyicisi ile kullanabileceğiniz dosya biçimlerinin bir listesi için Giriş kapsayıcı/dosya biçimleri makalesine bakın.

Video dosyaları depolaması

  • Ücretli video Çözümleyicisi için, Azure aboneliğinize ve bir Azure Media Services hesabına bağlı medya hesabı için bir video Çözümleyicisi oluşturursunuz. Daha fazla bilgi için bkz. Azure 'a bağlı medya hesabı Için video Çözümleyicisi oluşturma.
  • Video dosyaları Azure Media Services tarafından Azure depolama 'da depolanır. Zaman sınırlaması yoktur.
  • Video ve ses dosyalarınızı her zaman, medya için video Çözümleyicisi tarafından çıkarılan tüm meta verileri ve öngörüleri de silebilirsiniz. Medya için video Çözümleyicisi 'nden bir dosyayı sildikten sonra, dosya ve meta verileri ve öngörüleri medya için video Çözümleyicisi 'nden kalıcı olarak kaldırılır. Ancak, Azure depolama 'da kendi yedekleme çözümünüzü uyguladıysanız, dosya Azure depolama alanında kalır.
  • Karşıya yükleme işlemi, medya için video Çözümleyicisi Web sitesini veya karşıya yükleme API 'sini kullanmayı ne olursa olsun, videonun kalıcılığı aynı olur.

Medya için video Çözümleyicisi Web sitesini kullanarak video yükleme ve dizin oluşturma

Not

Videonun adı 80 karakterden uzun olamaz.

  1. Medya Için video Çözümleyicisi Web sitesinde oturum açın.

  2. Karşıya video yüklemek için Karşıya Yükle düğme veya bağlantısına basın.

    Karşıya yükle

  3. Videonuz karşıya yüklendikten sonra medya için video Çözümleyicisi, videoyu dizine almayı ve çözümlemeyi başlatır.

    Karşıya yükleme ilerleme durumu

  4. Medya için video Çözümleyicisi oluşturulduktan sonra, videonuzun bağlantısını içeren bir e-posta alacaksınız ve videonuzda nelerin bulunmuştur ilgili kısa bir açıklama alırsınız. Örnek: kişiler, konular, OCR’ler.

API ile karşıya yükleme ve Dizin

Videoları karşıya yüklemek ve bir URL 'ye göre dizinlemek için video yükleme API 'sini kullanın. Aşağıdaki kod örneği, bayt dizisinin nasıl karşıya yükleneceğini gösteren açıklamalı dışarı çıkan kodu içerir.

Yapılandırmalar ve parametreler

Bu bölümde, isteğe bağlı parametrelerin bazıları ve ayarlanmalarının ne zaman gerekeceği açıklanmaktadır. En güncel params bilgileri için karşıya yükleme videosu API 'sine bakın.

externalID

Bu parametre, video ile ilişkilendirilecek bir kimlik belirtmenize olanak sağlar. Bu kimlik, dış "Video İçerik Yönetimi" (VCM) sistemiyle tümleştirmede kullanılabilir. Media Portal için video Çözümleyicisi 'nde bulunan videolar, belirtilen dış KIMLIK kullanılarak aranabilir.

callbackUrl

Müşteriye (POST isteği kullanarak) aşağıdaki olaylar hakkında bildirim sağlamak için kullanılan bir URL:

  • Dizin oluşturma durumu değişikliği:
    • Özellikler:

      Ad Açıklama
      kimlik Video kimliği
      state Video durumu
    • Örnek: https: / /test.com/notifyme?projectName=MyProject&id=1234abcd&state=processed

  • Videoda tanımlanan kişi:
    • Özellikler

      Ad Açıklama
      kimlik Video kimliği
      faceId Video dizininde görünen yüz kimliği
      knownPersonId Yüz modeli içinde benzersiz olan kişi kimliği
      personName Kişinin adı
      • Örnek: https: / /test.com/notifyme?projectName=MyProject&id=1234abcd&faceid=12&knownPersonId=ARAK84350-89B7-4262-861C-3CAC796542A5&personName=Inigo_Montoya
Diğer önemli noktalar
  • Medya için video Çözümleyicisi, özgün URL 'de belirtilen mevcut parametreleri döndürür.
  • Belirtilen URL kodlanmalıdır.

indexingPreset

Ses veya video dosyanıza uygulamak istediğiniz AI grubunu tanımlamak için bu parametreyi kullanın. Bu parametre, dizinleme işlemini yapılandırmak için kullanılır. Aşağıdaki değerleri belirtebilirsiniz:

  • AudioOnly – Yalnızca ses kullanarak öngörüleri dizine alın ve ayıklayın (video yok sayılıyor).

  • VideoOnly -Yalnızca video kullanarak öngörüleri dizine alın ve ayıklayın (ses yok sayılıyor).

  • Default – Hem ses hem de video kullanarak öngörüleri dizine alın ve ayıklayın.

  • DefaultWithNoiseReduction – Ses akışına gürültü azaltma algoritmaları uygulanırken hem ses hem de videodan öngörüleri dizine alın ve ayıklayın.

    DefaultWithNoiseReductionDeğer artık varsayılan önayar (kullanım dışı) ile eşlenir.

  • BasicAudio -Yalnızca temel ses özellikleri (döküm, çeviri, biçim çıkış alt yazıları ve alt yazılar) dahil olmak üzere yalnızca ses (video yok sayılıyor) kullanarak öngörüleri dizine alın ve ayıklayın.

  • AdvancedAudio -Standart ses analizine ek olarak gelişmiş ses özellikleri (ses olayı algılama) dahil olmak üzere yalnızca ses kullanarak öngörüleri dizine alın ve ayıklayın.

  • AdvancedVideo -Standart video analizine ek olarak gelişmiş video özellikleri (gözlemlenen Insanlar Izleme) dahil olmak üzere yalnızca video kullanarak öngörüleri dizine alın ve ayıklayın.

  • AdvancedVideoAndAudio -Hem gelişmiş ses hem de gelişmiş video analizini kullanarak öngörüleri dizine alın ve ayıklayın.

Not

Gelişmiş Önayarlar (yukarıda listelenmiştir) genel önizlemede olan modelleri içerir. Bu modeller GA 'ye ulaştıktan sonra fiyata yönelik etkileri olabilir.

Video Indexer, sesin en fazla iki parçasını içerir. Dosyada daha fazla ses parçası varsa, bunlar tek bir izleme olarak kabul edilir.
Parçaları ayrı olarak dizinlemek istiyorsanız ilgili ses dosyasını ayıklamanız ve olarak dizinetmeniz gerekir AudioOnly .

Fiyat, seçilen dizinleme seçeneğine bağlıdır. Daha fazla bilgi için Media Services fiyatlandırmasınabakın.

Priority

Videolar, ortamları için, önceliklerine göre video Çözümleyicisi tarafından dizinlenir. Dizin önceliğini belirtmek için Priority parametresini kullanın. Şu değerler geçerlidir: düşük, normal (varsayılan) ve yüksek.

Priority parametresi yalnızca ücretli hesaplar için desteklenir.

streamingPreset

Videonuz karşıya yüklendikten sonra medya için video Çözümleyicisi, isteğe bağlı olarak videoyu kodluyor. Video Indexer, ardından dizinlemeye ve videoyu analiz etmeye geçer. Medya için video Çözümleyicisi tamamlandığında, video KIMLIĞIYLE bir bildirim alacaksınız.

Videoyu karşıya yükleme veya Videoyu Yeniden Dizinleme API'sini kullanırken isteğe bağlı parametrelerden biri de streamingPreset parametresidir. streamingPreset parametresini Default, SingleBitrate veya AdaptiveBitrate olarak ayarlarsanız kodlama işlemi tetiklenir. Dizinleme ve kodlama işleri tamamlandıktan sonra video yayımlanır. Böylece videonuzun akışını da yapabilirsiniz. Video akışı yapmak istediğiniz Akış Uç Noktası Çalışıyor durumunda olmalıdır.

Tekbit hızı için standart kodlayıcı maliyeti çıkış başına uygulanır. Video yüksekliği 720 ' den büyükse veya eşitse, medya için video Çözümleyicisi 1280x720 olarak kodluyor. Aksi takdirde, 640x468 olarak. Varsayılan ayar, içerik duyarlı kodlanıyor.

Dizin oluşturma ve kodlama işlerini çalıştırmak için, medya Için video Çözümleyicisi hesabınıza bağlı Azure Media Services hesabıayrılmış birimler gerektirir. Daha fazla bilgi için bkz. Medya İşlemeyi Ölçeklendirme. Bunlar işlem gücü kullanımı yoğun işler olduğundan S3 türü birimlerin kullanılması önemle tavsiye edilir. Ayrılmış birim sayısı, paralel olarak çalıştırılabilecek en fazla iş sayısını tanımlar. Önerilen temel kullanım 10 S3 ayrılmış birimdir.

Videonuzu yalnızca dizinlemek istiyorsanız ve kodlamayacaksanız streamingPreset parametresini NoStreaming olarak ayarlayın.

videoUrl

Dizinlenecek video/ses dosyasının URL'si. URL bir medya dosyasına yönlendirmelidir (HTML sayfaları desteklenmez). Dosya, URI'nin parçası olarak sunulan bir erişim belirteci tarafından korunabilir ve dosyayı sunan uç noktanın güvenliği TLS 1.2 veya üzeri bir sürümle sağlanmalıdır. URL’nin kodlanması gerekir.

videoUrlBelirtilmemişse, medya Için video Çözümleyicisi dosyayı çok parçalı/form gövde içeriği olarak geçirmenize bekliyor.

Kod örneği

Aşağıdaki C# kod parçacığı, medya API 'Lerinin tüm video Çözümleyicisinin kullanımını birlikte gösterir.

Aşağıdaki kod örneğini çalıştırma yönergeleri

Bu kodu geliştirme platforma kopyalayıp iki parametre sağlayabilirsiniz: API Management kimlik doğrulaması anahtarı ve video URL'si.

  • API anahtarı – API anahtarı, Medya için Video Çözümleyicisi hesabınız üzerinde işlem gerçekleştirmek üzere erişim belirteci alasınız.

    API anahtarınızı almak için şu akışın üzerinden gidin:

  • Video URL'si– Dizine atıl olacak video/ses dosyasının URL'si. URL bir medya dosyasına yönlendirmelidir (HTML sayfaları desteklenmez). Dosya, URI'nin parçası olarak sunulan bir erişim belirteci tarafından korunabilir ve dosyayı sunan uç noktanın güvenliği TLS 1.2 veya üzeri bir sürümle sağlanmalıdır. URL’nin kodlanması gerekir.

Kod örneğini başarıyla çalıştırmanın sonucu bir içgörü pencere öğesi URL'si ve sırasıyla karşıya yüklenen içgörüleri ve videoyu incelemenize olanak sağlayan bir oynatıcı pencere öğesi URL'si içerir.

public async Task Sample()
{
    var apiUrl = "https://api.videoindexer.ai";
    var apiKey = "..."; // replace with API key taken from https://aka.ms/viapi

    System.Net.ServicePointManager.SecurityProtocol =
        System.Net.ServicePointManager.SecurityProtocol | System.Net.SecurityProtocolType.Tls12;

    // create the http client
    var handler = new HttpClientHandler();
    handler.AllowAutoRedirect = false;
    var client = new HttpClient(handler);
    client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", apiKey);

    // obtain account information and access token
    string queryParams = CreateQueryString(
        new Dictionary<string, string>()
        {
            {"generateAccessTokens", "true"},
            {"allowEdit", "true"},
        });
    HttpResponseMessage result = await client.GetAsync($"{apiUrl}/auth/trial/Accounts?{queryParams}");
    var json = await result.Content.ReadAsStringAsync();
    var accounts = JsonConvert.DeserializeObject<AccountContractSlim[]>(json);
    
    // take the relevant account, here we simply take the first, 
    // you can also get the account via accounts.First(account => account.Id == <GUID>);
    var accountInfo = accounts.First();

    // we will use the access token from here on, no need for the apim key
    client.DefaultRequestHeaders.Remove("Ocp-Apim-Subscription-Key");

    // upload a video
    var content = new MultipartFormDataContent();
    Console.WriteLine("Uploading...");
    // get the video from URL
    var videoUrl = "VIDEO_URL"; // replace with the video URL

    // as an alternative to specifying video URL, you can upload a file.
    // remove the videoUrl parameter from the query params below and add the following lines:
    //FileStream video =File.OpenRead(Globals.VIDEOFILE_PATH);
    //byte[] buffer =new byte[video.Length];
    //video.Read(buffer, 0, buffer.Length);
    //content.Add(new ByteArrayContent(buffer));

    queryParams = CreateQueryString(
        new Dictionary<string, string>()
        {
            {"accessToken", accountInfo.AccessToken},
            {"name", "video_name"},
            {"description", "video_description"},
            {"privacy", "private"},
            {"partition", "partition"},
            {"videoUrl", videoUrl},
        });
    var uploadRequestResult = await client.PostAsync($"{apiUrl}/{accountInfo.Location}/Accounts/{accountInfo.Id}/Videos?{queryParams}", content);
    var uploadResult = await uploadRequestResult.Content.ReadAsStringAsync();

    // get the video ID from the upload result
    string videoId = JsonConvert.DeserializeObject<dynamic>(uploadResult)["id"];
    Console.WriteLine("Uploaded");
    Console.WriteLine("Video ID:");
    Console.WriteLine(videoId);

    // wait for the video index to finish
    while (true)
    {
        await Task.Delay(10000);

        queryParams = CreateQueryString(
            new Dictionary<string, string>()
            {
                {"accessToken", accountInfo.AccessToken},
                {"language", "English"},
            });

        var videoGetIndexRequestResult = await client.GetAsync($"{apiUrl}/{accountInfo.Location}/Accounts/{accountInfo.Id}/Videos/{videoId}/Index?{queryParams}");
        var videoGetIndexResult = await videoGetIndexRequestResult.Content.ReadAsStringAsync();

        string processingState = JsonConvert.DeserializeObject<dynamic>(videoGetIndexResult)["state"];

        Console.WriteLine("");
        Console.WriteLine("State:");
        Console.WriteLine(processingState);

        // job is finished
        if (processingState != "Uploaded" && processingState != "Processing")
        {
            Console.WriteLine("");
            Console.WriteLine("Full JSON:");
            Console.WriteLine(videoGetIndexResult);
            break;
        }
    }

    // search for the video
    queryParams = CreateQueryString(
        new Dictionary<string, string>()
        {
            {"accessToken", accountInfo.AccessToken},
            {"id", videoId},
        });

    var searchRequestResult = await client.GetAsync($"{apiUrl}/{accountInfo.Location}/Accounts/{accountInfo.Id}/Videos/Search?{queryParams}");
    var searchResult = await searchRequestResult.Content.ReadAsStringAsync();
    Console.WriteLine("");
    Console.WriteLine("Search:");
    Console.WriteLine(searchResult);

    // Generate video access token (used for get widget calls)
    client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", apiKey);
    var videoTokenRequestResult = await client.GetAsync($"{apiUrl}/auth/{accountInfo.Location}/Accounts/{accountInfo.Id}/Videos/{videoId}/AccessToken?allowEdit=true");
    var videoAccessToken = (await videoTokenRequestResult.Content.ReadAsStringAsync()).Replace("\"", "");
    client.DefaultRequestHeaders.Remove("Ocp-Apim-Subscription-Key");

    // get insights widget url
    queryParams = CreateQueryString(
        new Dictionary<string, string>()
        {
            {"accessToken", videoAccessToken},
            {"widgetType", "Keywords"},
            {"allowEdit", "true"},
        });
    var insightsWidgetRequestResult = await client.GetAsync($"{apiUrl}/{accountInfo.Location}/Accounts/{accountInfo.Id}/Videos/{videoId}/InsightsWidget?{queryParams}");
    var insightsWidgetLink = insightsWidgetRequestResult.Headers.Location;
    Console.WriteLine("Insights Widget url:");
    Console.WriteLine(insightsWidgetLink);

    // get player widget url
    queryParams = CreateQueryString(
        new Dictionary<string, string>()
        {
            {"accessToken", videoAccessToken},
        });
    var playerWidgetRequestResult = await client.GetAsync($"{apiUrl}/{accountInfo.Location}/Accounts/{accountInfo.Id}/Videos/{videoId}/PlayerWidget?{queryParams}");
    var playerWidgetLink = playerWidgetRequestResult.Headers.Location;
     Console.WriteLine("");
     Console.WriteLine("Player Widget url:");
     Console.WriteLine(playerWidgetLink);
     Console.WriteLine("\nPress Enter to exit...");
     String line = Console.ReadLine();
     if (line == "enter")
     {
         System.Environment.Exit(0);
     }

}

private string CreateQueryString(IDictionary<string, string> parameters)
{
    var queryParameters = HttpUtility.ParseQueryString(string.Empty);
    foreach (var parameter in parameters)
    {
        queryParameters[parameter.Key] = parameter.Value;
    }

    return queryParameters.ToString();
}

public class AccountContractSlim
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string Location { get; set; }
    public string AccountType { get; set; }
    public string Url { get; set; }
    public string AccessToken { get; set; }
}

Sık karşılaşılan hatalar

Upload işlemi aşağıdaki tabloda listelenen durum kodlarını döndürebilir.

Durum kodu ErrorType (yanıt gövdesinde) Açıklama
409 VIDEO_INDEXING_IN_PROGRESS Bu video zaten aynı hesapta işleniyor.
400 VIDEO_ALREADY_FAILED Bu videonun işlenmesi 2 saatten daha kısa bir süre önce aynı hesapta başarısız oldu. API istemcilerin videoyu yeniden yüklemek için en az 2 saat beklemesi gerekir.
429 Deneme hesaplarına dakikada 5 karşıya yükleme izni verilir. Ücretli hesaplara dakikada 50 karşıya yükleme izni verilir.

Karşıya yükleme konusunda dikkat edilmesi gerekenler ve sınırlamalar

  • Videonun adı 80 karakterden uzun olamaz.

  • Videonuzu URL’ye dayalı olarak karşıya yüklerken (tercih edilir) uç noktanın güvenliği TLS 1.2 (veya üzeri) ile sağlanmalıdır.

  • URL seçeneğiyle karşıya yükleme boyutu 30 GB ile sınırlıdır.

  • İstek URL'si uzunluğu 6144 karakterle, sorgu dizesi URL'si uzunluğu ise 4096 karakterle sınırlıdır.

  • Bayt dizisi seçeneğiyle karşıya yükleme boyutu 2 GB ile sınırlıdır.

  • Bayt dizisi seçeneği 30 dakika sonra zaman aşımına uğrar.

  • param içinde sağlanan videoURL URL'nin kodlanması gerekir.

  • Indexing Media Services varlıklarında, URL'den dizin oluşturmayla aynı sınırlama geçerlidir.

  • Medya için Video Analyzer tek bir dosya için en fazla 4 saatlik bir süre sınırına sahip.

  • URL'nin erişilebilir olması gerekir (örneğin genel URL olabilir).

    Bu bir özel URL'yse erişim belirteci istekte sağlanmalıdır.

  • URL'nin, sayfanın bağlantısı gibi bir web sayfasına değil geçerli bir medya dosyasına işaret ediyor olması www.youtube.com gerekir.

  • Ücretli bir hesapta dakikada 50 filme kadar ve deneme hesabında da dakikada 5 filme kadar karşıya yükleyebilirsiniz.

İpucu

.NET Framework 4.6.2 veya üzeri bir sürümünü kullanmanız önerilir. Eski .NET Framework sürümlerinde varsayılan olarak TLS 1.2 ayarı kullanılmaz.

Eski .NET Framework sürümlerini kullanmanız gerekirse kodunuzda REST API çağrısı öncesine bir satır ekleyin:
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

Güvenlik Duvarı

Bkz. Güvenlik duvarının arkasındaki depolama hesabı.

Sonraki adımlar

API tarafından üretilen Medya için Azure Video Çözümleyicisi çıkışını inceleme