Kayıtlardan kayıttan Canlı Video Analizi

Not

Hizmetin en son sürümü için bkz. Azure Video Analyzer.

Önceden okuma

Arka Plan

Sürekli video Canlı Video Analizi (CVR) IoT Edge video kaydederek haftalarca veya aylar boyunca buluta video kaydedebilsiniz. Olay tabanlı video kaydı (EVR) aracılığıyla kaydınızı ilginizi alan klipleriyle de sınırabilirsiniz.

Media Service hesabınız bir Azure Depolama hesabına bağlıdır ve buluta video kaydeden içerik bir Media Service varlığına yazılır. Media Services, kayıt tamamlandıktan sonraveya kayıt devam ederken bu içeriğin akışını sağlar. Media Services, cihazları (istemcileri) kayıttan yürütmeye yönelik HLS veya MPEG-DASH protokolleri aracılığıyla akış teslim etmek için gerekli özellikleri sağlar. Daha fazla ayrıntı için video kayıttan yürütme makalesine bakın. Media Service API'lerini kullanarak gerekli akış URL'lerini (istemciler tarafından video ve ses kayıttan kayıttan & gerekir. Bir varlığın akış URL'sini oluşturmak için bkz. Akış bulucu oluşturma ve DERLEME URL'leri. Bir varlık için akış URL'si oluşturulduktan sonra, URL'nin video kaynağıyla (yani kamera) ilişkilendirmesini içerik yönetimi sisteminize depolarsınız.

Örneğin, HLS aracılığıyla akıştayken akış URL'si gibi https://{hostname-here}/{locatorGUID}/content.ism/manifest(format=m3u8-aapl).m3u8 olur. MPEG-DASH için gibi bir görünüme sahip https://{hostname-here}/{locatorGUID}/content.ism/manifest(format=mpd-time-cmaf).mpd olur.

Bu, diğer şeylerin arasında, teslim edilen akışın genel süresini ve önceden kaydedilmiş içeriği mi yoksa devam eden 'canlı' akışı mı temsil ettiğini açıklayan bir bildirim dosyası döndürür.

Canlı ve VoD karşılaştırması

HLS ve MPEG-DASH gibi akış protokolleri, canlı video akışı ve TV programları ve filmler gibi isteğe bağlı/önceden kaydedilmiş içerik akışı gibi senaryoları işleyecek şekilde yazıldı. Canlı videolar için, HLS ve MPEG-DASH istemcileri, ' en son ' zaman onlarından yürütmeye başlamak üzere tasarlanmıştır. Ancak filmlerle, görüntüleyiciler baştan başlayıp seçim yapacaksa bu baştan başa geçebilmelidir. HLS ve MPEG-DASH bildirimlerinin, videonun canlı bir akışı temsil ettiğini veya önceden kaydedilmiş içerik olup olmadığını belirten bayrakları vardır. Bu kavram Ayrıca, IoT Edge üzerinde canlı video analizi kullanılarak kaydedilmiş video içeren varlıklardan HLS ve MPEG-DASH akışları için de geçerlidir.

Kayıtlar göz atma ve seçmeli kayıttan yürütme

Video kaydetmek için IoT Edge üzerinde canlı video analizlerini kullandığınız senaryoyu göz önünde bulundurun. Bu, bir okulun açık olduğu günde yalnızca Pazartesi ile 10:00'DA, tüm akademik yıl boyunca videoyu kaydedebilir. Ya da belki de uluslararası tatiller için yalnızca 7-7 saat arasında video kaydediyorsanız. Bu iki senaryodan birinde, video kaydınızı gözatmaya ve görüntülemeye çalışırken şunlar gerekir:

  • Bir kayıtta hangi tarih/saat videonun olduğunu belirlemek için bir yol.
  • Kayıttan yürütmeye yönelik bir bölüm (örneğin, yeni yılda 00 ' a kadar saat) seçmek için bir yol.

Media Services, ilk sorunu gidermek için bir sorgu API 'SI (kullanılabilirlik kümesi) ve ikincisi ele almak için zaman aralığı filtreleri (startTime, bitişsaati) sağlar.

Sorgu API'si

CVR kullanılırken, kayıttan yürütme aygıtları (istemciler) tüm kaydın kayıttan yürütülmesini kapsayan bir bildirim isteyememektedir. Çok yıllık bir kayıt, kayıttan yürütme için çok büyük olan bir bildirim dosyası oluşturur ve istemci tarafında kullanılabilir bölümleri ayrıştırmaktır. İstemcinin çok fazla tahmin olmadan geçerli istekler yapabilmesi için kayıtta hangi DateTime aralıklarının veri olduğunu bilmesi gerekir. Bu, yeni sorgu API 'sinin geldiği yerdir. istemciler artık içeriği saptamak için bu sunucu tarafı API 'sini kullanabilir.

Duyarlık değeri şunlardan biri olabilir: Year, month, Day veya Full (aşağıda gösterildiği gibi).

Duyarlık yıl ay gün tümünü
Sorgu /availableMedia?precision=year&startTime=2018&endTime=2019 /availableMedia?precision=month& startTime=2018-01& endTime=2019-02 /availableMedia?precision=day& startTime=2018-01-15& endTime=2019-02-02 /availableMedia?precision=full& startTime=2018-01-15T10:08:11.123& endTime=2019-01-015T12:00:01.123
Yanıt { "timeRanges":[{ "start":"2018", "end":"2019" }]} { "timeRanges":[{ "start":"2018-03", "end":"2019-01" }]} { "timeRanges":[ { "start":"2018-03-01", "end":"2018-03-07" }, { "start":"2018-03-09", "end":"2018-03-31" } ]} Tam uygunluk yanıtı. Hiç boşluk yoksa, başlangıç startTime olur ve son olarak bitebileceğiniz olur.
Kısıtlamalar •startTime <= bitişsaati
•her Ikisi de YYYY biçiminde olmalıdır; Aksi takdirde hata döndürür.
•değerler herhangi bir sayıda yıl olabilir.
•değerler dahil değildir.
•startTime <= bitişsaati
•her Ikisi de YYYY-MM biçiminde olmalı, aksi takdirde hata döndürülür.
•değerler en fazla 12 ay olabilir.
•değerler dahil değildir.
•startTime <= bitişsaati
•her Ikisi de YYYY-AA-GG biçiminde olmalı, aksi takdirde hata döndürülür.
•değerler en fazla 31 gün olabilir.
Değerler dahildir.
•startTime < bitişsaati
•değerler en fazla 25 saat ayrı olabilir.
•değerler dahil değildir.

Ek istek biçimi konuları

  • Tüm zamanlar UTC'dedir

  • Duyarlık sorgu dizesi parametresi gereklidir.

  • startTime ve endTime sorgu dizesi parametreleri ay, gün ve tam duyarlık değerleri için gereklidir.

  • startTime ve endTime sorgu dizesi parametreleri, yıl duyarlık değeri için isteğe bağlıdır (hiçbiri, ya da her ikisi de desteklemektedir).

    • startTime atlanırsa, kayıtta ilk yıl olduğu varsayılır.

    • endTime atlanırsa, kayıtta geçen yıl olduğu varsayılır.

    • Örneğin kaydınız 2011'de başladı ve 2020'ye kadar devam etti ise:

      • /availableMedia?precision=year, /availableMedia?precision=year&startTime=2011&endTime=2020 ile aynıdır
      • /availableMedia?precision=year&startTime=2015, /availableMedia?precision=year&startTime=2015&endTime=2020 ile aynıdır
      • /availableMedia?precision=year&endTime=2018, /availableMedia?precision=year&startTime=2011&endTime=2018 ile aynıdır

Zaman aralıkları için medya verisi yoksa boş bir liste döndürülür.

Varlık bir medya grafı kaydı içeriyorsa HTTP 400 yanıtı, bu özelliğin yalnızca medya grafı aracılığıyla kaydedilen içerikler için kullanılabilir olduğunu açıklayan bir hata iletisiyle döndürülür.

Parametreler tarafından belirtilen süre, belirli bir sorgu türü için Maksimum Zaman Aralığı'nın izin verilen süresinden büyükse, istenen sorgu türü için izin verilen en uzun zaman aralığını açıklayan bir hata iletisiyle birlikte BIR HTTP 400 döndürülür.

Verilen parametreler için zaman aralığının geçerli olduğunu varsayarak, kayıtta veri zaman penceresinin dışında olan sorgular için hata döndürülecek değildir. Yani kayıt 7 saat önce başladı ancak müşteri {UtcNow – 24 saat} ile UtcNow arasında kullanılabilir medya isterse{UtcNow – 7} saatlik verileri iade ederiz.

Yanıt biçimi

availableMedia çağrısı bir zaman değerleri kümesi döndürür.

Yanıt, istenen duyarlığa bağlı olarak, Timeanges değerleri yıl için ISO 8601 UTC tarihi (YYYY biçiminde), month (YYYY-MM biçiminde) veya gün (yyyy-aa-gg) dizisi olacak şekilde bir JSON gövdesi olacaktır. Tam timeRanges, hem ISO 8601 UTC Tarih (YYYY-MM-DDThh: mm: ss. sssZ biçiminde) olarak biçimlendirilen bir başlangıç ve bitiş değeri içerir.

Kullanılabilirlik Blemeçya sorgusu için, API, video zaman çizelgesinde bir anahtara sahip olur. Zaman çizelgesindeki tüm süreksizlik, yanıtta boşluk olarak görünür.

Kullanılabilirlik Blemeçya için yanıt örneği

Örnek 1: boşluk olmadan canlı kayıt

Aşağıda, kaydın %100 ' nin tamamlandığı, 21 Aralık 2019 ' ye kadar tüm kullanılabilir medyanın gösterildiği bir yanıt verilmiştir. Yanıtta yalnızca bir başlangıç/bitiş çifti vardır.

GET https://hostname/locatorId/content.ism/availableMedia?precision=full&startTime=2019-12-21T00:00:00Z&endTime=2019-12-22T00:00:00Z
{
   "timeRanges":[
   {
         "start":"2019-12-21T00:00:00.000Z", 
         "end":"2019-12-22T00:00:00.000Z"
    }
   ]
}
Örnek 2:2 saniyelik bir boşluklu canlı kayıt

Bir nedenden dolayı, kameranın günde 2 saniyelik bir aralığa yönelik geçerli videoyu gönderemediği hakkında daha fazla düşünün. 21 Aralık 2019 ' de kullanılabilir medyanın tümünü gösteren bir yanıt aşağıda verilmiştir:

GET https://hostname/locatorId/content.ism/availableMedia?precision=full&startTime=2019-12-21T00:00:00Z&endTime=2019-12-22T00:00:00Z
{
   "timeRanges":[
    {
         "start":"2019-12-21T00:00:00Z", 
         "end":"2019-12-21T04:01:08Z"
    },
    {
         "start":"2019-12-21T04:01:10Z", 
         "end":"2019-12-22T00:00:00Z"
    }
   ]
}
Örnek 3:8 saatlik boşluklu canlı kayıt

Kamera ve/veya şirket içi tesis 'nın gün boyunca 8 saatlik bir süre boyunca güç kaybettiğini ve bir yedekleme güç kaynağı olmadığını varsayalım. Bu, bir gün boyunca kullanılabilir olan tüm medyayı gösteren bir yanıt aşağıda verilmiştir

GET https://hostname/locatorId/content.ism/availableMedia?precision=full&startTime=2019-12-21T00:00:00Z&endTime=2019-12-22T00:00:00Z
{
   "timeRanges":[
    {
         "start":"2019-12-21T00:00:00Z", 
         "end":"2019-12-21T04:00:00Z"
    },
    {
         "start":"2019-12-21T12:00:00Z", 
         "end":"2019-12-22T00:00:00Z"
    }
   ]
}

Örnek 4: yaz tatillerine video kaydedilmeyen canlı kayıt

Video ' ı yalnızca okulda oturum açtığınızda ve kayıt 17 Haziran 'dan 6 Eylül 'ye kadar durdurulduğunu varsayalım. Kullanılabilir aylar için bir sorgu şöyle görünür:

GET https://hostname/locatorId/content.ism/availableMedia?precision=month&startTime=2019-01&endTime=2019-12
{
   "timeRanges":[
    {
         "start":"2019-01", 
         "end":"2019-06"
    },
    {
         "start":"2019-09", 
         "end":"2019-12"
    }
   ]
}

Daha sonra Haziran ayında kullanılabilir günler sorulursa şunları görürsünüz:

GET https://hostname/locatorId/content.ism/availableMedia?precision=day&startTime=2019-06-01&endTime=2019-06-30
{
   "timeRanges":[
    {
         "start":"2019-06-01", 
         "end":"2019-06-17"
    }
   ]
}
Örnek 5: hafta sonları veya tatiller üzerinde hiçbir videonun kaydedilmediği canlı kayıt

Videoyu yalnızca iş saatlerinde kaydettiğiniz varsayın. Kullanılabilir günler için bir sorgu şuna benzer:

GET https://hostname/locatorId/content.ism/availableMedia?precision=day&startTime=2020-02-01&endTime=2020-02-29
{
   "timeRanges":[
    {
         "start":"2020-02-03", 
         "end":"2020-02-07"
    },
    {
         "start":"2020-02-10", 
         "end":"2020-02-14"
    },
    {
         "start":"2020-02-18", // Monday Feb 17th was a holiday
         "end":"2020-02-21"
    },
    {
         "start":"2020-02-24", 
         "end":"2020-02-28"
    }
   ]
}

Zaman aralığı filtreleri

Yukarıda belirtildiği gibi, bu filtreler kayıttan yürütme için kaydın bölümlerini (örneğin, Yeni Yıllarda 09:00 ile 11:00 arasında) seçmenize yardımcı olur. HLS aracılığıyla akışta, akış URL'si gibi https://{hostname-here}/{locatorGUID}/content.ism/manifest(format=m3u8-aapl).m3u8 olur. Kaydın bir bölümünü seçmek için startTime ve endTime parametresi eklersiniz, örneğin: https://{hostname-here}/{locatorGUID}/content.ism/manifest(format=m3u8-aapl,startTime=2019-12-21T08:00:00Z,endTime=2019-12-21T10:00:00Z).m3u8 . Bu nedenle zaman aralığı filtreleri, kaydın zaman çizelgesinin akış bildirimine dahil edilen kısmını açıklamak için kullanılan URL değiştiricileridir:

  • starttime , döndürülen bildirimde video zaman çizelgesinin istenen başlangıç saatlerini açıklayan iso 8601 Tarih Saat damgasıdır.
  • endtime , bildirimde döndürülen video zaman çizelgesinin istenen bitiş saatlerini açıklayan iso 8601 Tarih Saat damgasıdır.

Böyle bir bildirimin uzunluk üst sınırı (zaman) 24 saati aşamaz.

Filtrelerle ilgili kısıtlamalar aşağıdaki gibidir.

startTime endTime Sonuç
Yok Yok Videonun Varlık'ta en son bölümünü (en fazla 4 saat) döndürür.

Varlık kısa süre önce (yeni video verisi yok) için yazilmasa isteğe bağlı (VoD) bir bildirim döndürülür. Başka bir canlı bildirim döndürülür.
Mevcut Yok StartTime'dan daha yeni bir video varsa, böyle bir bildirim 24 saat daha kısa olacaksa bir bildirim geri dön.
Bildirimin uzunluğu 24 saati aşarsa bir hata döndürür.
Varlık kısa süre önce (yeni video verisi yok) için yazilmasa isteğe bağlı (VoD) bir bildirim döndürülür. Aksi takdirde, canlı bir bildirim döndürülür.
Olmamalıdır Görüntülemeyen Hata – startTime varsa, bitişsaati zorunludur.
Görüntülemeyen Görüntülemeyen StartTime ve bitişsaati arasında videonun kullanılabildiği bir VoD bildirimi döndürün.
Span (startTime, bitişsaati) 24 saati aşamaz.

Yanıt örnekleri

Örnek 1: boşluk olmadan canlı kayıt

Aşağıda, kaydın %100 ' nin tamamlandığı, 21 Aralık 2019 ' ye kadar tüm kullanılabilir medyanın gösterildiği bir yanıt verilmiştir. Yanıtta yalnızca bir başlangıç/bitiş çifti vardır.

GET https://hostname/locatorId/content.ism/availableMedia?precision=full&startTime=2019-12-21T00:00:00Z&endTime=2019-12-22T00:00:00Z
{
   "timeRanges":[
   {
         "start":"2019-12-21T00:00:00Z", 
         "end":"2019-12-22T00:00:00Z"
    }
   ]
}

Kayıt sürekli olduğunda, Aralık 24 saat veya daha az olduğu sürece, bu başlangıç/bitiş çiftinin içindeki zaman içindeki her bir bölüm için HLS veya DASH bildirimleri isteyebilirsiniz. Yukarıdaki 4 saatlik HLS bildirim isteğine yönelik bir örnek şöyle olacaktır:

GET https://{hostname-here}/{locatorGUID}/content.ism/manifest(format=m3u8-aapl,startTime=2019-12-21T14:00:00.000Z,endTime=2019-12-21T18:00:00.000Z).m3u8

Örnek 2:2 saniyelik bir boşluklu canlı kayıt

Bir nedenden dolayı, kameranın günde 2 saniyelik bir aralığa yönelik geçerli videoyu gönderemediği hakkında daha fazla düşünün. 21 Aralık 2019 ' de kullanılabilir medyayı gösteren bir yanıt aşağıda verilmiştir:

GET https://hostname/locatorId/content.ism/availableMedia?precision=full&startTime=2019-12-21T00:00:00Z&endTime=2019-12-22T00:00:00Z
{
   "timeRanges":[
    {
         "start":"2019-12-21T00:00:00Z", 
         "end":"2019-12-21T04:01:08Z"
    },
    {
         "start":"2019-12-21T04:01:10Z", 
         "end":"2019-12-22T00:00:00Z"
    }
   ]
}

Yukarıdaki gibi bir kayıtla birlikte, yayılma süresi 24 saatin altında olduğu sürece, her bir startTime/bitişsaati çifti ile HLS ve DASH bildirimleri isteyebilirsiniz. Bu değerler 04:01:08:00:00 UTC 'de boşluğu ayırırdı, döndürülen bildirim, bu protokollerin ilgili özellikleri uyarınca medya zaman çizelgesindeki sürekliliği işaret edecektir.

Örnek 3:8 saatlik bir boşluklu canlı kayıt

Kameranın ve/veya şirket içi tesisin gün boyunca 04:00 ile 16:00 UTC arasında 8 saatlik bir süre boyunca güç kaybedilip yedek güç kaynağı olmadığını varsayalım. İşte bu tür bir günün tüm kullanılabilir medyalarını gösteren bir yanıt.

GET https://hostname/locatorId/content.ism/availableMedia?precision=full&startTime=2019-12-21T00:00:00Z&endTime=2019-12-22T00:00:00Z
{
   "timeRanges":[
    {
         "start":"2019-12-21T00:00:00Z", 
         "end":"2019-12-21T04:00:00Z"
    },
    {
         "start":"2019-12-21T12:00:00Z", 
         "end":"2019-12-22T00:00:00Z"
    }
   ]
}

Böyle bir kayıtla:

  • StartTime/endTime aralığı filtrelerinin zaman çizelgesinin "kullanılabilir" bölümlerinin içinde olduğu bir bildirim (yani gece yarısından 04:00'a veya öğleden gece yarısına kadar) bir bildirim isteğinde bulunuyorsanız, hizmet startTime'dan endTime'a kadar olan zamanı kapsayan bir bildirim (örneğin:

    GET https://{hostname-here}/{locatorGUID}/content.ism/manifest(format=m3u8-aapl,startTime=2019-12-21T14:01:00.000Z,endTime=2019-12-21T03:00:00.000Z).m3u8

  • startTime ve endTime'ın ortadaki 'delik' içinde olduğu bir bildirim (08:00 ile 10:00 UTC arasında) bir bildirim isteğinde bulunduysanız, hizmet varlık filtresinin boş bir sonuç elde ettiği gibi davranır.

    [Bu, boş yanıt alan bir istektir] GET https://{hostname-here}/{locatorGUID}/content.ism/manifest(format=m3u8-aapl,startTime=2019-12-21T08:00:00.000Z,endTime=2019-12-21T10:00:00.000Z).m3u8

  • startTime veya endTime'dan yalnızca birinin 'delik' içinde olduğu bir bildirim isteğiniz varsa, döndürülen bildirim yalnızca bu zaman başlangıcının bir bölümünü içerir. startTime veya endTime değerini en yakın geçerli sınıra yaslar. Örneğin, 01:00 ile 13:00 arasında 3 saatlik bir akış istediysiniz, yanıt 12 öğle ile 13:00 arasında 12 saat için 1 sa değerinde medya içerir

    GET https://{hostname-here}/{locatorGUID}/content.ism/manifest(format=m3u8-aapl,startTime=2019-12-21T10:00:00.000Z,endTime=2019-12-21T13:00:00.000Z).m3u8

    Döndürülen bildirim, isteğin 10:00'da başlaması istense bile 2019-12-21T12:00:00.000Z'den başlar. Oynatıcı eklentisiyle bir video yönetim sistemi inşa etmek için izleyiciye bunu işaret etmek için dikkat gerekir. Kayıttan yürütme zaman çizelgesinin istek üzerine 10:00'da değil, öğleden sonra başlamasının nedeni farkında olmayan bir izleyicinin kafasının karıştırılma nedeni

Kayıt ve kayıttan yürütme gecikme süreleri

Canlı Video Analizi'IoT Edge kaydetmek için Canlı Video Analizi kullanırken, modüle videonun buluta kaydedilemeden önce minimum video süresini (saniye olarak) toplaması için bir segmentLength özelliği belirtirsiniz. Örneğin, segmentLength değeri 300 olarak ayarlanırsa, modül bir 5 dakikalık "öbek" yüklemeden önce 5 dakikalık bir video biriktirecek ve sonraki 5 dakika için birikme moduna geçer ve yeniden karşıya yükler. SegmentLength 'in artırılması, okuma ve yazma sayısı her segmentLength saniyede bir kez daha sık olmadığı için Azure depolama işlem maliyetlerinizi azaltmaya yarar.

Sonuç olarak, Media Services videonun akışı en az bu kadar gecikecek.

Kayıttan yürütme gecikmesini belirleyen bir başka faktör (bir olay, kameranın önünde, bir kayıttan yürütme cihazında görüntülenebilecek zamana kadar gecikme), resim grubu GOP süresi olur. 3 basit tekniği kullanarak canlı akışların gecikmesini azaltmak , GOP süresini daha uzun sürede gecikme süresini azaltır. En çok 30 saniyeden daha uzun bir süre kullanmak üzere yapılandırılmış araştırma ve güvenlik senaryolarında IP kameralarının kullanılması yaygındır. Bu, genel gecikme süresi üzerinde büyük bir etkiye sahiptir.

Sonraki adımlar

Sürekli video kaydı öğreticisi