Bagikan melalui


Menulis Sampel Gambar Video

[Fitur yang terkait dengan halaman ini, Windows Media Format 11 SDK , adalah fitur warisan. Ini telah digantikan oleh Pembaca Sumber dan Penulis Sink. Pembaca Sumber dan Penulis Sink telah dioptimalkan untuk Windows 10 dan Windows 11. Microsoft sangat menyarankan agar kode baru menggunakan Pembaca Sumber dan Sink Writer alih-alih Windows Media Format 11 SDK , jika memungkinkan. Microsoft menyarankan agar kode yang ada yang menggunakan API warisan ditulis ulang untuk menggunakan API baru jika memungkinkan.]

Aliran Gambar Video adalah video yang berisi serangkaian gambar diam. Gambar dapat berpindah dalam bingkai, dan setiap gambar dapat menyatu ke gambar berikutnya. Aliran Gambar Video dikodekan menggunakan codec Windows Media Video 9 Image v2. Video output mirip dengan yang dibuat oleh codec Windows Media Video 9.

Untuk membuat profil yang berisi aliran Gambar Video, mulailah dengan menghitung codec video seperti yang dijelaskan dalam Mendapatkan Informasi Konfigurasi Aliran dari Codec. Cari codec yang mendukung subjenis WMMEDIASUBTYPE_WVP2.

Setelah Anda mengatur profil pada objek penulis, panggil IWMWriter::GetInputProps untuk mendapatkan properti media untuk aliran input Gambar Video. Dapatkan jenis media dari objek properti media, dengan memanggil IWMMediaProps::GetMediaType, dan ubah subjenis menjadi WMMEDIASUBTYPE_VIDEOIMAGE. Anda harus mengatur lebar dan tinggi video ke dimensi maksimum yang diperlukan untuk mencakup gambar yang akan Anda tambahkan ke aliran. Kemudian panggil IWMMediaProps::SetMediaType dengan jenis input yang dimodifikasi. Sekarang Anda siap untuk mulai mengirim sampel ke objek penulis.

Setiap sampel harus dimulai dengan struktur WMT_VIDEOIMAGE_SAMPLE2. Selain itu, sampel mungkin berisi gambar bitmap. Gambar hanya dilampirkan ke sampel untuk bingkai pertama tempat gambar muncul. Semua bingkai tambahan yang menggunakan gambar tersebut hanya memerlukan informasi dalam struktur. Bitmap input harus diformat sebagai RGB, 24 bit per piksel.

File bitmap menyimpan data gambar sehingga data untuk setiap baris gambar mengambil sejumlah byte yang dapat dibagi empat. (Inilah yang disebut langkah bitmap.) Ini memaksa awal setiap baris video ke batas DWORD, yang membuat penyalinan lebih efisien. Jika baris gambar tidak dapat dibagi secara merata dengan empat, baris diisi ke kelipatan tertinggi berikutnya dari empat byte. Saat melampirkan data gambar, Anda harus menghapus padding apa pun yang ada di akhir data untuk setiap baris.

Codec Windows Media Video 9 Image v2 mempertahankan hingga dua gambar dalam memori pada satu waktu. Gambar-gambar ini disebut gambar sebelumnya dan gambar saat ini. Setiap gambar memiliki sekumpulan anggota dalam struktur WMT_VIDEOIMAGE_SAMPLE2, yang menentukan bagaimana gambar disajikan dalam bingkai. Anda dapat menambahkan gambar dengan mengatur anggota dwControlFlags dari WMT_VIDEOIMAGE_SAMPLE2 ke WMT_VIDEOIMAGE_SAMPLE_INPUT_FRAME. Saat Anda meneruskan bingkai input ke codec, gambar tersebut menjadi gambar saat ini. Gambar yang merupakan gambar saat ini dalam sampel sebelumnya biasanya menjadi gambar sebelumnya, dan gambar yang merupakan gambar sebelumnya dalam sampel sebelumnya dibuang. Anda dapat mengonfigurasi codec untuk mempertahankan gambar lama dengan mengatur anggota bKeepPrevImage ke TRUE. Dalam hal ini, gambar yang merupakan gambar yang sedang digunakan pada sampel sebelumnya dibuang.

Komposisi dasar bingkai Gambar Video ditentukan oleh dua faktor untuk setiap gambar: wilayah yang menarik dan koefisien campuran. Wilayah yang menarik untuk gambar didefinisikan oleh titik asal, lebar, dan tinggi. Bagian dari gambar yang dijelaskan oleh wilayah yang diinginkan mengisi bingkai output. Jika wilayah minat berukuran berbeda dari frame keluaran, codec mengubah ukuran wilayah tersebut. Koefisien campuran gambar menentukan perpaduan dua gambar. Koefisien campuran untuk gambar saat ini dan sebelumnya harus total 1,0. Misalnya, jika fCurrBlendCoef diatur ke 0,5 dan fPrevBlendCoef diatur ke 0,5, maka bingkai output terdiri dari campuran yang sama dari wilayah yang menarik dari kedua gambar.

Dengan memanipulasi wilayah yang diinginkan untuk gambar, Anda dapat membuat efek pan dan zoom. Koefisien campuran memungkinkan Anda untuk melebur atau melarutkan secara halus antara gambar. Selain efek ini, Anda dapat menggunakan salah satu transisi yang telah ditentukan sebelumnya untuk membuat bingkai yang lebih kompleks. Transisi yang tersedia dijelaskan di bagian Transisi Gambar Video dari dokumentasi ini. Saat menggunakan transisi, Anda harus mengonfigurasi setiap bingkai. Cara term mudah untuk melakukan ini adalah dengan membuat fungsi yang secara bertahap mengubah anggota struktur WMT_VIDEOIMAGE_SAMPLE2 untuk efek lengkap.

Untuk informasi selengkapnya tentang nilai yang akan diatur untuk deformasi, lihat WMT_VIDEOIMAGE_SAMPLE2.

Catatan Jika Anda ingin menyertakan audio dalam file dengan aliran Gambar Video, Anda harus menggunakan input audio yang tidak dikompresi. Untuk menggabungkan aliran video dengan aliran audio terkompresi yang ada, Anda perlu mendekompresi audio dan meneruskan sampel dalam bentuk tidak terkompresi. Jika Anda meneruskan sampel terkompresi ke penulis saat menulis aliran Gambar Video, kesalahan akan terjadi, yang mengakibatkan sampel dihilangkan dari video.

Selain itu, file Gambar Video terkompresi tanpa aliran audio dapat berisi beberapa bingkai video yang sangat kecil dan sangat terkompresi dalam satu paket ASF, yang dapat mengakibatkan pengalaman pemutaran yang buruk pada versi Windows Media Player sebelumnya. Untuk menghindari masalah ini, solusi terbaik adalah memasukkan aliran audio senyap ke dalam file, meskipun ini juga akan meningkatkan ukuran file.

Gambar Video

Menulis File ASF