Kod Dönüştürme API'sini kullanma

Bu konuda, bir medya dosyasını kodlamak için dönüştürme API'sinin nasıl kullanılacağı açıklanmıştır.

Genel bakış

Kod dönüştürme API'sini kullanmadan önce uygulamanın aşağıdaki bilgi parçalarına sahip olması gerekir:

  • Yeniden kodlanacak mevcut bir medya dosyasının yolu veya URL'si.
  • Çıkış dosyasının adı.
  • Mp4 veya Gelişmiş Akış Biçimi (ASF) gibi çıkış dosyasının kapsayıcı türü.
  • Kodlama biçimi. Bu bilgiler, kodlanmış ses ve video akışlarını açıklayan medya türlerini içerir.

Kod dönüştürme API'sini kullanmak için bir uygulama aşağıdaki adımları gerçekleştirir.

  1. Kaynak dosyayı okumak için bir medya kaynağı oluşturun.
  2. Bir transcode profili oluşturun. Ses akışını, video akışını ve dosya kapsayıcısını açıklayan öznitelikler ekleyin.
  3. Kodlama topolojisi oluşturmak için kod dönüştürme profilini kullanın. (Topolojiler hakkında daha fazla bilgi için bkz. Topolojiler Hakkında.)
  4. Medya Oturumutopolojisini ayarlayın.
  5. Medya Oturumu'na başlayın ve MESessionEnded olayını bekleyin.

Bu konunun geri kalanında bu adımlar daha ayrıntılı olarak açıklanmaktadır.

Medya Kaynağı Oluşturma

Medya kaynağı, kaynak dosyayı okuyan ve ayrıştıran bir nesnedir. Medya kaynağı oluşturmak için Kaynak Çözümleyicisikullanın. Örnek kodu Kaynak Çözümleyicikullanma konusunda bulabilirsiniz.

Transkod Profili Oluşturma

transcode profili çıkış dosyasını kodlamak için kullanılan biçimi ve ayarları açıklar. Kod dönüştürme profili üç öznitelik kümesi içerir:

  • Ses öznitelikleri: Hedef ses biçimini ve ses kodlayıcı ayarlarını açıklayın.
  • Video öznitelikleri: Hedef video biçimini ve video kodlayıcı ayarlarını açıklayın.
  • Kapsayıcı öznitelikleri: Dosya kapsayıcısının türünü ve bazı genel kodlama ayarlarını tanımlayın.

Bir transcode profili oluşturmak için MFCreateTranscodeProfile işlevini çağırın. Bu işlev, IMFTranscodeProfile arabirimine bir işaretçi döndürür. İlk profil nesnesi boş; öznitelik içermiyor. Sonraki adım, profili tanımlayan öznitelikleri eklemektir.

Ses Öznitelikleri

Ses akışına öznitelik eklemek için IMFTranscodeProfile::SetAudioAttributesçağrısı gerçekleştirin. Bu öznitelikler ses akışının nasıl kodlanacağını belirtir. Çıkış dosyası bir ses akışı içermeyecekse, bu öznitelikleri atla.

Ses öznitelikleri iki kategoriye ayrılır:

  • Kodlanmış akışın biçimini belirten öznitelikler
  • Diğer kodlama parametrelerini belirten öznitelikler.

Format öznitelikleri, ses medya türleri bölümünde açıklandığı gibi yalnızca medya türü özniteliklerdir. Tam biçim öznitelikleri kümesi kodlayıcıya bağlıdır. (Bkz. Media Foundation Desteklenen Medya Biçimleri.) Tipik ses biçimi özniteliklerinin listesi aşağıda verilmiştir:

Biçim Özniteliği Açıklama
MF_MT_SUBTYPE Alt tür. Bkz. Ses Alt Türü GUID'leri.
MF_MT_AUDIO_NUM_CHANNELS Ses kanallarının sayısı.
MF_MT_AUDIO_SAMPLES_PER_SECOND Saniyedeki ses örnekleri sayısı.
MF_MT_AUDIO_BLOCK_ALIGNMENT Blok hizalaması.
MF_MT_AUDIO_AVG_BYTES_PER_SECOND Saniye başına ortalama bayt sayısı (kodlanmış bit hızı).

 

Aşağıdaki kodlama parametreleri tanımlanır.

Kodlama Parametresi Açıklama
MF_TRANSCODE_DONOT_INSERT_ENCODER Transcode API'sinin ses akışı için bir kodlayıcı eklemesini engeller.
MF_TRANSCODE_ENCODINGPROFILE Cihaz uyumluluğu şablonunu belirtir. (Yalnızca ASF dosyaları için geçerlidir.)
MF_TRANSCODE_QUALITYVSSPEED Kodlama kalitesi ile hız arasındaki dengeyi belirtir.

 

Biçim özniteliklerini ayarlamanız gerekir. Kodlama parametreleri isteğe bağlıdır.

Kodlayıcıyla uyumlu bir biçim bulmanın bir yolu, MFTranscodeGetAudioOutputAvailableTypes işlevini çağırmaktır. İstenen kodlayıcı alt türe göre belirtilir. işlevi, bu kodlayıcı için bir medya türleri koleksiyonu döndürür. Listeden bir tür seçebilir ve öznitelikleri profile kopyalayabilirsiniz. Bu yaklaşımı kullanan kodlar için bkz. Öğretici: WMA Dosyası kodlama.

