xi
DAFTAR REFERENSI
[APP08] Apple. 2008.<http://www.apple.com/quicktime/technologies/mpeg4> Tanggal akses 10 Mei 2008.
[BER08] Berkeley Multimedia Research Center. 2008.
<http://bmrc.berkeley.edu/research/mpeg/faq/mpeg1.html> Tanggal akses 10 Mei 2008.
[CAN08] Canopus. 2008.
<http://www.canopus.com/canopus/technology/progressivevsinterlaced.php> Tanggal akses 8 Mei 2008.
[CCI93] CCITT. 1993. Digital Compression and Coding of Continuous-Tone Still Images - Requirements and Guidelines. ITU.
[COO08] CoolUtils. 2008.
<http://www.coolutils.com/Formats/WMV> Tanggal akses 10 Mei 2008.
[DIG08] DigitalExpert. 2008.
<http://dx.sheridan.com/advisor/cmyk_color.html> Tanggal akses 10 Mei 2008.
[DIS08] Discovery Scientific. 2008.
<http://discoverybiz.net/enu0/faq/faq_YUV_YCbCr_YPbPr.htm> Tanggal akses 10 Mei 2008.
[EFF08] Effect Matrix Inc. 2008.
<http://www.effectmatrix.com> Tanggal akses 11 Juni 2008. [INS08] InfoSysSec. 2008.
<http://www.infosyssec.com/infosyssec/Steganography/techniques.htm> Tanggal akses 10 Mei 2008.
[JOH98] Johnson, Neil F. Jajodia, Sushil. 1998. ExploringSteganography: Seeing The Unseen. IEEE.
[LIN06] Lindsey, Clark S. 2006.
<http://www.particle.kth.se/~lindsey/JavaCourse/Book/Part1/Tech/Chapter 04/javaRandNums.html>
xii [MAC08] Macinta, Timothy W. 2008.
<http://www.twmacinta.com/myjava/fast_md5.php> Tanggal akses 2 Juni 2008.
[MAT08] Matroska Development Team. 2008.
<http://matroska.org/technical/guides/faq/index.html.> Tanggal akses 10 Mei 2008.
[MED05] Medford, Mitchell. 2005.
<http://searchwarp.com/swa21525.htm> Tanggal akses 10 Mei 2008.
[MCW07] MediaCoderWiki. 2007.
<http://mediacoder.sourceforge.net/wiki/index.php?title=RealVideo> Tanggal akses 10 Mei 2008.
[MIC07] Microsoft. 2007.
<http://support.microsoft.com/kb/316992> Tanggal akses 10 Mei 2008.
[SOP08] Sophomore College. 2008.
< http://cse.stanford.edu/class/sophomore-college/projects-00/data-compression/lossy/jpeg/dct.htm>
Tanggal akses 18 Mei 2008 [WAN08] Wang, Zhou. 2008.
<http://www.ece.uwaterloo.ca/~z70wang/research/ssim/> Tanggal akses 5 Juni 2008
[YOS01] Yonata, Yosi. 2001. Pemampatan Data Video Untuk Aplikasi Videophone dan Multimedia Over IP. Indonesia: Elex Media Komputindo.
xiii
DAFTAR PUSTAKA
[3GP07] 3rd Generation Partnership Project. 2007. Transparent end-to-end packet switched streaming service (PSS) 3GPP file format (3GP). France.
[ITU05] International Telecommunication Union. 2005. ITU-T Recommendation H.263: "Video coding for low bit rate communication".
[MUN06] Munir, Rinaldi. 2006. Diktat Kuliah IF5054 Kriptografi. Indonesia: Institut Teknologi Bandung.
[ROB04] Krenn, Robert. 2004. Steganography and Steganalysis: Chapter 1.
[WAN04] Wang et.al., Zhou. 2004. Image Quality Assessment: From Error Visibility to Structural Similarity. IEEE.
A-1
LAMPIRAN A
VIDEO 3GP
Video 3GP merupakan sebuah multimedia container format, yang diciptakan oleh 3GPP. Berikut ini adalah pembagian profil pada 3GP, serta struktur file di dalamnya [3GP07].
A.1 Profil
Terdapat lima buah profil yang terdefinisi pada video 3GP, dimana masing-masing profil akan memiliki struktur yang berbeda. Sebuah profil memiliki tipe yang dinamakan dengan brand. Terdapat dua jenis brand yang terdefinisi pada setiap video 3GP, yaitu major brand dan compatible brands. Major brand adalah brand yang paling cocok dipakai untuk mengidentifikasikan dan melakukan decode video tersebut, sedangkan compatible brands adalah kumpulan brand lain yang juga cocok, namun hanya digunakan apabila decoder tidak mendukung major brand.
1. Basicprofile (3gp4, 3gp5, 3gp6, 3gp7)
Profil ini ditujukan untuk keperluan pengiriman melalui MMS, download, atau untuk dimainkan secara lokal. Video 3GP yang dibuat melalui rekaman mobile phone, atau video hasil encoding dari perangkat lunak pada komputer, biasanya akan memiliki jenis profil ini.
2. Streaming-serverprofile (3gp6, 3gp7)
Profil ini ditujukan untuk keperluan streaming, yaitu dapat menonton secara langsung suatu video 3GP dari streaming-server. Video 3GP dengan profil ini akan menjamin keterurutan video, yaitu antara streaming-server dengan isi video yang sedang di-stream.
3. Progressive-downloadprofile (3gs6, 3gs7)
Video 3GP dengan profil ini akan dapat di-download secara progressive, yaitu video yang sedang di-download tetap dapat dimainkan secara penuh meskipun proses download belum selesai. Kualitas video tersebut akan sebanding dengan kemajuan proses download, dimana kualitas yang terbaik akan dicapai apabila prosesnya sudah selesai.
A-2
4. Extended-presentationprofile (3ge6, 3ge7)
Profil ini ditujukan untuk keperluan presentasi seperti slideshow, sehingga dapat menyimpan berbagai jenis media seperti gambar, suara, video atau tulisan. Video yang dihasilkan nantinya dapat menyimpan informasi semua gambar yang muncul beserta durasi tiap gambar, tulisan yang muncul atau latar suara yang akan dimainkan pada gambar tertentu.
5. Generalprofile (3gg6, 3gg7)
Video 3GP yang tidak termasuk keempat profil diatas, akan dimasukkan ke dalam general profile. Profil ini biasanya bersifat sementara, dan akan dilakukan pemilihan profil baru setelah ditentukan apa tujuan dari pembuatan video tersebut yang lebih cocok. Sebagai contoh, sebuah video 3GP belum ditentukan apakah akan dikirimkan melalui MMS, atau akan di-upload ke server untuk keperluan streaming, sehingga diberikan profil ini terlebih dahulu. Setelah video tersebut dilakukan penyusunan ulang dan menyesuaikannya dengan keperluan streaming, maka dilakukan penggantian profil menjadi streaming-server profile.
A.2 Struktur File
Format file yang digunakan pada video 3GP menggunakan struktur ISO base media file format, yaitu format file untuk audio-visual yang telah distandarkan oleh ISO dan IEC. Format ini memiliki struktur file berorientasi objek, dimana tiap isinya terkumpul dalam objek yang dinamakan dengan box. Jenis box yang mengandung box lain disebut sebagai container box.
Tiap box memiliki header yang terdefinisi pada awal box, yang berisikan ukuran dan tipe dari box tersebut. Ukuran box pada header berisi ukuran semua data yang terkandung dalam box, yaitu header itu sendiri, isi data, atau jumlah ukuran box lain di dalamnya. Sedangkan tipe box pada header adalah 4 buah karakter yang unik, dan digunakan untuk mengidentifikasi bagaimana cara membaca box tersebut.
Pada Gambar A-1 terdapat contoh struktur file yang umum ditemui pada file video 3GP dengan Basic Profile. Judul box yang dicetak tebal merupakan container box, sedangkan sisanya merupakan box biasa yang berisikan data. Berikut adalah penjelasan box yang berisikan data tersebut:
A-3
Gambar A-1 Struktur file pada video 3GP
1. FileType Box (ftyp)
Berisi informasi brand yang paling sesuai (major brand), beserta daftar brand lainnya yang masih cocok dengan video tersebut (compatible brands). Major brand juga ikut dimasukkan ke dalam compatible brands, sehingga dalam daftar tersebut major brand akan memiliki kecocokan yang paling sesuai.
2. Media Data Box (mdat)
Berisi informasi media dari video, yaitu seluruh video frame dan audio frame yang ditampilkan. Format dari isi box ini tergantung pada jenis video dan audio codec yang didefinisikan pada Sample Description Box, sedangkan lokasi dari masing-masing frame terdapat pada Chunk Offset Box.
A-4
3. Movie Header Box (mvhd)
Berisi informasi dari video seperti waktu pembuatan file (creation time), waktu terakhir modifikasi file (modification time), satuan waktu (1 untuk detik, 1000 untuk milidetik, dst.), durasi video berdasarkan satuan waktu, serta volume suara. 4. Track Header Box (tkhd)
Berisi informasi dari track seperti waktu pembuatan track (creation time), waktu terakhir modifikasi file track (modification time), durasi track berdasarkan satuan waktu yang didefinisikan pada Movie Header Box, volume suara, beserta nomor identitas track. Biasanya hanya terdapat 2 buah track pada file, yaitu video track dan audio track.
5. Media Header Box (mdhd)
Berisi informasi dari media seperti waktu pembuatan media (creation time), waktu terakhir modifikasi media (modification time), satuan waktu, durasi media berdasarkan satuan waktu.
6. Handler Reference Box (hdlr)
Berisi informasi jenis media pada track yang direpresentasikan dalam Media Box. Terdapat dua tipe yang umum yang digunakan, yaitu video track (vide) atau audio track (soun).
7. Video Media Header Box (vmhd)
Berisi informasi komponen warna dasar (merah, hijau, biru) yang digunakan. 8. Sound Media Header Box (smhd)
Berisi informasi keseimbangan suara pada stereo. Nilai 0 untuk center, -1 untuk kiri penuh, dan 1 untuk kanan penuh.
9. Sample Description Box (stsd)
Berisi informasi dari video dan audio codec akan digunakan, untuk proses inisialisasi pada saat membaca video tersebut. Informasi pada codec ini disebut juga dengan sample entry box. Pada video 3GP, video codec yang terdefinisi adalah MP4VisualSampleEntry untuk MPEG-4, H263SampleEntry untuk H.263, dan AVCSampleEntry untuk H.264/AVC. Sedang\kan audio codec yang terdefinisi
A-5
adalah MP4AudioSampleEntry untuk MPEG-4 audio, AMRSampleEntry untuk AMR, dan AMRWPSampleEntry untuk AMR Wideband.
10. Sync Sample Box (stss)
Berisi informasi jumlah sample yang merupakan random access point, beserta nomor urutan sample tersebut. Apabila box ini tidak ada, maka semua sample adalah random access point.
11. Sample Size Box (stsz)
Berisi informasi berapa jumlah sample yang ada pada media, beserta ukuran tiap-tiap sample.
12. Chunk Offset Box (stco)
Berisi informasi dari offset tiap-tiap chunk. Posisi offset disini terhitung dari awal file, bukan dari awal suatu box.
B-1
LAMPIRAN B
VIDEO
CODEC
H.263
Video codec H.263 merupakan format video yang diciptakan oleh ITU-T, yaitu video terkompresi yang memiliki bit-rate rendah sehingga cocok dipakai pada keperluan transmisi network, seperti video conference. Versi pertama H.263 dirilis pertama kali pada tahun 1996, dan sudah mengalami 2 kali perubahan definisi yaitu pada tahun 1998 dan tahun 2000. Perubahan yang dilakukan sebagian besar adalah menambah fitur, baik yang merupakan perbaikan fitur pada versi sebelumnya, atau fitur yang baru. Tiap perubahan tetap memperhatikan kompatibilitas terhadap versi sebelumnya, dengan cara menambahkan suatu header khusus sebagai penanda aktif atau tidaknya fitur-fitur tersebut, sehingga video dengan H.263 versi baru tetap dapat dimainkan pada video player yang belum mendukung versi tersebut.
B.1 Profil dan Level
Karakteristik dari video codec H.263 ditentukan sesuai dengan profil yang akan menentukan fitur-fitur apa saja yang didukung video tersebut, dan level yang mengatur kapabilitas performansi video seperti ukuran resolusi dan bitrate yang digunakan. Terdapat 9 buah profil yang terdefinisi pada H.263, yaitu:
Profil 0: The Baseline Profile
Profil 1: H.320 Coding Efficiency Version 2 Backward-Compatibility Profile Profil 2: Version 1 Backward-Compatibility Profile
Profil 3: Version 2 Interactive and Streaming Wireless Profile Profil 4: Version 3 Interactive and Streaming Wireless Profile Profil 5: Conversational High Compression Profile
Profil 6: Conversational Internet Profile Profil 7: Conversational Interlace Profile Profil 8: High Latency Profile
Dan level pada H.263 berjumlah 8, yaitu:
Level 10: QCIF, SQCIF. 64 kbps, 14,98 fps Level 20: CIF, QCIF, SQCIF. 128 kbps, 29,97 fps Level 30: CIF, QCIF, SQCIF. 384 kbps, 29,97 fps
B-2
Level 40: CIF, QCIF, SQCIF. 2048 kbps, 29,97 fps Level 45: QCIF, SQCIF. 128 kbps, 14,98 fps
Level 50: standar CIF, custom. 4096 kbps, 59,94 fps Level 60: standar CIF, custom. 8192 kbps, 59,94 fps Level 70: standar CIF, custom. 16384 kbps, 59,94 fps
Untuk pelaksanaan Tugas Akhir, digunakan video codec H.263 dengan Profil 0 (Baseline Profile) dan level 10. Baseline Profil hanya mendukung fitur pada versi awal dari video H.263, dan tidak terdapat pemakaian fitur-fitur tambahan. Sedangkan level10 hanya mendukung resolusi sebesar 176 x 144 pixel (QCIF) dan 128 x 96 pixel (Sub-QCIF), dengan bitrate 64 kilobits per detik.
B.2
Encode
Proses encoding pada video H.263 dilakukan dengan cara membagi-bagi tiap frame ke dalam blok-blok yang lebih kecil, kemudian masing-masing blok akan diolah sesuai dengan jenis kompresi pada frame yang digunakan.
Pembagian blok pada frame H.263 dapat terlihat pada Gambar B–1. Frame dibagi secara horizontal menjadi sekumpulan Group of blocks (GOB), dimana satu GOB memiliki tinggi 16 pixel. Tiap GOB terbagi lagi secara vertikal menjadi beberapa macroblock yang berukuran 16 x 16 pixel. Sebuah macroblock terdiri dari enam buah blok, yaitu empat buah luminance (Y) blok, dan 2 buah chrominance (Cb dan Cr), yang masing-masing berukuran 8 x 8 pixel. Pada bagian blok inilah yang nantinya akan dilakukan kompresi.
Group of blocks (GOB) Macroblock Block Y Cb Cr Frame
B-3
Ada dua jenis kompresi yang digunakan, yaitu kompresi intraframe dan interframe. Frame yang dikompresi secara intraframe akan dilakukan dengan cara yang mirip pada kompresi gambar berformat JPEG. Sedangkan kompresi secara interframe akan dilakukan berdasarkan perubahan-perubahan yang terjadi dengan frame sebelumnya, sehingga cukup perubahan tersebut yang akan disimpan.
1. Kompresi Intraframe
Proses kompresi ini mirip dengan teknik kompresi pada gambar berformat JPEG, dengan urutan langkah seperti berikut:
a. Discrete Cosine Transform
Proses mengubah domain sinyal gambar yang diterima, dari domain spasial ke domain frekuensi. Transformasi ini menghasilkan 64 buah koefisien untuk setiap blok, dimana terdapat sebuah koefisien DC dan 63 buah koefisien AC. b. Kuantisasi
Proses memperkecil nilai pada matriks gambar, dengan membaginya sesuai dengan matriks kuantisasi.
c. Run Length Encoding
Proses mengubah suatu simbol yang berurutan menjadi suatu kode, yang terdiri dari simbol tersebut dan jumlah perulangannya.
d. Variable Length Coding
Proses mengkodekan simbol dengan kode-kode tertentu yang mempunyai panjang berlainan, dimana simbol yang sering muncul akan dikodekan dengan kode yang pendek, dan simbol yang jarang muncul akan dikodekan dengan kode yang panjang.
Frame yang menggunakan kompresi intraframe disebut dengan I-frame atau I-picture.
2. Kompresi Interframe
Proses kompresi ini memakai metode motion estimation, yaitu memeriksa perubahan-perubahan yang terjadi pada suatu frame dengan frame sebelumnya sebagai referensi. Hasil akhirnya adalah motion vector, yang merupakan nilai dari pergeseran letak blok pada frame tersebut dan frame referensi. Frame yang menggunakan kompresi ini disebut dengan P-frame atau P-picture.
B-4
B.2 Struktur File
File video H.263 disusun sesuai dengan pembagian pada frame, yang disebut juga dengan layer. Pembagian layer ini dapat dilihat pada Gambar B–2. Layer paling luar adalah frame layer atau picture layer, dengan jumlah yang sama dengan jumlah frame pada video tersebut. Di dalam picture layer terdapat sejumlah GOB layer, yang berjumlah tinggi video dibagi dengan 16. Tiap GOB layer memiliki macroblok layer sebanyak lebar video dibagi dengan 16. Block layer merupakan layer paling dalam, dengan jumlah 6 buah pada masing-masing macroblock layer. Pada block layer inilah terdapat bit-bit yang merupakan hasil dari proses kompresi, baik secara intraframe maupun interframe. Berikut penjelasan singkat mengenai masing-masing layer:
1. PictureLayer
Setiap frame akan memiliki sebuah picture layer, dimana berisi informasi frame tersebut seperti jenis frame (I-frame atau P-frame), ukuran resolusi frame, matriks kuantisasi yang digunakan, serta fitur-fitur apa saja yang aktif. Kode-kode yang dimiliki dalam picturelayer adalah:
a. PictureStartCode (PSC)
Merupakan kode tetap sepanjang 22-bit yang tetap, sebagai header dari setiap picture layer, yaitu. 0000 0000 0000 0000 1000 00.
b. TemporalReference (TR)
Merupakan nilai index frame yang digunakan sebagai reference frame pada proses kompresi interframe. Panjang bit dari TR adalah 8-bit, sehingga nilai index yang disimpan hanya sebanyak 8-bit LSB-nya saja. c. TypeInformation (PTYPE)
Merupakan sekumpulan bit yang menyatakan tipe frame tersebut, seperti ukuran resolusi, jenis kompresi yang digunakan, dan penanda aktif atau tidaknya fitur-fitur.
d. QuantizerInformation (PQUANT)
Merupakan penunjuk matriks kuantisasi manakah yang digunakan pada frame. Bit yang digunakan sepanjang 5-bit, dimana menyebabkan nilai penunjuk berkisar antara 1 hingga 31.
B-5 Picture Layer GOB Layer Macroblock Layer Block Layer Y 1 Block Layer Y 2 Block Layer Y 3 Block Layer Y 4 Block Layer Cb Block Layer Cr
Macroblock Layer Macroblock Layer
...
GOB Layer Macroblock Layer Block Layer Y 1 Block Layer Y 2 Block Layer Y 3 Block Layer Y 4 Block Layer Cb Block Layer CrMacroblock Layer Macroblock Layer
...
...
Block Layer Y 1 Block Layer Y 2 Block Layer Y 3 Block Layer Y 4 Block Layer Cb Block Layer Cr Block Layer Y 1 Block Layer Y 2 Block Layer Y 3 Block Layer Y 4 Block Layer Cb Block Layer Cr Block Layer Y 1 Block Layer Y 2 Block Layer Y 3 Block Layer Y 4 Block Layer Cb Block Layer Cr Block Layer Y 1 Block Layer Y 2 Block Layer Y 3 Block Layer Y 4 Block Layer Cb Block Layer CrGambar B–2 Pembagian layer pada frame video H.263
2. GOBLayer
Isi dari tiap GOB layer adalah nomor index dari GOB, nomor identitas GOB terhadap frame, dan matriks kuantisasi yang khusus digunakan dalam GOB ini. Penulisan GOB layer boleh untuk tidak dilakukan, tergantung dari encoder masing-masing.
a. Group of Block Start Code (GBSC)
Merupakan kode tetap sepanjang 17-bit yang tetap, sebagai header dari setiap GOB layer, yaitu. 0000 0000 0000 0000 1.
b. GroupNumber (GN)
Merupakan nomor index sepanjang 5-bit yang menunjukkan urutan GOB pada frame tersebut.
B-6
c. GOBFrameID (GFID)
Merupakan nomor identitas dari GOB, dimana GOB pada frame yang sama akan bernilai sama. Nilai ini memiliki panjang 2-bit.
d. QuantizerInformation (GQUANT)
Merupakan nilai sepanjang 5-bit, untuk menandakan mana matriks kuantisasi yang digunakan pada frame.
3. MacroblockLayer
Isi dari masing-masing layer ini adalah informasi mengenai pola nilai koefisien pada semua block layer di dalamnya, nilai motion vector, beserta matriks kuantisasi yang digunakan.
a. CodedMacroblockIndication (COD)
Khusus terdapat pada P-frame, yang menandakan apakah macroblock ini memiliki informasi lanjutan atau tidak. Jika bernilai 0, berarti terdapat informasi di dalam macroblock. Jika bernilai 1, maka tidak ada lagi informasi, dan layer ini dianggap sebagai P-frame dengan semua nilai motion vector adalah 0.
b. MacroblockType& Coded Block Pattern for Chrominance (MCBPC) Merupakan nilai VLC yang menunjukkan tipe macroblock, dan pola dari dua jenis blok chrominance. Tabel kode VLC MCBPC pada I-frame dan P-frame dapat dilihat pada Tabel-B1. dan Tabel B-2. Tipe macroblock akan menandakan ada atau tidaknya DQUANT, atau MVD. Sedangkan 2 bit pada kolom CBPC menandakan apakah terdapat koefisien TCOEF pada block layer, yaitu bit pertama untuk blok Cb dan bit kedua untuk blok Cr. Apabila bit bernilai 0, maka tidak terdapat TCOEF, sedangkan akan terdapat nilai TCOEF apabila bit bernilai 1.
Tabel B-1 Kode VLC untuk MCBPC (I-frame)
Index Macroblock type CBPC Code
0 1 2 3 3 3 3 3 00 01 10 11 1 001 010 011 4 5 6 7 4 4 4 4 00 01 10 11 0001 0000 01 0000 10 0000 11
B-7
Index Macroblock type CBPC Code
8 Stuffing - 0000 0000 1
Tabel B--2 Kode VLC untuk MCBPC (P-frame)
Index Macroblock type CBPC (56) Code
0 1 2 3 0 0 0 0 00 01 10 11 1 0011 0010 0001 01 4 5 6 7 1 1 1 1 00 01 10 11 011 0000 111 0000 110 0000 0010 1 8 9 10 11 2 2 2 2 00 01 10 11 010 0000 101 0000 100 0000 0101 12 13 14 15 3 3 3 3 00 01 10 11 0001 1 0000 0100 0000 0011 0000 011 16 17 18 19 4 4 4 4 00 01 10 11 0001 00 0000 0010 0 0000 0001 1 0000 0001 0 20 Stuffing - 0000 0000 1 21 22 23 24 5 5 5 5 00 01 10 11 0000 0000 010 0000 0000 0110 0 0000 0000 0111 0 0000 0000 0111 1
c. Coded Block Pattern for Luminance (CBPY)
Merupakan nilai VLC yang menunjukkan pola dari empat buah blok luminance, yang ditunjukkan pada Tabel B-3. 4-bit pada kolom CBPY menandakan apakah terdapat koefisien TCOEF pada block layer, yaitu bit pertama untuk blok Y1, bit kedua untuk blok Y2, bit ketiga untuk blok Y3,
dan bit keempat untuk blok Y4. Apabila bit bernilai 0, maka tidak terdapat
B-8
Tabel B-3 Kode VLC untuk CBPY
d. Motion Vector (MVD)
Merupakan nilai VLC yang menunjukkan data motion vector pada frame, dan hanya terdapat pada P-frame. Pada video, nilai MVD disimpan dua kali, yaitu motion vector untuk arah horizontal dan vertikal. Tabel kode VLC dapat dilihat pada Tabel B-4. Vector berarti perbedaan letak antara blok pada frame referensi dengan frame saat ini; positif berarti ke kanan atau ke bawah, dan negatif berarti ke kiri atau ke atas.
Tabel B-4 Kode VLC untuk MVD
Index Vector Differences Codes
0 –16 16 0000 0000 0010 1 1 –15.5 16.5 0000 0000 0011 1 2 –15 17 0000 0000 0101 3 –14.5 17.5 0000 0000 0111 4 –14 18 0000 0000 1001 5 –13.5 18.5 0000 0000 1011 6 –13 19 0000 0000 1101 7 –12.5 19.5 0000 0000 1111 8 –12 20 0000 0001 001 9 –11.5 20.5 0000 0001 011 10 –11 21 0000 0001 101 11 –10.5 21.5 0000 0001 111 12 –10 22 0000 0010 001 Index CBPY (INTRA) CBPY (INTER) Code 0 0000 1111 0011 1 0001 1110 0010 1 2 0010 1101 0010 0 3 0011 1100 1001 4 0100 1011 0001 1 5 0101 1010 0111 6 0110 1001 0000 10 7 0111 1000 1011 8 1000 0111 0001 0 9 1001 0110 0000 11 10 1010 0101 0101 11 1011 0100 1010 12 1100 0011 0100 13 1101 0010 1000 14 1110 0001 0110 15 1111 0000 11
B-9
Index Vector Differences Codes
13 –9.5 22.5 0000 0010 011 14 –9 23 0000 0010 101 15 –8.5 23.5 0000 0010 111 16 –8 24 0000 0011 001 17 –7.5 24.5 0000 0011 011 18 –7 25 0000 0011 101 19 –6.5 25.5 0000 0011 111 20 –6 26 0000 0100 001 21 –5.5 26.5 0000 0100 011 22 –5 27 0000 0100 11 23 –4.5 27.5 0000 0101 01 24 –4 28 0000 0101 11 25 –3.5 28.5 0000 0111 26 –3 29 0000 1001 27 –2.5 29.5 0000 1011 28 –2 30 0000 111 29 –1.5 30.5 0001 1 30 –1 31 0011 31 –0.5 31.5 011 32 0 - 1 33 0.5 –31.5 010 34 1 –31 0010 35 1.5 –30.5 0001 0 36 2 –30 0000 110 37 2.5 –29.5 0000 1010 38 3 –29 0000 1000 39 3.5 –28.5 0000 0110 40 4 –28 0000 0101 10 41 4.5 –27.5 0000 0101 00 42 5 –27 0000 0100 10 43 5.5 –26.5 0000 0100 010 44 6 –26 0000 0100 000 45 6.5 –25.5 0000 0011 110 46 7 –25 0000 0011 100 47 7.5 –24.5 0000 0011 010 48 8 –24 0000 0011 000 49 8.5 –23.5 0000 0010 110 50 9 –23 0000 0010 100 51 9.5 –22.5 0000 0010 010 52 10 –22 0000 0010 000 53 10.5 –21.5 0000 0001 110 54 11 –21 0000 0001 100 55 11.5 –20.5 0000 0001 010 56 12 –20 0000 0001 000 57 12.5 –19.5 0000 0000 1110
B-10
Index Vector Differences Codes
58 13 –19 0000 0000 1100 59 13.5 –18.5 0000 0000 1010 60 14 –18 0000 0000 1000 61 14.5 –17.5 0000 0000 0110 62 15 –17 0000 0000 0100 63 15.5 –16.5 0000 0000 0011 0
e. Quantizer Information (DQUANT)
Merupakan penanda dari matriks kuantisasi yang digunakan khusus pada macroblock ini, dan jika tidak diisi berarti menggunakan matriks kuantisasi yang didefinisikan pada layer di atasnya.
4. BlockLayer
Isi dari layer ini adalah kode dari hasil kompresi pada blok tersebut. Pada layer inilah terdapat nilai-nilai yang berhubungan langsung dengan bagian yang tampak pada frame.
a. DC Coefficient for INTRA Blocks (INTRA-DC)
Merupakan kode FLC yang mengandung nilai koefisien DC, dengan panjang tetap sebanyak 8-bit. Koefisien DC yang disimpan berkisar antara -1024 hingga 1023, dan untuk dapat mendekati kisaran nilai koefisien ini, maka INTRA-DC hanya menyimpan setiap 8 nilai. INTRA-DC yang disimpan akan dibulatkan ke kelipatan 8 yang terdekat. Tabel kode FLC untuk INTRA-DC ditunjukkan pada Tabel B-5, dengan Reconstruction level adalah nilai koefisien DC. Dan untuk menghindari kesalahan proses decode, kode FLC „0000 0000‟ dan „1000 0000‟ tidak digunakan.
Tabel B-5 Kode FLC untuk INTRA-DC
Index FLC Reconstruction level
0 0000 0001 8 1 0000 0010 16 2 0000 0011 24 ... ... ... 126 0111 1111 1016 127 1111 1111 1024 128 1000 0001 1032 ... ... ...
B-11
Index FLC Reconstruction level
252 1111 1101 2024
253 1111 1110 2032
b. Transform Coefficent (TCOEF)
Merupakan kode VLC yang menunjukkan nilai transform (koefisien AC) pada blok, yang dikodekan menggunakan entropy coding dengan zig-zag scanning. Ada atau tidaknya koefisien ini tergantung pada nilai MCBPC atau CBPY, untuk masing-masing blok chrominance dan luminance. Tabel kode VLC dapat dilihat pada Tabel B-6.
Kode TCOEF merupakan gabungan dari 3 buah komponen, yaitu LAST, RUN, dan LEVEL. LAST merupakan penanda apakah koefisien bukan 0 yang terakhir (ditandai dengan bit 1) atau tidak (ditandai dengan bit 0). RUN menunjukkan berapa angka 0 yang mendahului koefisien ini, sedangkan LEVEL adalah nilai absolut dari koefisien AC. Nilai LEVEL nantinya juga akan dipetakan ke dalam kisaran -1024 hingga 1023. Bit terakhir dari kode VLC menunjukkan tanda positif/negatif nilai LEVEL; 0 untuk positif dan 1 untuk negatif.
Terdapat sebuah kode VLC khusus yang dinamakan dengan ESCAPE, dimana komponen LAST, RUN, dan LEVEL harus didefinisikan secara manual. LAST dikodekan dengan 1-bit, sedangkan RUN dan LEVEL menggunakan kode VLC, seperti pada Tabel B-7 dan Tabel B-8.
Tabel B-6 Kode VLC untuk TCOEF
Index LAST RUN |LEVEL| Code
0 0 0 1 10s 1 0 0 2 1111s 2 0 0 3 0101 01s 3 0 0 4 0010 111s 4 0 0 5 0001 1111s 5 0 0 6 0001 0010 1s 6 0 0 7 0001 0010 0s 7 0 0 8 0000 1000 01s 8 0 0 9 0000 1000 00s 9 0 0 10 0000 0000 111s 10 0 0 11 0000 0000 110s 11 0 0 12 0000 0100 000s 12 0 1 1 110s
B-12
Index LAST RUN |LEVEL| Code
13 0 1 2 0101 00s 14 0 1 3 0001 1110s 15 0 1 4 0000 0011 11s 16 0 1 5 0000 0100 001s 17 0 1 6 0000 0101 0000s 18 0 2 1 1110s 19 0 2 2 0001 1101s 20 0 2 3 0000 0011 10s 21 0 2 4 0000 0101 0001s 22 0 3 1 0110 1s 23 0 3 2 0001 0001 1s 24 0 3 3 0000 0011 01s 25 0 4 1 0110 0s 26 0 4 2 0001 0001 0s 27 0 4 3 0000 0101 0010s 28 0 5 1 0101 1s 29 0 5 2 0000 0011 00s 30 0 5 3 0000 0101 0011s 31 0 6 1 0100 11s 32 0 6 2 0000 0010 11s 33 0 6 3 0000 0101 0100s 34 0 7 1 0100 10s 35 0 7 2 0000 0010 10s 36 0 8 1 0100 01s 37 0 8 2 0000 0010 01s 38 0 9 1 0100 00s 39 0 9 2 0000 0010 00s 40 0 10 1 0010 110s 41 0 10 2 0000 0101 0101s 42 0 11 1 0010 101s 43 0 12 1 0010 100s 44 0 13 1 0001 1100s 45 0 14 1 0001 1011s 46 0 15 1 0001 0000 1s 47 0 16 1 0001 0000 0s 48 0 17 1 0000 1111 1s 49 0 18 1 0000 1111 0s 50 0 19 1 0000 1110 1s 51 0 20 1 0000 1110 0s 52 0 21 1 0000 1101 1s 53 0 22 1 0000 1101 0s 54 0 23 1 0000 0100 010s 55 0 24 1 0000 0100 011s
B-13
Index LAST RUN |LEVEL| Code
56 0 25 1 0000 0101 0110s 57 0 26 1 0000 0101 0111s 58 1 0 1 0111s 59 1 0 2 0000 1100 1s 60 1 0 3 0000 0000 101s 61 1 1 1 0011 11s 62 1 1 2 0000 0000 100s 63 1 2 1 0011 10s 64 1 3 1 0011 01s 65 1 4 1 0011 00s 66 1 5 1 0010 011s 67 1 6 1 0010 010s 68 1 7 1 0010 001s 69 1 8 1 0010 000s 70 1 9 1 0001 1010s 71 1 10 1 0001 1001s 72 1 11 1 0001 1000s 73 1 12 1 0001 0111s 74 1 13 1 0001 0110s 75 1 14 1 0001 0101s 76 1 15 1 0001 0100s 77 1 16 1 0001 0011s 78 1 17 1 0000 1100 0s 79 1 18 1 0000 1011 1s 80 1 19 1 0000 1011 0s 81 1 20 1 0000 1010 1s 82 1 21 1 0000 1010 0s 83 1 22 1 0000 1001 1s 84 1 23 1 0000 1001 0s 85 1 24 1 0000 1000 1s 86 1 25 1 0000 0001 11s 87 1 26 1 0000 0001 10s 88 1 27 1 0000 0001 01s 89 1 28 1 0000 0001 00s 90 1 29 1 0000 0100 100s 91 1 30 1 0000 0100 101s 92 1 31 1 0000 0100 110s 93 1 32 1 0000 0100 111s 94 1 33 1 0000 0101 1000s 95 1 34 1 0000 0101 1001s 96 1 35 1 0000 0101 1010s 97 1 36 1 0000 0101 1011s 98 1 37 1 0000 0101 1100s
B-14
Index LAST RUN |LEVEL| Code
99 1 38 1 0000 0101 1101s
100 1 39 1 0000 0101 1110s
101 1 40 1 0000 0101 1111s
102 ESCAPE 0000 011
Tabel B-7 Kode VLC untuk RUN
Index RUN Code
0 0 000 000 1 1 000 001 2 2 000 010 3 3 000 011 .. .. .. 63 63 111 111
Tabel B-8 Kode VLC untuk LEVEL
Index LEVEL Code
- -128 Tidak dipakai pada Baseline Profile
0 -127 1000 0001 1 -126 1000 0010 .. .. .. 125 -2 1111 1110 126 -1 1111 1111 - 0 Tidak dipakai 127 1 0000 0001 128 2 0000 0010 .. .. .. 253 127 0111 1111
C-1
LAMPIRAN C
KELAS PERANCANGAN
Tabel C-1 Kelas XGPMIDlet
Atribut Keterangan embed Embed extract Extract form Form fileBrowser FileBrowser textField TextField list List textBox TextBox alert Alert wait WaitScreen command Command task SimpleCancellableTask Operasi Keterangan XGPMIDlet() Konstruktor
startApp() Prosedur yang dijalankan saat aplikasi mulai
diaktifkan
pauseApp() Prosedur yang dijalankan saat aplikasi sedang
terinterupsi
destroyApp(unconditional: Boolean) Prosedur yang dijalankan saat aplikasi dinonaktifkan
commandAction(command: Command, displayable: Displayable)
Prosedur untuk menanggapi aksi yang terjadi bila Command dijalankan
switchDisplayable(alert: Alert, nextDisplayable: Displayable)
Prosedur untuk mengganti layar tampilan
initialize() Prosedur untuk memberikan nilai awal pada
atribut
clearData() Prosedur untuk menghilangkan data yang
sudah dimasukkan
Tabel C-2 Kelas Embed
Nama Atribut Tipe
messageReady Boolean
videoReady Boolean
video Video
message Message
key Key
Nama Operasi Keterangan
Embed() Konstruktor
C-2
Nama Operasi Keterangan
getVideoFileName(): String Fungsi untuk mendapatkan alamat video setVideoOutputFileName(address: String) Prosedur untuk menyimpan nama video
keluaran
getVideoOutputFileName(): String Fungsi untuk mendapatkan nama video keluaran
setVideoOverwrite(nOverwrite: boolean) Prosedur untuk menyimpan informasi
overwrite video keluaran
getVideoOverwrite() Fungsi untuk mendapatkan informasi
overwrite video keluaran
getVideoMsgError(): Vector Fungsi untuk mendapatkan pesan error pada saat validasi format
getMessageFileName(): String Fungsi untuk mendapatkan alamat pesan setMessageFileName(url: String) Prosedur untuk menyimpan alamat pesan setMessageText(text: String) Prosedur untuk menyimpan teks pesan getMessageText(): String Fungsi untuk mendapatkan teks pesan isMessageFile(): Boolean Fungsi untuk mengetahui apakah pesan
berbentuk file atau teks
setPassword(nPassword: String) Prosedur untuk menyimpan string kunci getPassword(): String Fungsi untuk mendapatkan string kunci
clear() Prosedur untuk menghilangkan data masukan
allReady(): Boolean Fungsi untuk mengetahui apakah semua input
sudah dimasukkan
videoAnalyze(): Boolean Fungsi untuk melakukan validasi format video, yang mengembalikan true apabila valid
videoEmbedCancel() Prosedur untuk membatalkan proses
penyisipan, karena ukuran video yang tidak mencukupi
videoEmbedFinish() Prosedur untuk menyelesaikan proses
penyisipan
videoEmbed(): String Fungsi untuk melakukan penyisipan pesan,
yang mengembalikan status proses
Tabel C-3 Kelas Extract
Nama Atribut Tipe
video Video
message Message
key Key
videoReady Boolean
Nama Operasi Keterangan
Extract() Konstruktor
setVideoFileName(address: String) Prosedur untuk menyimpan alamat video getVideoFileName(): String Fungsi untuk mendapatkan alamat video getVideoMsgError(): Vector Fungsi untuk mendapatkan pesan error pada
C-3
Nama Operasi Keterangan
getMessageText(): String Fungsi untuk mendapatkan teks pesan getPassword(): String Fungsi untuk mendapatkan string kunci setPassword(nPassword: String) Prosedur untuk menyimpan string kunci
clear() Prosedur untuk menghilangkan data masukan
allReady(): Boolean Fungsi untuk mengetahui apakah semua input
sudah dimasukkan
videoExtract(): String Fungsi untuk melakukan ekstraksi pesan, yang mengembalikan status proses ekstraksi videoAnalyze(): Boolean Fungsi untuk melakukan validasi format
video, yang mengembalikan true jika valid
Tabel C-4 Kelas Message
Nama Atribut Tipe
type Short url String fileName String filePath String status String text StringBuffer messageBit StringBuffer headerBit StringBuffer fileConnection FileConnection dataInputStream DataInputStream dataOutputStream DataOutputStream sizeTotalMessage Integer byteWritten Integer counterMessageBit Integer counterHeaderBit Integer counterTotal Integer Message Byte[] Header Byte[]
Nama Operasi Keterangan
Message() Konstruktor
openFileRead() Prosedur untuk membuka koneksi file pesan
sebagai masukan
closeFileRead() Prosedur untuk menutup koneksi file
masukan openFileWrite(nPath: String, nName: String):
boolean
Fungsi untuk membuka koneksi file pesan sebagai keluaran, yang mengembalikan true
jika berhasil terbuka
closeFileWrite() Prosedur untuk menutup koneksi file
keluaran
writeText(x: Char) Prosedur untuk menambahkan sebuah
C-4
Nama Operasi Keterangan
writeByte(x: Integer) Prosedur untuk menambahkan sebuah
karakter ke dalam file pesan keluaran writeMessage(key: Key, ch: Char) Prosedur yang mengatur penulisan sebuah
karakter ke dalam pesan keluaran
readNext(): Byte Fungsi yang mengembalikan sebuah karakter
dari file pesan masukan
startUpEmbed(key: Key) Prosedur yang mempersiapkan data sebelum proses penyisipan pesan
finishEmbed() Prosedur yang mengatur nilai data setelah
proses penyisipan pesan
startUpExtract(key: Key) Prosedur yang mempersiapkan data sebelum proses ekstraksi pesan
finishExtract() Prosedur yang mengatur nilai data setelah
proses ekstraksi pesan
generateMessageBit(key: Key) Prosedur yang mengatur pembangkitan pesan acak
generateHeaderBit() Prosedur yang mengatur pembangkitan
header dari pesan
generateStatus(statusType: Short) Prosedur yang mengatur pembangkitan status proses dari proses pembukaan file keluaran getNextBit(key: Key): Char Fungsi yang mengembalikan sebuah bit dari
pesan masukan
getType(): Short Fungsi yang mengembalikan tipe pesan
setType(nType: Short) Prosedur untuk menyimpan tipe pesan
setSizeMessage(nSizeTotalMessage: Integer) Prosedur untuk menyimpan ukuran pesan getSizeMessage(): Integer Fungsi untuk mendapatkan ukuran pesan getTotalSize():Integer Fungsi yang mengembalikan ukuran total
pesan seluruhnya (dengan header)
setURL(nURL: String) Prosedur untuk menyimpan alamat pesan
getFileName(): String Fungsi yang mengembalikan nama file pesan getByteWritten():Integer Fungsi yang mengembalikan jumlah karakter
yang sudah diekstraksi
getStatus(): String Fungsi yang mengembalikan status proses
pembukaan file keluaran
getText(): String Fungsi yang mengembalikan isi teks pesan
setText(nText: String) Prosedur yang menyimpan teks pesan
Tabel C-5 Kelas Video
Nama Atribut Tipe
bufferBit StringBuffer
messageResult StringBuffer
messageBit StringBuffer
nPict Integer
C-5
Nama Atribut Tipe
totalMessageSize Integer pictOffset Integer [] pictSize Integer [] buffer Byte [] fileSize Long fileNameResult String fileName String fileNameOutput String fileURL String stopEmbed Boolean stopExtract Boolean fileConnectionInput FileConnection fileConnectionOutput FileConnection dataInputStream DataInputStream dataOutputStream DataOutputStream vMsgError Vector
Nama Operasi Keterangan
Video() Konstruktor
openReader() Prosedur untuk membuka koneksi file video
sebagai masukan
closeReader() Prosedur untuk menutup koneksi file video
sebagai masukan
openWriter() Prosedur untuk membuka koneksi file video
sebagai keluaran
closeWriter() Prosedur untuk menutup koneksi file video
sebagai keluaran
readInt(times: Integer): Integer Fungsi untuk membaca angka sebesar 1 byte
dari buffer
readBit(len: Integer): String Fungsi untuk membaca „len‟ bit dari buffer
readNext():Integer Fungsi untuk membaca sebuah karakter dari
buffer
readByte(len: Integer) Prosedur untuk membaca isi video sebanyak „len‟ byte ke dalam buffer
skipBit(len: Integer) Prosedur untuk melewati isi video sebanyak „len‟ bit
skipByte(len: Integer) Prosedur untuk melewati isi video sebanyak „len‟ byte
skipByteTo(pos: Integer) Prosedur untuk melewati isi video hingga ke posisi masukan
copyFile(): Boolean Prosedur untuk meng-copy video masukan
menjadi video sementara
delete(fileName: String) Prosedur untuk menghapus video dengan nama file masukan
renameOutput(fileName: String) Prosedur untuk melakukan penamaan ulang video keluaran dengan nama file tertentu
C-6
Nama Operasi Keterangan
writeByte() Prosedur untuk memindahkan semua isi
buffer ke dalam video
writeMessage(message: Message, key: Key) Prosedur yang melakukan penyisipan pesan ke dalam video
startUpEmbed(message: Message, key: Key) Prosedur yang mempersiapkan data sebelum proses penyisipan pesan
finishEmbed(message: Message) Prosedur yang mengatur nilai data setelah proses penyisipan pesan
embed(message: Message, key: Key, write: Boolean): String
Fungsi yang mengatur penyisipan pesan ke dalam video, dan mengembalikan status hasil penyisipan
startUpExtract(message: Message, key: Key) Prosedur yang mempersiapkan data sebelum proses ekstraksi pesan
finishExtract(message: Message) Prosedur yang mengatur nilai data setelah proses ekstraksi pesan
extract(message: Message, key: Key): String Fungsi yang mengatur ekstraksi pesan dari video, dan mengembalikan status hasil ekstraksi
makeFileName(stBit: String) Prosedur untuk mengambil nama file dari
header pada proses ekstraksi
makeMessageSize(stBit: String) Prosedur untuk mengambil ukuran pesan dari
header pada proses ekstraksi
startUpValidateFormat() Prosedur yang mempersiapkan data sebelum proses validasi format video
validateFormat() Prosedur yang melakukan validasi format
video
setURL(nURL: String) Prosedur untuk menyimpan alamat video
setURLOutput(nURL: String) Prosedur untuk menyimpan alamat video keluaran
getURLOutput(): String Fungsi untuk mendapatkan alamat video keluaran
getFileName(): String Fungsi yang mengembalikan nama file video getFileNameOutput(): String Fungsi yang mengembalikan nama file video
keluaran
getMsgError(): Vector Fungsi yang mengembalikan pesan error, saat validasi format
isAnyError(): Boolean Fungsi untuk mengetahui apakah ada
kesalahan pada saat validasi, penyisipan, atau ekstraksi
isOutputExist(nName: String): Boolean Fungsi untuk memeriksa apakah video keluaran sudah ada atau belum
checkSize(nURL: String) Fungsi untuk memeriksa apakah memori yang disediakan cukup atau tidak
C-7
Tabel C-6 Kelas Key
Nama Atribut Tipe
password String
rand Random
counterKey Integer
theKey Integer []
Nama Operasi Keterangan
Key() Konstruktor
startUp() Prosedur yang mempersiapkan nilai data
sebelum pembangkitan bilangan acak generateTheKey(sizeKey: Integer) Prosedur yang mengatur pembangkitan
bilangan acak
generateSeedMD5() Prosedur yang mengatur pembangkitan nilai
seed dari string kunci
getNextInt():Integer Fungsi yang mengembalikan bilangan acak
berikutnya
setPassword(nPassword: String) Prosedur untuk menyimpan string kunci getPassword(): String Fungsi yang mengembalikan string kunci
Tabel C-7 Kelas Lib
Nama Atribut Tipe
msgSize Integer ftypSupported String[] ftypUnSupported String[] container String[] PICT_TYPE_INTRA Integer PICT_TYPE_INTER Integer ERROR_UNCOMPATIBLE_TYPE String ERROR_UNKNOWN_TYPE String ERROR_H263_NOT_BASELINE String ERROR_MP4 String OPEN_READ Integer OPEN_WRITE Integer OPEN_READ_WRITE Integer vlcMcbpcIPict String[] vlcMcbpcIPictMbType Integer [] vlcMcbpcIPictCbpc String[] vlcMcbpcPPict String[] vlcMcbpcPPictMbType Integer [] vlcMcbpcPPictCbpc String[] vlcCbpy String[] vlcMvd String[] vlcMvdVector Double[] vlcMvdDifference Double[] vlcTcoef String[] vlcTcoefRun Integer []
C-8
Nama Atribut Tipe
vlcTcoefLast Integer [] vlcTcoefLevel Integer [] maxBit Integer TYPE_FILE Short TYPE_TEXT Short STATUS_SUCCEED Short STATUS_MEMORY_ERROR Short
Nama Operasi Keterangan
bitToInt(bit: String): Integer Fungsi untuk mengubah string biner ke dalam bilangan desimal
byteToBit(x: Integer): String Fungsi untuk mengubah bilangan desimal ke dalam string biner
hexToInt(hex: String): Integer Fungsi untuk mengubah string heksadesimal ke dalam bilangan desimal
D-1
LAMPIRAN D
FRAME
VIDEO HASIL PENGUJIAN
Berikut ini adalah frame pertama dari masing-masing video hasil penyisipan dengan video yang asli, yang dilakukan pada Kasus uji 2.
Tabel D-1 Frame Video “Take-off.3gp” dan Video Hasil Penyisipan
Nama file yang
disisipkan Video asli Video hasil penyisipan
“file.txt”
“Readme.txt”
“Pic.jpg”
D-2
Tabel D-2 Frame Video “snagItNarration.3gp” dan Video Hasil Penyisipan
Nama file yang
disisipkan Video asli Video hasil penyisipan
“file.txt”
“Readme.txt”
“Pic.jpg”
D-3
Tabel D-3 Frame Video “MacVsPc.3gp” dan Video Hasil Penyisipan
Nama file yang
disisipkan Video asli Video hasil penyisipan
“file.txt”
“Readme.txt”
“Pic.jpg”