Video Öznitelikleri

Video akışına öznitelik eklemek için IMFTranscodeProfile::SetVideoAttributesçağrısı gerçekleştirin. Bu öznitelikler video akışının nasıl kodlanacağını belirtir. Çıkış dosyası video akışı içermeyecekse, bu öznitelikleri atla.

Ses özniteliklerinde olduğu gibi video öznitelikleri de iki kategoriye ayrılır:

  • Kodlanmış akışın biçimini belirten öznitelikler
  • Diğer kodlama parametrelerini belirten öznitelikler.

Biçim öznitelikleri, Video Medya Türleribölümünde açıklandığı gibi medya türü özniteliklerdir. Tipik video biçimi özniteliklerinin listesi aşağıda verilmiştir:

Biçim Özniteliği Açıklama
MF_MT_SUBTYPE Alt tür. Bkz. Video Alt Türü GUID'leri.
MF_MT_FRAME_RATE Kare hızı.
MF_MT_FRAME_SIZE Çerçeve boyutu.
MF_MT_AVG_BITRATE Ortalama bit hızı.
MF_MT_PIXEL_ASPECT_RATIO Piksel görüntü oranı.

 

Aşağıdaki kodlama parametreleri tanımlanır.

Kodlama Parametresi Açıklama
MF_TRANSCODE_DONOT_INSERT_ENCODER Kod dönüştürme API'sinin video akışı için bir kodlayıcı eklemesini engeller.
MF_TRANSCODE_ENCODINGPROFILE Cihaz uyumluluğu şablonunu belirtir. (Yalnızca ASF dosyaları için geçerlidir.)
MF_TRANSCODE_QUALITYVSSPEED Kodlama kalitesi ile hız arasındaki dengeyi belirtir.

 

Biçim özniteliklerini ayarlamanız gerekir. Kodlama parametreleri isteğe bağlıdır.

Kapsayıcı Öznitelikleri

Kapsayıcı öznitelikleri, çıkış dosyasının dosya düzeyi özelliklerini tanımlar. Kapsayıcı özniteliklerini ayarlamak için IMFTranscodeProfile::SetContainerAttributesçağrısı gerçekleştirin. Aşağıdaki öznitelikler tanımlanır.

Öznitelik Açıklama
MF_TRANSCODE_ADJUST_PROFILE Kod dönüştürme topolojisi için kullanılacak akış ayarlarını tanımlar. Giriş kaynağı ayarlarını kullanmak için bayrakları ayarlayabilir veya özel akış özniteliklerini kullanabilirsiniz.
MF_TRANSCODE_CONTAINERTYPE Çıkış dosyasının MP4 veya ASF gibi dosya biçimini belirtir. Bu değere bağlı olarak, topolojiye uygun medya havuzu eklenir.
MF_TRANSCODE_SKIP_METADATA_TRANSFER Kaynaktan meta verilerin çıkış dosyasına kopyalanıp kopyalanmayacağını belirtir.
MF_TRANSCODE_TOPOLOGYMODE Kod dönüştürme sırasında donanım tabanlı codec'lerin kullanılıp kullanılamayacağını belirtir.
MFT_FIELDOFUSE_UNLOCK_Attribute Kullanım alanı kısıtlamaları olan bir codec bileşeninin kilidini açar. Daha fazla bilgi için bkz. Kullanım Alanı Kısıtlamaları.

 

MF_TRANSCODE_CONTAINERTYPE özniteliği gereklidir. Diğer kapsayıcı öznitelikleri isteğe bağlıdır.

Kod Dönüştürme Topolojisi Oluşturma

Kod dönüştürme topolojisi, medya kaynağını, uygun codec bileşenlerini ve medya havuzu içeren kısmi bir topolojidir. Kod dönüştürme topolojisini oluşturmak için MFCreateTranscodeTopology işlevini çağırın. Bu işlev giriş olarak aşağıdaki parametreleri alır:

İşlev, IMFTopology arabirimine bir işaretçi döndürür.

Kodlama Oturumunu Çalıştırma

Topolojiyi oluşturduktan sonra dosyayı kodlamaya hazırsınız. Profili bu noktada atabilirsiniz.

  1. Medya Oturumu oluşturmak için MFCreateMediaSessionçağırın.
  2. Medya Oturumu'nda topolojiyi ayarlamak için IMFMediaSession::SetTopology çağrısı.
  3. Kodlama oturumunu başlatmak için IMFMediaSession::Start çağırın.
  4. MESessionEnded olayını bekleyiniz.
  5. Medya Oturumu'nu kapatmak için IMFMediaSession::Close öğesini arayın.
  6. MESessionClosed etkinliğini bekleyin.
  7. ÇAĞRISI IMFMediaSource::Shutdown.
  8. Çağrı IMFMediaSession::Shutdown.

Kodlama için harcanan zamanın çoğu 3. ve 4. adımlar arasında gerçekleşir.

Transcode API

Medya Oturumu Hakkında