APLIKASI REMOTE WEBCAM PADA LAN (LOCAL AREA …Adi, S.T., M.T. selaku panitia penguji yang telah...
Transcript of APLIKASI REMOTE WEBCAM PADA LAN (LOCAL AREA …Adi, S.T., M.T. selaku panitia penguji yang telah...
APLIKASI REMOTE WEBCAM
PADA LAN (LOCAL AREA NETWORK)
SKRIPSI
Ditujukan Untuk Memenuhi Salah Satu Syarat Memperoleh Gelar
Sarjana Teknik Jurusan Teknik Informatika
Disusun Oleh :
Zeno Danny Kuncoro
035314036
TEKNIK INFORMATIKA
FAKULTAS SAINS DAN TEKNOLOGI
UNIVERSITAS SANATA DHARMA
YOGYAKARTA
2009
LAN (LOCAL AREA NETWORK) REMOTE
WEBCAM APPLICATION
A THESIS
Presented as Partial Fulfillment of the Requirements to obtain the Sarjana
Teknik Degree in Department of Informatics Engineering
Created by :
Zeno Danny Kuncoro
035314036
DEPARTMENT OF INFORMATICS ENGINEERING
FACULTY OF SCIENCE AND TECHNOLOGY
SANATA DHARMA UNIVERSITY
YOGYAKARTA
2009
ii
iii
iv
PERNYATAAN KEASLIAN KARYA
Saya menyatakan dengan sesungguhnya bahwa skripsi yang saya tulis ini
tidak memuat karya atau bagian karya orang lain, kecuali yang telah disebutkan
dalam kutipan dan daftar pustaka, sebagaimana layaknya karya ilmiah.
Yogyakarta, April 2009
Penyusun
Zeno Danny Kuncoro
v
THANKS TO :
Tuhan Yesus Kristus atas Berkat, Kasih dan karunia Nya
Terimakasih atas segala pengampunan yang telah diberikan.
Bapakku A.Y. Mahyarudin dan Ibuku Lucia Sumirah.
Terimakasih atas segala kepercayaan, dukungan serta bimbingan hingga nanti.
Kakakku Elishabet Elsih Lestari
Terimakasih atas dukungan serta wejangan-wejangannya.
Kakakku Cornelius Lilik Prianggono.
Terimakasih atas segala sesuatu yang telah kau ajarkan ke adikmu ini.
Kekasih hatiku : the X
Terimakasih atas waktu, semangat dan telah menjadi yang terbaik buatku.
Almamaterku Teknik Informatika Universitas Sanata Dharma khususnya angkatan 2003.
vi
ABSTRAKSI
Dalam sebuah warnet dibutuhkan pengawasan ekstra untuk mencegah
terjadinya tindak kejahatan pencurian terhadap perangkat warnet oleh pengguna.
Hingga saat ini, solusi yang diambil hanyalah menggunakan kamera pengawas
atau CCTV (Closed-Circuit Television), dan ini membutuhkan biaya yang lebih.
Untuk menangani hal ini penyusun mencoba memanfaatkan webcam
sebagai kamera pengawas. Dengan menggunakan webcam, dapat menekan biaya
yang digunakan karena pada umumnya warnet sudah memiliki webcam disetiap
komputer workstationnya yang selama ini hanya digunakan sebagai fasilitas
pendukung saja.
Aplikasi yang bersifat client-server ini diharapkan mampu untuk
mendukung tujuan diatas, dimana komputer workstation menjalankan aplikasi
server dan komputer operator menjalankan aplikasi client. Server akan merespon
request client berupa pengiriman citra yang telah ditangkap lalu diproses oleh
server kepada client. Proses pengambilan citra dan mengirimkannya secara
periodik inilah yang akan dilakukan terus menerus selama client melakukan
request kepada server.
Aplikasi ini menggunakan Microsoft® Visual Basic® 6.0 sebagai compilernya
dan webcam yang telah terintegrasi ke dalam sistem operasi dengan baik sebagai
perangkat yang akan mengambil citra.
vii
ABSTRACT
A internet cafe needed extra supervision to prevents the occurrence of
crime against theft internet cafes devices by the user. Until now, solutions that are
taken is using the camera supervisors only or CCTV (Closed-Circuit Television),
and this costs more.
To handle this case I tried to take advantage of the camera as a webcam
supervisors. By using the webcam, can be used to press charges because, in
general, Internet Cafe has a webcam in every workstation that this is only used as
supporting facilities only.
Client-server application is expected to be able to support the goals above,
where the workstation computer run the server application and the operator
computer run the client application. The server will respond to client requests in
form of image that has been captured and processed by the server to the client.
Processes the image and send them periodically is what will be done continuously
for the client to request to the server.
This application is using Microsoft ® Visual Basic ® 6.0 as the compiler and a
webcam that has been integrated into the operating system as the device that will
capture the image.
viii
LEMBAR PERNYATAAN PENYETUJUAN
PUBLIKASI KARYA ILMIAH UNTUK KEPENTINGAN AKADEMIS
Yang bertanda tangan di bawah ini, saya mahasiswa Universitas Sanata Dharma :
Nama : Zeno Dani Kuncoro
Nomor Mahasiswa : 035314036
Demi pengembangan ilmu pengetahuan, saya memberikan kepada Perpustakaan
Universitas Sanata Dharma karya ilmiah saya yang berjudul :
“Aplikasi Remote Webcam pad LAN (Local Area Network)”
Beserta perangkat yang diperlukan (bila ada). Dengan demikian saya memberikan
kepada Perpustakaan Universitas Sanata Dharma hak untuk menyimpan,
mengalihkan dalam bentuk media lain, mengelolanya dalam bentuk pangkalan
data, mendistribusikannya secara terbatas dan mendistribusikannya di Internet
atau media lain untuk kepentingan akademis tanpa perlu meminta ijin dari saya
maupun memberikan royalty kepada saya selama tetap mencantumkan nama saya
sebagai penyusun.
Demikian pernyataan ini saya buat dengan sebenarnya.
Dibuat di Yogyakarta
Pada tanggal April 2009
Yang menyatakan
( Zeno Danny Kuncoro )
ix
KATA PENGANTAR
Puji dan syukur kepada Tuhan Yang Maha Esa yang telah
mengaruniakan Berkat dan Rahmat-Nya sehingga penyusun dapat menyelesaikan
tugas akhir ini.
Dalam proses penyusunan tugas akhir ini ada begitu banyak pihak yang
telah memberikan bantuan dan perhatian dengan caranya masing-masing sehingga
tugas akhir ini dapat diselesaikan. Oleh karena itu penyusun mengucapkan terima
kasih diantaranya kepada :
1. Bapak Alb. Agung Hadhiatma, S.T., M.T. selaku dosen pembimbing I
tugas akhir yang telah banyak memberikan bimbingan dalam penyusunan
tugas akhir ini.
2. Bapak H. Agung Hernawan, S.T. selaku dosen pembimbing II tugas akhir
yang telah banyak memberikan bimbingan dalam penyusunan tugas akhir
ini.
3. Bapak JB. Budi Darmawan, S.T., M.T. dan Bapak Puspaningtyas Sanjoyo
Adi, S.T., M.T. selaku panitia penguji yang telah memberikan kritikan,
masukan serta saran untuk menyempurnakan tugas akhir ini.
4. Ibu Ridowati Gunawan, S.Kom., M.T. selaku dosen pembimbing
akademik angkatan 2003.
5. Bapak Emanuel Belle Bau, Spd. Dan Yustinus Nugroho sebagai laboran
yang telah mendukung dalam mempersiapkan ujian pendadaran.
x
6. Seluruh staff dosen Teknik Informatika Universitas Sanata Dharma yang
telah memberikan bekal ilmu, arahan teknis dan pengalaman selama
penyusun menempuh studi.
7. Seluruh staff Sekretariat Fakultas Sains dan Teknologi yang banyak
membantu penyusun dalam urusan administrasi akademik, terutama
menjelang ujian tugas akhir dan yudisium.
8. Orangtuaku tercinta AY Mahyarudin dan Lucia Sumirah dan kakak-
kakakku yang telah memberikan cinta, doa, dorongan, bantuan, perhatian
serta bimbingannya sedari penyusun kecil hingga saat ini.
9. Seluruh teman-teman seperjuangan di Jurusan Teknik Informatika
angkatan 2003.
10. Seluruh pihak yang telah membantu penulisan, baik secara langsung
maupun tidak langsung yang tidak dapat penyusun sebutkan satu persatu.
Dengan rendah hati penyusun menyadari bahwa tugas akhir ini masih
jauh dari sempurna, oleh karena itu berbagai kritik dan saran untuk perbaikan
tugas akhir ini sangat penyusun harapkan. Akhir kata semoga tugas akhir ini
bermanfaat bagi semua pihak. Terima kasih.
Yogyakarta, April 2009
Penyusun.
xi
DAFTAR ISI Halaman Judul ………………………………………………………………….. i
Halaman Persetujuan …………………………………………………………… ii
Halaman Pengesahan …………………………………………………………… iii
Halaman Pernyataan Keaslian Karya ………………………………………… iv
Halaman Persembahan ………………………………………………………….. v
Abstraksi ………………………………………………………………………... vi
Abstract …………………………………………………………………………. vii
Halaman Pernyataan Persetujuan Publikasi …………………………………….. viii
Kata Pengantar ………………………………………………………………….. ix
Daftar Isi ………………………………………………………………………... xi
Daftar Gambar ………………………………………………………………….. xv
Daftar Tabel …………………………………………………………………….. xvii
BAB I PENDAHULUAN
1.1. Latar Belakang …………………………………………………………..
1.2. Rumusan Masalah ……………………………………………………….
1.3. Batasan Masalah ………………………………………………………...
1.4. Tujuan Penelitian ………………………………………………………..
1.5. Metodologi Penelitian …………………………………………………...
1.6. Sistematika Penulisan …………………………………………………...
1
2
2
3
3
4
xii
BAB II LANDASAN TEORI
2.1. Web Camera (webcam) ………………………………………………….
2.1.1. Pengertian ……………………………………………………….
2.1.2. Teknologi ………………………………………………………..
2.2. Bitmap……………………………………………………………………
2.2.1. Algoritma Penyimpanan ………………………………………...
2.2.2. Format file pada umumnya ……………………………………...
2.3. JPEG (Join Photographics Expert Group) ………………………………
2.3.1. Encoding ………………………………………………………...
2.3.2. Color Space Transformations …………………………………...
2.3.3. Downsampling …………………………………………………..
2.3.4. Compression Ratio dan Artifacts ……………………………….
2.4. Windows API (Application Program Interface) ………………………...
2.5. Windows Socket (Winsock) …………………………………………….
2.6. Pemrograman menggunakan Visual Basic 6.0 ………………………….
2.6.1. Integrated Development Environment (IDE) ……………………
2.6.2. Program Visual Basic yang sangat sederhana …………………..
2.6.3. Socket Programming menggunakan WinSock ………………….
6
6
6
7
8
9
10
11
11
12
12
13
16
20
20
25
27
BAB III PERANCANGAN SISTEM
3.1. Perancangan Sistem ……………………………………………………..
3.2. Konfigurasi Jaringan …………………………………………………….
3.3. Perancangan Perangkat Lunak …………………………………………..
3.3.1. Use case diagram ……………………………………………….
3.3.1.1. Use case pada aplikasi server …………………………...
3.3.1.2. Use case pada aplikasi client ……………………………
3.3.2. Flowchart ……………………………………………………….
37
38
39
39
39
40
41
xiii
3.3.2.1. Flowchart aplikasi server ………………………………..
3.3.2.2. Flowchart aplikasi client ………………………………...
3.3.2.3. Flowchart GUI Server …………………………………...
3.3.2.4. Flowchart GUI Client …………………………………...
3.3.3. Aplikasi Server…………………………………………………..
3.3.3.1. Proses pengambilan citra melalui webcam ……………...
3.3.3.2. Proses komunikasi dengan client ………………………..
3.3.4. Aplikasi Client ………………………………………………….
3.3.4.1. Proses pengolahan citra …………………………………
3.3.4.2. Proses komunikasi dengan server ……………………….
3.3.5. Perancangan GUI (Graphical User Interface) ………………….
3.3.5.1. Sketch Graphical User Interface ………………………...
3.3.5.2. Mock-up Graphical User Interface ……………………...
3.4. Perancangan perangkat keras ……………………………………………
41
45
47
48
49
49
50
53
53
54
54
55
60
65
BAB IV IMPLEMENTASI SISTEM DAN HASIL
4.1. Lingkungan Implementasi ………………………………………………
4.1.1. Spesifikasi perangkat lunak ……………………………………..
4.1.2. Spesifikasi perangkat keras ……………………………………...
4.2. Implementasi API dalam aplikasi ……………………………………….
4.3. Implementasi timer control dalam aplikasi ……………………………..
4.4. Implementasi socket pada aplikasi ………………………………………
4.5. GUI (Graphical User Interface) ………………………………………...
66
66
66
68
72
76
86
xiv
BAB V ANALISIS HASIL
5.1. Konfigurasi aplikasi ……………………………………………………..
5.2. Manfaat dan kemudahan ………………………………………………...
5.3. Keunggulan dan kekurangan ……………………………………………
93
96
97
BAB VI KESIMPULAN DAN SARAN
6.1. Kesimpulan ……………………………………………………………...
6.2. Saran ………………………………………………………….…………
99
100
Daftar Pustaka 101
xvii
DAFTAR TABEL Tabel 2.1
Tabel 3.1
Tabel 3.2
Tabel 5.1
Tabel 5.2
Tabel 5.3
Tabel 5.4
Blok data pada bitmap
Tabel protokol komunikasi WebCamLAN
Tabel format komunikasi WebCamLAN
Tabel Spesifikasi Aplikasi Server
Tabel Spesifikasi Aplikasi Client
Tabel Spesifikasi perangkat pendukung
Tabel Hasil ujicoba
9
55
56
93
93
94
94
xv
DAFTAR GAMBAR Gambar 2.1 Gambar 2.2 Gambar 2.3 Gambar 2.4 Gambar 2.5 Gambar 2.6 Gambar 2.7 Gambar 2.8 Gambar 2.9 Gambar 2.10 Gambar 2.11 Gambar 2.12 Gambar 3.1. Gambar 3.2. Gambar 3.3. Gambar 3.4. Gambar 3.5. Gambar 3.6. Gambar 3.7. Gambar 3.8. Gambar 3.9. Gambar 3.9. Gambar 3.10. Gambar 3.11. Gambar 3.12. Gambar 3.13. Gambar 3.14. Gambar 3.15. Gambar 3.16. Gambar 3.17. Gambar 3.18. Gambar 3.19. Gambar 3.20. Gambar 3.21.
Sebuah web camera Papan sirkuit elektronik dan sensor gambar OSI Layer Ilustrasi network stack pada umumnya Connection oriented communication Connectionless oriented communication Kotak dialog New Project yang tampil saat menjalankan IDE Visual Basic Lingkungan Visual Basic 6.0 dengan beberapa jendela yang tampil Desain form Hello Visual Basic Aplikasi Hello Visual Basic yang telah dijalankan Desain form aplikasi Chat Client Desain form aplikasi Chat Server Konfigurasi jaringan Use Case Diagram aplikasi server Use Case aplikasi client Flowchart server secara keseluruhan Flowchart multiple connection pada server Flowchart pengambilan citra dari webcam Flowchart stream citra melalui network Flowchart client secara keseluruhan Flowchart menyimpan stream image menjadi file buffer Flowchart GUI server Flowchart GUI client Sketch form main aplikasi server Sketch form password aplikasi server Sketch form options aplikasi server Sketch form speed setting aplikasi server Sketch form source aplikasi server Sketch form about aplikasi server Sketch form main aplikasi client Sketch form password aplikasi client Sketch form setting aplikasi client Sketch form about aplikasi client Mock-up form main aplikasi server
6 7 17 17 19 19 20 24 25 27 28 33 38 39 40 41 42 43 44 45 46 47 48 55 55 56 56 57 57 58 58 59 59 60
xvi
Gambar 3.22. Gambar 3.23. Gambar 3.24. Gambar 3.25. Gambar 3.26. Gambar 3.27. Gambar 3.28. Gambar 3.29. Gambar 3.30. Gambar 4.1 Gambar 4.2 Gambar 4.3 Gambar 4.4 Gambar 4.5 Gambar 4.6 Gambar 4.7 Gambar 4.8 Gambar 4.9
Mock-up form password aplikasi server Mock-up form setting aplikasi server Mock-up form speed setting aplikasi server Mock-up form driver aplikasi server Mock-up form about aplikasi server Mock-up form main aplikasi client Mock-up form password Aplikasi Client Mock-up form setting aplikasi client Mock-up form about aplikasi client Aplikasi server ketika dijalankan Input authentifikasi password Window konfigurasi server Window format video Window Video Source Setting Window konfigurasi kecepatan transfer Window About Aplikasi client ketika dijalankan Window konfigurasi Auto Capture
60 61 61 62 62 63 63 64 64 86 87 88 88 89 89 90 91 92
1
BAB I
PENDAHULUAN
1.1. Latar Belakang
Tindak kejahatan pencurian dapat terjadi di mana saja, kapan saja dan
menimpa siapa saja termasuk sebuah badan usaha seperti warnet. Pencurian yang
dimaksud adalah pencurian terhadap perangkat keras yang dimiliki sebuah warnet,
seperti RAM, Hard Disk Drive, Processor dan lain-lain yang terdapat di setiap
komputer pengguna. Untuk mengatasi hal ini dipergunakanlah CCTV (Closed
Circuit Television) untuk dapat melakukan pengawasan (monitoring) terus
menerus ke setiap komputer.
Web Camera (webcam) merupakan perangkat keras (hardware) yang
mampu mengambil gambar (citra) dari obyek yang berada dalam jangkauan
pandangnya secara terus menerus. Selama ini webcam hanya dimanfaatkan
sebagai pelengkap dalam melakukan chatting dibeberapa protokol messenger dan
aplikasi PC Video Call terkenal seperti AOL Instant Messenger, MSN Messenger,
Skype, Windows Live Messenger dan Yahoo Messenger. Oleh beberapa protokol
messenger itu webcam dimanfaatkan sebagai sarana penangkap citra yang akan
dikirimkan kepada lawan chatting pada protokol yang sama, sehingga selama
melakukan chatting, user akan merasa seolah-olah ia berada dekat dengan lawan
chattingnya, karena ia dapat melihat lawan chattingnya secara langsung.
2
Berdasarkan fungsi dari webcam tersebut, maka penyusun akan
mencoba membuat perangkat lunak (software) yang akan berfungsi sebagai
kamera pengawas yang berjalan di jaringan komputer. Karena rata-rata saat ini
setiap komputer di warnet dan di perkantoran telah memiliki webcam, maka
software ini nanti diharapkan dapat menjadi sebuah solusi terhadap kedua masalah
yang telah dijabarkan di awal tadi. Software ini akan berjalan sebagai aplikasi
client-server, dimana komputer workstation menjalankan aplikasi server dan
komputer monitoring menjalankan aplikasi client. Server akan merespon request
client berupa pengiriman data citra yang telah ditangkap lalu diproses oleh server
kepada client. Proses pengambilan citra dan mengirimkannya secara periodik
inilah yang akan dilakukan terus menerus selama client melakukan request kepada
server. Selama proses inilah pengawasan akan dilakukan, data citra yang diterima
oleh client akan ditampilkan kembali menjadi citra yang dapat dilihat oleh mata.
1.2. Rumusan Masalah
Dari latar belakang masalah di atas, dapat dirumuskan suatu masalah
“menerapkan aplikasi remote webcam pada warnet ”
1.3. Batasan Masalah
Dalam batasan masalah ini, penyusun membatasi permasalahan yang
perlu dipecahkan, yaitu :
1. Workstation yang menjalankan aplikasi server tidak dapat
menggunakan webcam untuk aplikasi lain, seperti Yahoo! Mesenger.
3
2. Workstation yang menjalankan aplikasi server tidak dapat
menggunakan clipboard.
1.4. Tujuan Penelitian
Adapun tujuan dari penelitian ini adalah mengimplementasikan sebuah
software yang dapat menangkap citra dengan webcam lalu mengirimkanya ke
client secara periodik sehingga dapat dikembangkan sebagai media Dedicated
Cam Monitoring, maupun Personal Cam Monitoring.
1.5. Metodologi Penelitian
Beberapa tahapan yang dilakukan dalam menyelesaikan masalah di
atas adalah :
1. Studi pustaka.
Penyusun mencari literatur dan referensi di internet mengenai Image
Capture menggunakan webcam, komunikasi di jaringan dengan
menggunakan Windows Socket (Winsock) , fungsi-fungsi Windows
API (Aplication Program Interface) dan pemrograman Visual Basic.
2. Perancangan sistem.
Perancangan yang akan dibuat adalah perancangan secara umum
mengenai hardware dan software yang digunakan, perancangan
protokol komunikasi, perancangan alur prosesnya dan perancangan
aplikasi yang akan dibuat.
3. Uji coba mengcapture citra menggunakan webcam.
4
Ditahap ini, penyusun mencoba untuk membuat sebuah aplikasi
dengan pemrograman Visual Basic yang dapat mengcapture citra
dari webcam dan menyimpannya menjadi sebuah data.
4. Uji coba protokol komunikasi dalam jaringan LAN.
Ditahap ini, penyusun mencoba untuk membuat sebuah aplikasi
dengan pemrograman Visual Basic yang dapat melakukan
komunikasi antar komputer di dalam sebuah jaringan LAN.
Komunikasi ini dilakukan berdasarkan protokol yang telah
didefinikan.
5. Implementasi system.
Ditahap ini dilakukan pembuatan aplikasi keseluruhan berdasarkan
perancangan sistem.
1.6. Sistematika Penulisan
Secara garis besar, sistematika penulisan Tugas Akhir adalah sebagai
berikut :
BAB I PENDAHULUAN
Bab ini membahas tentang latar belakang penulisan tugas akhir,
batasan masalah, rumusan masalah, tujuan penulisan dan metodologi
penelitian tugas akhir.
BAB II LANDASAN TEORI
Bab ini berisi tentang landasan teori yang digunakan oleh penyusun
dalam membuat dan menyelesaikan tugas akhir.
5
BAB III PERANCANGAN SISTEM
Bab ini berisi tentang pembahasan rancangan sistem yang akan
dibangun.
BAB IV IMPLEMENTASI SISTEM
Bab ini berisi tentang pembahasan implementasi perancangan sistem
ke dalam bahasa pemrograman.
BAB V ANALISA HASIL IMPLEMENTASI
Bab ini berisi jawaban dari rumusan masalah yang telah dinyatakan
pada pendahuluan.
BAB VI KESIMPULAN
Bab ini berisi tentang kesimpulan yang dapat diambil dari analisa hasil
serta saran-saran untuk pengembangan program selanjutnya.
6
BAB II
LANDASAN TEORI
2.1. Web Camera (webcam)1
2.1.1. Pengertian
Web Camera (webcam) biasanya merupakan video camera adalah
perangkat keras (hardware) yang mampu mengambil gambar (citra) dari
obyek yang berada dalam jangkauan pandangnya secara terus menerus.
2
Gambar 2.1 Sebuah web camera
2.1.2. Teknologi
Pada umumnya webcam terdiri atas sebuah lensa, sensor gambar
dan sirkuit elektronik pendukung.Lensa yang sering digunakan adalah lensa
plastik yang dapat digerakkan maju-mundur untuk mengatur fokus kamera.
1 http://en.wikipedia.org/wiki/webcam 2 http://upload.wikimedia.org/wikipedia/commons/thumb/5/51/Axis_network_webcam.jpg/180px-Axis_network_webcam.jpg
7
Sensor gambar dapat berupa CMOS (Complementary Metal Oxide
Semiconductor) atau CCD (Charge Coupled Device).
Resolusi yang diadobsi webcam biasanya berada di wilayah VGA,
dengan rata-rata frame rate 25 frames per second sampai 30 frames per
second. Resolusi tertinggi yang dimiliki webcam saat ini adalah 1,3
megapixel.
3
Gambar 2.2 Papan sirkuit elektronik dan sensor gambar
2.2. Bitmap
.BMP atau .DIB (Device Independent Bitmap) adalah suatu format
pemetaan bit grafis yang digunakan secara internal oleh subsistem grafis OS/2 dan
Microsoft Windows (GDI), dan biasanya digunakan sebagai format file grafis
yang sederhana pada platform tersebut.
Citra secara umum disimpan dengan kedalaman warna dari 2 ( 1-bit), 16
( 4-bit), 256 ( 8-bit), 65,536 ( 16-bit), atau 16.7 juta ( 24-bit) warna ( bit
3 http://upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Sweex_USB_webcam_PCB_with_without_lens_close_up.jpg/284px-Sweex_USB_webcam_PCB_with_without_lens_close_up.jpg
8
direpresentasikan sebagai bit per pixel). 8-bit citra dapat juga menjadi greyscale
sebagai ganti dari warna yang diindekskan. Alfa channel (untuk ketransparanan)
dapat disimpan dalam suatu file yang terpisah, serupa dengan sebuah citra
greyscale. Sebuah versi 32-bit dengan alfa channel yang terintegrasi telah
diperkenalkan oleh Windows XP dan digunakan di dalam sistem logon dan
temanya
2.2.1. Algoritma Penyimpanan
File BMP biasanya tidak terkompresi, sehingga memiliki ukuran
yang lebih besar dari format citra yang dikompres untuk citra yang sama.
Sebagai contoh, sebuah citra 800x600 24-bit memiliki ukuran hampir sebesar
1,4 megabyte. Untuk contoh yang lebih konkretnya, citra 1024x768 yang
diambil dengan menggunakan webcam memiliki ukuran sebesar 2,5 megabyte
jika disimpan dengan format BMP, sedangkan jika disimpan dengan format
JPG citra tersebut memiliki ukuran sebesar 74 kilobyte. Dengan demikian,
format BMP tidak cocok untuk pengiriman citra di Internet atau media
berkapasitas terbatas atau lambat.
Berdasarkan pada kedalaman warna, sebuah pixel di dalam citra
akan disimpan menggunakan satu atau lebih byte. Warna dari pixel akan
dihitung (sebagai contoh adalah Picture Viewer) berdasarkan pada nilai dari
byte dan nilai-nilai yang berhubungan yang dibaca dari palet warna.
Perkiraan ukuran untuk a n-bit ( na warna) bitmap dalam byte dapat
dihitung sebagai :
9
Ukuran file BMP 8
2454ntinggilebarn ××
+×+≈ , di mana tinggi dan lebar
dalam satuan pixel.
Pada formula di atas, 54 adalah ukuran dari header file bitmap dan
n24 × adalah ukuran dari palet warna. Perlu diingat bahwa ini hanyalah
perkiraan pada sebuah n-bit citra bitmap, meskipun dapat menjadi maksimum
n2 warna, sebuah citra tertentu dapat tidak menggunakan seluruh warnanya
itu. Selama palet warna hanya mendefinisikan warna-warna yang digunakan
oleh citra, ukuran sebenarnya palet warna akan lebih kecil dari n24× .
Bitmap 8-bit atau kurang menggunakan palet warna, untuk bitmap 16-bit atau
lebih tinggi meniadakan bagian palet dari perhitungan.
Ukuran dari file BMP 8
54ntinggilebar ××
+≈
Menggunakan fungsi unit langkah u(x), kedua formula di atas
dapat dikombinasikan menjadi :
Ukuran dari file BMP 8
24)15(54ntinggilebar
nu n ××+××−+≈ ,
di mana u(x) = 1 jika x=0 dan sebaliknya.
2.2.2. Format file pada umumnya
File bitmap pada umumnya memiliki blok data dibawah ini :
Nama Blok Tujuan
Header Bitmap Menyimpan informasi umum mengenai file bitmap.
Informasi Bitmap Menyimpan detil informasi citra bitmap.
10
Palet Warna Menyimpan definisi warna yang sedang digunakan untuk
pengindekskan warna bitmap.
Bitmap Data Menyimpan citra sebenarnya tiap-tiap pixel.
Tabel 2.1 Blok data pada bitmap
Bagian di atas membahas mengenai data yang disimpan di dalam
file bitmap secara detil. Perlu diingat bahwa ini adalah standar format file
bitmap, beberapa citra bitmap dapat disimpan menggunakan format yang jauh
berbeda, tergantung pada aplikasi yang membuatnya.
2.3. JPEG (Join Photographics Expert Group)4
Dalam komputer, JPEG pada umumnya merupakan metode standar
kompresi untuk citra fotografi. Nama JPEG merupakan akronim dari Joint
Photographics Experts Group, yang merupakan nama dari sebuah komite yang
menciptakan standar. Kelompok yang berdiri pada tahun 1986, mengeluarkan
standar pada tahun 1992 yang kemudian disetujui pada tahun 1994 sebagai ISO
10918-1.
JPEG sendirilah yang menetapkan seluruh codec-nya, yang menjelaskan
bagaimana sebuah citra dikompres menjadi sebuah aliran byte dan didekompres
kembali menjadi citra juga format file yang digunakan untuk menyimpan aliran
tersebut. Metode kompresi biasanya kompresi yang merugi, dalam artian beberapa
4 http://en.wikipedia.org/wiki/JPEG
11
kualitas visual akan hilang dalam proses, meskipun ada beberapa variasi pada
garis dasar standar JPEG yang tidak akan merugi. Ada juga format progresif, yang
mana data dikompres dalam beberapa lewatan detil tertinggi secara progresif.
Format ini cukup ideal untuk citra yang besar yang akan ditampilkan selagi
didownload melalui koneksi yang lambat, memperbolehkan preview yang masuk
akal sebelum seluruh data diterima. Meskipun demikian progresif JPEG tidak
didukung secara luas.
2.3.1. Encoding
Banyak dari pilihan dalam JPEG yang standar tidak digunakan,
kebanyakan perangkat lunak citra menggunakan format JFIF yang lebih
sederhana ketika menciptakan file JPEG.
2.3.2. Color Space Transformations
Pertama, citra harus diubah dari RGB menjadi ruang warna yang
berbeda yang disebut YCbCr yang memiliki tiga komponen yaitu Y, Cb dan
Cr. Komponen Y merepresentasikan terang dari suatu pixel, komponen Cr dan
Cb menghadirkan krominan (dipecah menjadi komponen Red dan Blue).
YCbCr sama seperti ruang warna yang digunakan oleh PAL, MAC dan
transmisi televisi warna digital (tetapi bukan oleh NTSC, yang menggunakan
ruang warna yang yang serupa YIQ). Konversi ruang warna YCbCr
memungkinkan kompresi yang lebih besar untuk kualitas citra yang sama atau
kualitas citra yang lebih baik untuk kompresi yang sama.
12
Konversi ke YCbCr ini disebutkan dalam standar JFIF, dan dapat
digunakan untuk menghasilkan file JPEG sehingga memiliki kompatibilitas
yang tertinggi. Meskipun demikian banyak JPEG kualitas tinggi tidak
menerapkan langkah ini dan tetap menyimpannya dalam ruang warna sRGB,
di mana setiap warna dikompres dan dikuantitasi secara berbeda dengan
tingkatan kualitas yang sama.
2.3.3. Downsampling
Mata manusia dapat melihat lebih detil pada komponen Y daripada
Cb dan Cr. Menggunakan pengetahuan ini, encoder dapat didesain untuk
mengkompres citra dengan lebih efisien.
2.3.4. Compression Ratio dan Artifacts
Hasil perbandingan kompresi dapat bervariasi berdasarkan
kebutuhan untuk menjadi lebih atau kurang agresif dalam pembagian yang
digunakan pada fase kuantitasi. Kompresi 10 banding 1 biasanya
menghasilkan citra yang tidak dapat dibedakan oleh mata dengan citra yang
asli. Kompresi 100 banding 1 dimungkinkan, namun akan terlihat dengan jelas
pecahannya ketika dibandingkan dengan citra yang asli. Tingkatan kompresi
yang sesuai bergantung pada untuk penggunaan apa citra tersebut.
13
2.4. Windows API (Application Program Interface)
Microsoft Windows Application Program Interface (API) dalam
pemrograman memberikan kemampuan kepada program atau aplikasi untuk
mengeksploitasi kekuatan dari Windows5. Dengan menggunakan API ,
programmer dapat membangun sebuah aplikasi yang berjalan dengan baik pada
semua versi Windows selama berpedoman pada fitur-fitur dan kapabilitas yang
unik pada masing-masing versi.
Windows API terdiri dari berbagai macam fungsi kompleks untuk
berinteraksi langsung secara internal dengan Windows. Beberapa kategori
fungsional dari Windows API, yaitu :
• Manajemen dan Administrasi.
Memberikan fungsionalitas installasi, konfigurasi dan layanan aplikasi dan
sistem
• Diagnosa.
Memberikan fungsionalitas pemecahan masalah (troubleshoot) aplikasi atau
sistem, serta memonitor atau memantau performansi system.
• Multimedia dan grafis
Memberikan fungsionalitas untuk penyatuan teks terformat, grafis, audio
atau video, sehingga mampu untuk menampilkan konten grafis ke layar,
printer, atau perangkat keluaran lainnya.
5 http://msdn.microsoft.com/en-us/library/aa383723(VS.85).aspx
14
• Jaringan.
Memberikan fungsionalitas komunikasi antar aplikasi-aplikasi dalam sebuah
jaringan. Dapat memberikan kemampuan untuk membuat, mengatur akses
terhadap shared resource, seperti printer, directory pada sebuah jaringan.
• Keamanan.
Memberikan fungsionalitas untuk pengamanan sistem, seperti proteksi
password saat logon, kebebasan menentukan pengamanan terhadap semua
shared system object, kontrol hak akses, manajemen hak, dan audit
keamanan.
• Layanan Sistem.
Memberikan fungsionalitas untuk mengakses sumberdaya dan fitur-fitur
yang mendasari sistem operasi, seperti memori, file sistem, perangkat-
perangkat, proses dan thread. Akses yang dapat dilakukan dapat berupa
pengaturan ataupun pemantauan sumberdaya-sumberdaya yang dibutuhkan
agar dapat bekerja dengan baik.
• User Interface Windows
Memberikan fungsionalitas untuk membuat dan mengatur tampilan
antarmuka. Fungsi ini akan membuat dan menggunakan jendela-jendela
untuk ditampilkan di layar, meminta input dari pengguna, dan membuat
tugas lain yang dibutuhkan untuk mendukung interaksi dengan pengguna.
API (Application Program Interface) merupakan seluruh kumpulan dari
DLL (Direct Link Library) yang spesifik, yang memiliki fungsi-fungsi untuk
dapat dipanggil melalui beberapa bahasa pemrograman seperti Visual Basic,
15
C/C++, Java dan Delphi. Fungsi-fungsi utama API terdapat dalam 3 file-file DLL
sistem yang terletak pada semua sistem operasi berbasis Windows. Ketiga file-file
DLL tersebut adalah :
• User32.dll
Berfungsi untuk menangani semua yang berhubungan dengan antarmuka.
• Kernel32.dll
Berfungsi untuk menangani semua yang berhubungan dengan file-file dan
memori sistem.
• Gdi32.dll
Berfungsi untuk menangani semua yang berhubungan dengan grafis pada
sistem.
Microsoft® menggabungkan semua fungsi-fungsi API ke dalam DLL
sistem untuk mempermudah akses bagi pengembang perangkat lunak dalam
bahasa pemrograman apapun. Keuntungan dari menggunakan fungsi-fungsi API
adalah optimalisasi yang sudah tertanam pada masing-masing fungsi tersebut,
sehingga akan jauh lebih cepat dalam pemrosesan data ketimbang menggunakan
fungsi standar yang tersedia di Visual Basic. Akan tetapi pemanggilan dan
eksekusi fungsi API tersebut akan membutuhkan waktu juga, sehingga lebih
dianjurkan untuk menggunakan fungsi API yang tidak terdapat pada fungsi
standar Visual Basic ketika kita akan melakukan sebuah tugas khusus.
Pada Visual Basic, sangat dimungkinkan untuk menggunakan DLL
selain 3 DLL di atas, selama kita mengerti bagaimana deklarasi untuk mengakses
fungsi tersebut. Pengembang DLL tersebut harus memberikan dokumentasi yang
16
mendetail yang akan memberikan penjelasan kepada pengembang bagaimana
caranya membuat deklarasi API untuk menggunakan fungsi yang terdapat di
dalam DLL tersebut.
API dapat digunakan untuk melakukan tugas-tugas di Windows seperti
mematikan komputer, merestart sistem, hingga menginstall printer. Karena
sudah selayaknya sebuah sistem operasi bekerja secara multithread, maka
beberapa program pun dapat mengakses sebuah fungsi API yang sama dalam
waktu yang bersamaan juga.
2.5. Windows Socket (Winsock)
Winsock digunakan untuk membuat aplikasi yang akan mengakses
fungsi-fungsi level bawah dari Transmission Control Protocol (TCP/IP), secara
metafora memperbolehkan untuk tersambung ke dalam sebuah jaringan. Sebuah
socket hampir sama dengan antarmuka jaringan perangkat keras yang digunakan
untuk komunikasi interproses melalui jaringan di mana proses tersebut
berkomunikasi dengan remote system melalui protokol transport (TCP atau UDP).
Spesifikasi Socket API Windows menggambarkan dua alat penghubung:
API yang digunakan oleh pengembang aplikasi, dan Service Provider Interface
(SPI), yang menyediakan arti bagi pengembang perangkat lunak jaringan untuk
menambahkan modul protokol baru ke dalam sistem . API menjamin bahwa suatu
aplikasi penyelarasan akan berfungsi dengan tepat dengan suatu implementasi
protokol penyelaras dari vendor perangkat lunak jaringan apapun. Melalui
17
penggunaan yang sesuai dari API, suatu aplikasi Winsock dapat bekerja pada
berbagai implementasi Winsock dan protokol transport jaringan.
Jaringan dibuat dari beberapa lapisan yang didasarkan pada model
lapisan OSI. TCP/IP adalah protokol jaringan berada pada lapisan 3 dan 4 pada
model OSI. Sebuah protokol jaringan menyediakan layanan seperti addressing,
data transport, routing dan logical connection melalui jaringan. Dua komputer
harus menggunakan protokol jaringan jika program yang berjalan pada komputer
tersebut ingin berkomunikasi. Protokol jaringan yang umum lainnya adalah IPX
pada Novell, 3Com pada IBM, NetBIOS pada Windows, DECNet pada Digital
dan AppleTalk pada Apple.
6
Gambar 2.3 OSI Layer
7
Gambar 2.4 Ilustrasi network stack pada umumnya
6 http://tangentsoft.net/wskfaq/glossary.html 7 http://tangentsoft.net/wskfaq/glossary.html
18
Pada saat ini Winsock telah mencapai versi 2.0. Versi ini merupakan
pengembangan dari versi pendahulunya yaitu versi 1.1. Versi 2.0 memberikan
dukungan untuk beberapa protokol transport, meskipun versi 1.1 tidak terbatas
pada TCP/IP saja Versi 2.0 juga mendukung prakarsa teknis seperti Quality of
Service (QoS) dan multicasting. Teknologi ini akan meningkat seiring dengan
permintaan bandwidth. Sebagai contoh QoS membolehkan sebuah program video
conferencing untuk mencadangkan sejumlah tertentu bandwidth agar transfer file
yang tiba-tiba sebagai contoh, tidak menyebabkan videonya menjadi patah-patah
karena kekurangan bandwidth. Multicasting memperbolehkan program video
conferencing untuk mengirimkan aliran video dan audio ke banyak peserta
konferensi tanpa menduplikasi data lagi. Winsock 2.0 bekerja dengan mekanisme
high efficiency I/O overlapped Win32 sejak Windows NT mendukung I/O overlap
di dalam kernel yang memberikan peningkatan kecepatan yang tinggi. Winsock
2.0 juga memperbolehkan Layered Service Provider (LSP) untuk yang membuka
banyak hal seperti plug-ins keamanan: drop in, say, dan SSL.
Winsock lebih populer digunakan dalam aplikasi client-server yang
menyediakan dua tipe layanan, yaitu connection oriented dan connectionless
oriented. Layanan connection oriented diimplementasikan pada TCP, di mana
koneksi antar titik dalam jaringan harus tersambung terlebih dahulu sebelum
terjadi pertukaran data atau informasi.
19
8
Gambar 2.5 Connection oriented communication
9
Gambar 2.6 Connectionless oriented communication
8 http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/rzab6/rxab6500.gif 9 http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/rzab6/rxab6300.gif
20
2.6. Pemrograman menggunakan Visual Basic 6.0
2.6.1. Integrated Development Environment (IDE)10
IDE memberi kita semua yang dibutuhkan untuk menciptakan
aplikasi-aplikasi handal, untuk menulis kode , mengetes dan kemudian
memperbaiki, lalu menciptakan file yang dapat dieksekusi oleh mesin. File-
file ini berdiri sendiri di luar lingkungan dan karenanya dapat dikirimkan
kepada pengguna untuk dieksekusi di mesin mereka tanpa perlu menginstall
Visual Basic.
Setelah kita melakukan instalasi Visual Basic 6.0 dan memanggil
program Visual Basic untuk pertama kali, maka kita akan diminta untuk
memilih tipe project yang akan diciptakan. Pilih Standard EXE sebagai awal
untuk menciptakan aplikasi yang dapat dijalankan di mesin.
Gambar 2.7 Kotak dialog New Project yang tampil saat menjalankan
IDE Visual Basic
10 Programming Visual Basic 6.0, Balena Francesco, Microsoft® Press, 1999 Advanced Microsoft Visual Basic 6.0, The Mandelbrot Set, Microsoft® Press, 1998 Microsoft® Win32® Programmer's Reference
21
Setelah memilih Standard EXE maka Visual Basic akan
menampilkan jendela IDE yang terdiri dari beberapa komponen yaitu :
• Project Window
Memberikan pandangan terhadap semua modul-modul yang dimiliki
oleh aplikasi kita. Kita dapat melihat beberapa modul-modul yang
dikelompokkan berdasar pada tipenya, lalu melihat kode disetiap
modul atau objek yang berhubungan dengan melakukan double klik.
• Form Designer
Digunakan untuk mendesain antarmuka aplikasi. Melalui Form
Designer kita dapat mengatur posisi dan ukuran kontrol objek di dalam
form. Aplikasi dapat memiliki banyak form, dan hanya dapat dibuka
satu Form Designer dalam waktu bersamaan.
• Toolbox Window
Toolbox window memiliki satu set kontrol objek yang secara default
telah dimasukkan pada Toolbox dan tidak dapat dihilangkan, kontrol
objek inilah yang nanti dapat diletakkan ke dalam form. Penambahkan
kontrol Microsoft ActiveX objek dengan melakukan klik kanan pada
Toolbox lalu memilih Components pada pop-up yang muncul,
sehingga akan muncul kembali jendela Component. Pilih component
yang akan ditambahkan lalu tekan tombol OK untuk menerapkannya.
22
• Code Window
Digunakan untuk menuliskan kode yang berhubungan dengan form
atau objek lain di dalam aplikasi. Beberapa Code Window ditampilkan
pada waktu yang bersamaan.
• Properties Window
Menampilkan semua properti dari objek yang sedang dipilih, dan
memberikan kemampuan untuk mengeditnya. Kita dapat memberikan
nama dari form yang kita pilih dengan mengedit nilai pada property
Caption.
• Color Palette
Jendela Color Palette dapat memberikan akses cepat untuk
memberikan warna ke sebuah objek, seperti kontrol yang sedang
dipilih pada Form Designer.
• Form Layout
Form Layout akan menunjukkan bagaimana form yang dipilih akan
tampil saat program berjalan. Kita bisa mendrag form ke tempat yang
kita inginkan di layar selama program berjalan.
23
• Immediate Window
Immediate Window memberikan kemampuan kepada kita untuk
memasukkan perintah atau ekspresi Visual Basic dan melihat hasilnya
menggunakan perintah Print.
• Object Browser
Object browser memberikan kemampuan untuk mengeksplorasi
library-library luar agar dapat mempelajari tentang objek yang
ditampilkan beserta propertinya, metode-metode dan event-event nya.
Object Browser juga membantu secara cepat melompat ke prosedur
apapun di dalam modul apapun pada aplikasi.
• Locals Window
Locals window hanya akan aktif ketika program dijalankan, yang akan
menampikan list dari nilai semua variabel modul atau prosedur lokal.
• Watches Window
Watches Window memampukan untuk memonitor nilai dari sebuah
variabel atau ekspresi secara terus menerus. Melalui Watches Window,
eksekusi program dapat dihentikan ketika nilai ekspresi yang dipilih
bernilai True atau saat nilainya berubah.
24
• Call Stack Window (tidak terlihat pada gambar)
Call Stack Window hanya akan tampil saat melakukan break pada
program yang berjalan dan menekan shortcut Ctrl+L. Call Stack
Window akan menampilkan semua prosedur yang menunggu prosedur
yang sedang berlangsung selesai.
Gambar 2.8 Lingkungan Visual Basic 6.0 dengan beberapa jendela yang
tampil
25
2.6.2. Program Visual Basic yang sangat sederhana
Membuat program dengan menggunakan Visual Basic tidaklah
sulit. Berikut ini penyusun akan mencoba memberikan contoh beserta
keterangan yang diperlukan.
Aplikasi Hello Visual Basic.
Langkah-langkah yang diperlukan untuk membuat aplikasi ini akan
dijelaskan sebagai berikut:
1. Buatlah sebuah form dengan menggunakan Form Designer pada
Visual Basic, sehingga terlihat seperti gambar di bawah ini.
Gambar 2.9 Desain form Hello Visual Basic
Agar menghasilkan form seperti di atas perlu
ditambahkan beberapa komponen yaitu kontrol objek Label dan
kontrol objek Button.
Pilih icon pada Toolbox lalu klik kiri pada form dan
lakukan drag untuk menambahkan objek Label. Untuk mengedit
26
teks dari Label tersebut dilakukan dengan mengganti Caption
Label pada Properties Window menjadi “Hello Visual Basic”.
Pilih icon pada Toolbox lalu lakukan cara yang sama
seperti di atas untuk menambahkannya ke dalam form. Untuk
mengedit teks dari Button tersebut dilakukan dengan mengganti
Caption Button pada Properties Window menjadi “Exit”. Untuk
mengubah nama dari kontrol objek tersebut dilakukan dengan
mengubah Name Button pada Properties Window menjadi
“cmdExit”.
2. Agar tombol pada form tersebut dapat digunakan ketika program
dieksekusi, maka perlu ditambahkan baris kode berikut ke dalam
aplikasi
Private Sub btnExit_Click() 'baris berikut ini akan dilakukan ketika dilakukan penekanan 'pada tombol Exit dengan menggunakan mouse 'fungsi unload objek akan dilakukan sehingga proses akan 'meng-unload form aplikasi untuk keluar dari aplikasi. Unload Me ‘ memanggil fungsi unload End Sub
3. Untuk mencoba menjalankan aplikasi ini dapat dilakukan dengan
memilih “Start With Full Compile” pada menu Run Visual Basic
atau dengan menggunakan shortcut Ctrl+F5.
27
4. Hasil saat menjalankan aplikasi ini dapat dilihat pada gambar
berikut ini
Gambar 2.10 Aplikasi Hello Visual Basic yang telah dijalankan
2.6.3. Socket Programming menggunakan WinSock
Winsock Chat client-server.
Langkah-langkah yang diperlukan untuk membuat aplikasi ini akan
dijelaskan sebagai berikut.
Membuat aplikasi client.
1. Buat form client dengan menggunakan Form Designer pada Visual
Basic sehingga terlihat seperti gambar di bawah ini.
28
11
Gambar 2.11 Desain form aplikasi Chat Client
Tambahkan dua buah Label ke dalam form dan edit
properties text-nya secara berurutan menjadi “Remote Host IP :”
dan “Remote Host Port :”.
Tambahkan empat buah TextBox ke dalam form, edit
properties name-nya secara berurutan menjadi “TxtIP”, “TxtPort”,
“TxtLog” dan “TxtSend”.
11http://www.phoenixbit.com/site/tutorials/Programming/Visual%20Basic/winsock1/WinsockSource.zip
29
Tambahkan tiga buah CommandButton ke dalam form,
edit properties name-nya secara berurutan menjadi “btnConnect”,
“btnExit” dan “btnSend”.
Kontrol objek Winsock perlu ditambahkan pada program
ini. Untuk menambahkan kontrol ini dilakukan dengan melakukan
klik kanan pada Toolbox lalu pilih “Component” dan cari
“Microsoft Winsock Control 6.0”.
Pilih “Microsoft Winsock Control 6.0” lalu klik OK.
2. Sekarang penyusun memiliki form, tetapi form tersebut tidak
memiliki kode di dalamnya, hanya komponen-komponen saja,
yaitu CommandButton, TextBox dan Winsock ActiveX. Penyusun
akan memulai menuliskan kode yang diperlukan untuk tombol
“Connect” agar tombol tersebut dapat bekerja.
Private Sub btnConnect_Click() On Error GoTo t ‘jika terjadi error maka lompat ke t 'sock1 adalah nama Winsock ActiveX Control sock1.Close 'penyusun menutupnya karena akan mulai untuk terkoneksi 'txtIP adalah textbox penyimpan host IP sock1.RemoteHost = txtIP 'mengeset host tujuan ke IP yang ditulis pada textbox 'txtPort adalah textbox penyimpan Port sock1.RemotePort = txtPort 'mengeset port yang diinginkan untuk terkoneksi '(server harus listening pada port ini juga) sock1.Connect 'mencoba untuk terkoneksi Exit Sub t: MsgBox "Error : " & Err.Description, vbCritical ‘menampilkan pesan kesalahan beserta deskripsinya End Sub
30
Yang dilakukan di sini adalah menutup Winsock sebelum
mencoba untuk terkoneksi lalu mengeset parameter Winsock yang
dibutuhkan (IP dan Port). Setelah itu memanggil fungsi connect
yang dimiliki oleh Winsock.
3. Sekarang penyusun selesai pada kode di dalam CommandButton
Connect. Kontrol Winsock memiliki sebuah event yang disebut
_Connect, dimana event ini akan terpicu ketika koneksi yang
dilakukan sukses. Yang dapat dilakukan oleh penyusun adalah
membersihkan chat buffer dan meletakkan pesan yang mengatakan
bahwa koneksi ke host tujuan sukses.
Private Sub sock1_Connect() 'txtLog adalah textbox yang digunakan sebagai chat buffer 'sock1.RemoteHost mengembalikan hostname( atau IP) dari host 'sock1.RemoteHostIP mengembalikan IP dari host ‘menambahkan informasi bahwa sedang terkoneksi ke dalam chat buffer txtLog = "Connected to " & sock1.RemoteHostIP End Sub
4. Kegagalan dalam melakukan koneksi ke host dapat disebabkan
oleh beberapa alasan seperti IP yang tidak valid, host tidak
menerima koneksi pada port tertentu (karena port host tersebut
tertutup), error di koneksi internet (terkena firewall atau koneksi
yang lost), host mati atau offline dan lain-lain. Untuk menangani
error ini, penyusun perlu untuk menggunakan event _error. Di sini
akan digunakan error number dan descriptionnya.
31
Private Sub sock1_Error(ByVal Number As Integer, DescriptionAs String, ByVal Scode As Long,ByVal Source As String, ByVal HelpFileAs String, ByVal HelpContext As Long, CancelDisplay As Boolean) 'even ini digunakan untuk menangani segala error yang terjadi saat menggunakan Winsock. 'Number memberikan kode error pada erroryang terjadi 'Description memberikan nilai string dengan penjelasan sederhana mengenai error yang terjadi 'menambahkan kode error yang terjadi ke dalam chat buffer. txtLog = txtLog & "*** Error : " & Description & vbCrLf 'mencoba untuk menutup koneksi Winsock sock1_Close End Sub
5. Ada event yang akan terpicu ketika koneksi tertutup, event ini
adalah _Close. Diperlukan penanganan terhadap event close yang
terjadi untuk memastikan bahwa Winsock benar-benar telah
tertutup.
Private Sub sock1_Close() 'menangani penutupan koneksi sock1.Close ‘ tutup koneksi End Sub
6. Pengiriman data merupakan bagian yang penting dalam koneksi
karena melalui pengiriman data inilah komunikasi dapat terjadi.
Pengiriman data string kepada host dapat dilakukan dengan
menggunakan fungsi SendData. Berikut ini adalah kode yang
diperlukan agar CommandButton Send dapat bekerja.
Private Sub btnSend_Click() On Error GoTo t 'penyusun ingin mengirimkan nilai dari TextBox txtSend sock1.SendData txtSend 'kirimkan string tersebut ke
32
host 'penanganan error '(sebagai contoh, penyusun akan menangani error ketika akan mengirimkan data saat belum terkoneksi) Exit Sub t: MsgBox "Error : " & Err.Description sock1_Close 'tutup koneksi End Sub
7. Penerimaan data sama pentingnya dengan pengiriman data. Yang
perlu dilakukan adalah menggunakan fungsi Winsock GetData di
dalam event _DataArrival yang akan terpicu setiap kali ada data
yang diterima. Berikut ini adalah kode yang menangani data yang
masuk lalu menambahkannya ke dalam chat buffer.
Private Sub sock1_DataArrival(ByValbytesTotal As Long) 'penyusun menggunakan fungsi GetData ayang akan mengembalikan data yang dimiliki oleh Winsock Dim dat As String 'variabel dat bertipe String untuk menyimpan data sock1.GetData dat, vbString 'menyimpan data yang baru didapatkan Winsock ke dalam variable dat 'menambahkan pesan baru ke dalam chat buffer txtLog = txtLog & "Server : " & dat & vbCrLf End Sub
Membuat Aplikasi Server
Secara mendasar aplikasi server tidak jauh berbeda dengan aplikasi
client, penyusun hanya akan menjabarkan perbedaan nya saja.
1. Buat form client dengan menggunakan Form Designer pada Visual
Basic sehingga terlihat seperti gambar di bawah ini.
33
12
Gambar 2.12 Desain form aplikasi Chat Server
Tambahkan sebuah buah Label ke dalam form dan edit
properties text-nya menjadi “Listening on Port :”.
Tambahkan tiga buah TextBox ke dalam form, edit
properties name-nya secara berurutan menjadi “TxtPort”, “TxtLog”
dan “TxtSend”.
Tambahkan tiga buah CommandButton ke dalam form,
edit properties name-nya secara berurutan menjadi “btnListen”,
“btnExit” dan “btnSend”.
12http://www.phoenixbit.com/site/tutorials/Programming/Visual%20Basic/winsock1/WinsockSource.zip
34
Kontrol objek Winsock perlu ditambahkan pada program
ini. Untuk menambahkan kontrol ini dilakukan dengan melakukan
klik kanan pada Toolbox lalu pilih “Component” dan cari “Microsoft
Winsock Control 6.0”.
Pilih “Microsoft Winsock Control 6.0” lalu klik OK.
2. Perbedaan pertama adalah dalam koneksi. Pada aplikasi client, harus
diset remote IP dan Port yang akan digunakan, lalu mencoba untuk
melakukan koneksi. Aplikasi server hanya perlu untuk mengeset
local port lalu listening pada port tersebut, yang berarti bahwa
program memonitor setiap permintaan koneksi yang terjadi oleh
client pada port yang telah didefinisikan.
Berikut ini adalah kode yang harus dituliskan untuk
tombol “Start Listening”.
Private Sub btnListen_Click() On Error GoTo t 'sock1 adalah nama dari kontrol Winsock ActiveX yang penyusun gunakan sock1.Close 'tutup koneksi, saat socket sebelumnya telah listening 'txtPort adalah TextBox yang berisi Port Number sock1.LocalPort = txtPort 'mengeset Port yang penyusun inginkan untuk listening ( Client akan terkoneksi pada port ini ) sock1.Listen 'memulai Listening Exit Sub t: MsgBox "Error : " & Err.Description, vbCritical End Sub
35
3. Perbedaan berikutnya adalah penanganan koneksi, di mana client
memiliki event _Connect yang akan dipicu ketika koneksi sedang
berlangsung. Pada server perlu untuk menerima permintaan koneksi
dari client sebelum koneksi selesai. Untuk melakukan hal ini,
digunakan fungsi Accept saat event _ConnectionRequest terpicu oleh
permintaan client untuk terkoneksi dengan host. Berikut ini adalah
kode yang diperlukan untuk melakukannya.
Private Sub sock1_ConnectionRequest(ByVal requestID As Long) 'txtLog adalah TextBox yang digunakan sebagai Chat Bufer 'event ini terpicu saat client mencoba untuk terkoneksi kepada host 'server harus menerima permintaan koneksi tersebut agar konektifitas antara client dengan server dapat terjadi. 'hanya mengecek state dari Winsock If sock1.State <> sckClosed Then sock1.Close ‘menerima koneksi client sehingga client dan server dapat saling bertukar data sock1.Accept requestID ‘menambahkan pesan ke dalam Chat Buffer txtLog = "Client Connected. IP : " & sock1.RemoteHostIP & vbCrLf End Sub
Jika telah selesai memasukkan seluruh kode yang diperlukan ke
dalam setiap form server dan form client, maka dapat menggunakan shortcut
Ctrl+F5 untuk mencoba menjalankan masing-masing aplikasi tersebut dengan
otomatis melakukan compile terlebih dahulu.
36
Untuk menghasilkan file executable yang nantinya dapat
dijalankan tanpa harus menggunakan compiler Visual Basic, dapat
menggunakan “Make Project1” pada menu “File”.
37
BAB III
Perancangan Sistem
3.1. Perancangan Sistem
Aplikasi WebCamLAN ini berfungsi untuk melakukan monitoring
terhadap setiap workstation yang memiliki webcam dan terintegrasi aplikasi
WebCamLAN server. Aplikasi WebCamLAN client dan WebCamLAN server
akan saling berkomunikasi melalui media jaringan LAN (Local Area Network).
Mengapa berjalan pada jaringan LAN, apakah tidak dapat berjalan pada jaringan
Internet ? Sebenarnya secara kemampuan aplikasi ini dapat berjalan pada jaringan
Internet, akan tetapi dikarenakan keterbatasan lebar pita data (bandwidth) yang
dimiliki setiap komputer berbeda dan kecepatan transfer data yang dibutuhkan
oleh aplikasi ini cukup tinggi, maka ada kemungkinan bahwa akan terjadi jeda
waktu penampilan citra yang cukup lama, sehingga citra akan ditampilkan dengan
terputus-putus.
Aplikasi ini adalah aplikasi yang bersifat client-server, yang mana
komputer workstation akan menjalankan aplikasi server, dan komputer
monitoring akan menjalankan aplikasi client. Pertama-tama client akan
melakukan request koneksi kepada server, lalu server akan meminta autentifikasi
berupa password kepada client. Jika password yang diterima sesuai dengan
password yang tersimpan di server, maka koneksi akan dilanjutkan dengan
pengiriman data citra yang telah ditangkap oleh server kepada client. Setiap
alamat IP yang melakukan request koneksi, hasil dari autentifikasi password dan
38
waktu terjadinya akan dicatat oleh server dan disimpan ke dalam file log untuk
dapat dilakukan tracing terhadap status webcam. Proses pengambilan citra oleh
server dan mengirimkannya ke client akan dilakukan terus menerus selama tidak
ada request untuk menghentikan proses oleh client atau koneksi yang terputus.
3.2. Konfigurasi Jaringan
Konfigurasi jaringan yang digunakan dalam penelitian ini adalah
sebagai berikut :
1 2 3 4 5 6
7 8 9 101112
AB
12x
6x
8x
2x
9x
3x
10x
4x
11x
5x
7x
1x
Eth
ern
et
A
12x
6x
8x
2x
9x
3x
10x
4x
11x
5x
7x
1x
C
Gambar 3.1. Konfigurasi jaringan
39
Sistem operasi yang digunakan pada gateway router adalah Linux
berbasiskan text. Sistem operasi pada workstation dan monitoring server adalah
Microsoft Windows XP SP2, dengan Visual Basic Runtime versi 6.0 .
3.3. Perancangan Perangkat Lunak1
3.3.1. Use case diagram 2
3.3.1.1. Use case pada aplikasi server
Gambar 3.2. Use Case Diagram aplikasi server
1 Programming Visual Basic 6.0, Balena Francesco, Microsoft® Press, 1999 Advanced Microsoft Visual Basic 6.0, The Mandelbrot Set, Microsoft® Press, 1998 Microsoft® Win32® Programmer's Reference Win32 API Reference for HLA 2 UML 2.0 in a Nutshell, Pilone Dan, Pitman Neil, O'Reilly, 2005
40
3.3.1.2. Use case pada aplikasi client
<<in
clud
e>>
Gambar 3.3. Use Case aplikasi client
41
3.3.2. Flowchart
3.3.2.1. Flowchart aplikasi server
Gambar 3.4. Flowchart server secara keseluruhan
Secara keseluruhan, aplikasi server akan mulai listening pada port yang
sudah ditentukan saat aplikasi server dijalankan. Ketika mendapatkan
request untuk connect dari client, aplikasi server akan mulai mengambil
citra melalui webcam lalu mengirimkan citra tersebut ke client proses
pengambilan citra dan mengirimkan ke client tersebut akan dilakukan
secara terus menerus sampai koneksi terputus yang bias dikarenakan
client memutuskan koneksi atau gangguan koneksi.
42
Start
listening state
connection request ?
insocket[int]int indexindex=0
index < 10
insocket[index] accept remote host
end
index++
true
false
false
true
Port in use?
false
true
Gambar 3.5. Flowchart multiple connection pada server
Pada proses ini, socket sisi server akan melemparkan requestID dari
connection request sisi client kepada socket lain pada sisi server yang
sedang menganggur atau free lalu membuat socket tersebut yang akan
berkomunikasi dengan sisi client. Proses penerimaan requestID
tersebutlah yang akan dilakukan secara terus menerus selama terjadi
request connect dari sisi client hingga mencapai jumlah index port yang
telah dialokasikan oleh server.
43
Start
Connect to capture device
Capture device installed ?
Capture device
Create capture preview
Paste clipboard to PictureBox
Export PictureBox to JPG Stream
end
true
false
Gambar 3.6. Flowchart pengambilan citra dari webcam
Sebelum mengambil citra dari webcam, aplikasi server akan mengecek
keberadaan webcam terlebih dahulu dan akan meminta pengguna untuk
memilih webcam yang akan digunakan. Ketika pengguna telah
memasukkan webcam secara spesifik, maka aplikasi server akan
memulai koneksi ke webcam lalu membuat preview dari citra webcam,
mengkopi citra ke clipboard dan memasukkannya ke picturebox untuk
nantinya diexport berupa citra berformat JPG.
44
Start
File stream exist ?
Temp = read line per buffer sizeEOF
Open file handle
Is connected
Temp string
Send temp via socket
end
false
Close file handle
true
false
true
false
Gambar 3.7. Flowchart stream citra melalui network
Aplikasi server akan mengecek keberadaan image stream terlebih
dahulu, ketika image stream tersebut ada, maka aplikasi server akan
membaca keseluruhan file tersebut dan menyimpannya ke dalam
memory yang lalu dikirimkan kepada aplikasi client.
45
3.3.2.2. Flowchart aplikasi client
Gambar 3.8. Flowchart client secara keseluruhan
Aplikasi client akan mencoba untuk connect ke server pada port yang
telah ditentukan hingga satuan waktu tertentu, jika permintaan connect
ke server diterima maka aplikasi client akan mulai menerima paket data
stream dari server hingga client meminta untuk memutuskan koneksi
atau terjadi gangguan pada koneksi. Jika permintaan koneksi ke server
ditolak atau timeout, maka aplikasi client akan menutup port yang
digunakan dan kembali ke state awal.
46
Start
Connected?
Write temp to file
Open file handle
Temp string
true
end
false
Close file handle
Temp = buffer from socket
Latest buffer package
true
false
Gambar 3.9. Flowchart menyimpan stream image menjadi file
buffer
Untuk menyimpan image stream yang telah diterima dari server, aplikasi
client akan menerima satu persatu data stream buffer dari server lalu
menuliskannya ke dalam file image stream hingga aplikasi client
menerima acknowledgment bahwa buffer yang dikirimkan sebelumnya
merupakan buffer terakhir dari keseluruhan image stream yang
dikirimkan secara berurutan.
47
3.3.2.3. Flowchart GUI Server
Gambar 3.9. Flowchart GUI server
48
3.3.2.4. Flowchart GUI Client
Gambar 3.10. Flowchart GUI client
49
3.3.3. Aplikasi Server
Inti dari software ini berada pada sisi server. Kegagalan proses akan
mengakibatkan keseluruhan aplikasi tidak dapat berjalan dengan semestinya,
maka diharapkan aplikasi server dapat melakukan auto recovery terhadap
setiap kegagalan proses yang terjadi. Ada dua proses berbeda yang dilakukan
oleh aplikasi server, yaitu :
• Proses pengambilan citra melalui webcam yang meliputi
pengambilan citra dan pengolahan citra.
• Proses komunikasi dengan client yang meliputi autentifikasi,
enkripsi-dekripsi data dan pengiriman citra sebagai data.
3.3.3.1. Proses pengambilan citra melalui webcam.
Proses ini memanfaatkan library-library yang dimiliki oleh windows
melalui fungsi-fungsi API (Aplication Program Interface) yaitu user32.dll
dan kernel32.dll. Aplikasi server akan mencari driver control webcam jika
pada komputer ditemukan webcam. Lalu dengan driver tersebut aplikasi
server akan melakukan koneksi ke webcam dan mulai untuk menampilkan
jendela preview jika koneksi dapat dilakukan. Untuk dapat melakukan
capture citra yang ada pada jendela preview maka digunakanlah fungsi
sendmessages() pada library user32. Hasil capture citra tersebut akan
diletakkan dalam sebuah control object picture berupa citra yang berformat
BMP (bitmap) dan memiliki ukuran file yang cukup besar. Melalui control
object picture citra yang akan dikirimkan itu dapat dilihat secara visual.
Karena ukuran file citra yang cukup besar untuk ditransferkan melalui
50
jaringan secara terus-menerus, maka perlu diubah formatnya menjadi JPEG
untuk mendapatkan ukuran file citra yang kecil namun tetap memiliki
kualitas yang baik. Hasil dari pengubahan tersebut yang akan disimpan
menjadi file buffer untuk dapat digunakan oleh proses berikutnya, yaitu
komunikasi.
Proses pengcapturean dan proses penyimpanan berikut dengan
pengubahan format citra akan dilakukan secara periodik dengan
menggunakan control object timer.
3.3.3.2. Proses komunikasi dengan client.
Proses ini memanfaatkan control object winsock untuk dapat
berkomunikasi dengan aplikasi client melalui IP (Internet Protocol). Untuk
membentuk sebuah komunikasi yang baik dan relevan antara server dengan
client, maka dibuatlah sebuah protokol komunikasi tersendiri yang dapat
dilihat pada tabel berikut :
NO Paket Data Keterangan
1 "#i_t#" Digunakan sebagai tanda bahwa paket data
yang dikirimkan adalah paket data perintah
dan akan diterjemahkan sebagai perintah.
2 "#invisible#" Digunakan sebagai tanda bahwa paket data
yang dikirimkan adalah paket data
autentifikasi yang telah dienskripsi dengan
sandi tertentu.
3 "#dat#" Digunakan sebagai tanda bahwa paket data
yang dikirimkan adalah paket data citra, yang
51
akan diolah kembali oleh client sehingga
dapat dilihat oleh mata.
Tabel 3.1. Tabel protokol komunikasi WebCamLAN
Selain menggunakan protokol komunikasi seperti yang telah
disebutkan di atas, ditetapkan pula format dari protokol komunikasi, yang
dapat dilihat pada tabel berikut :
NO Format Paket Keterangan
1 "#i_t#start#i_t#"
"#i_t#stop#i_t#"
"#i_t#open#i_t#"
"#i_t#close#i_t#"
"#i_t#reject#i_t#"
"#i_t#accept#i_t#"
Perintah untuk menghidupkan kamera.
Perintah untuk mematikan kamera.
Perintah untuk meminta koneksi.
Perintah untuk menutup koneksi.
Informasi bahwa autentifikasi gagal.
Informasi bahwa autentifikasi berhasil.
2 "#invisible#[encrypted
data]#invisible#"
Encrypted data akan berisi password yang
telah dibungkus oleh paket auth dengan
format "auth!password!auth", sehingga jika
dekripsi terhadap encrypted data berhasil
maka akan memberikan hasil berupa
"auth!password!auth". yang kemudian akan
diekstrak menjadi "password" untuk
mendapatkan password yg sesungguhnya.
3 "#dat#[data
citra]#dat#"
Data yang sebenarnya tidak dibungkus oleh
sebuah paket, sehingga data yang dikirimkan
merupakan pure data packet.
52
4 "#dat#next#dat#" Merupakan acknowledgment bahwa data
telah diterima dengan baik dan
diperbolehkan untuk mengirimkan paket data
berikutnya.
Tabel 3.2. Tabel format komunikasi WebCamLAN
Melalui control object winsock, paket-paket data autentifikasi, data
perintah dan data citra akan dikirimkan dan diterima oleh server. Untuk
dapat menerima paket data, maka winsock harus berada pada kondisi
listening state. Selama state listening, server akan menerima data yang
dikirimkan kepadanya dan akan diterjemahkan sesuai dengan tabel
komunikasi. Server hanya akan menanggapi hasil terjemahan yang berupa
perintah dan autentifikasi saja, selain dari itu hanya akan diacuhkan dan
tidak diambil tindakan apa-apa. Hasil terjemahan authentifikasi akan
didekripsi untuk mendapatkan authentifikasi yang sebenarnya. Saat
mengirimkan data, server hanya akan mengirimkan paket-paket data yang
berupa paket data citra dan akan mengirimkan data tersebut kepada client
yang memiliki autentifikasi valid.
Citra yang telah disimpan menjadi file buffer oleh proses
pengambilan citra akan dibaca dan diubah menjadi bit-bit data lalu dipecah-
pecah berdasarkan ukuran MTU (Maximum Transfer Unit). Hasil dari
pemecahan file buffer kemudian dibungkus menjadi paket data berdasarkan
protokol komunikasi yang telah dijelaskan di atas. Setelah proses
pembungkusan ini selesai, maka server akan mengirimkannya kepada client
yang sedang terhubung oleh winsock.
53
Proses pengambilan tindakan atas terjemahan data yang dikirim dari
client dan proses pengiriman citra ini akan dilakukan secara periodik dengan
menggunakan control object timer.
3.3.4. Aplikasi Client
Secara keseluruhan aplikasi pada sisi client tidak jauh berbeda
dengan aplikasi pada sisi server, yang membedakan hanyalah proses yang
dilakukan. Adapun proses yang akan dilakukan pada sisi client adalah sebagai
berikut :
• Proses pengolahan citra yang meliputi menampilan citra.
• Proses komunikasi dengan server yang meliputi autentifikasi,
enkripsi-dekripsi data dan penerimaan citra sebagai data.
3.3.4.1. Proses pengolahan citra.
Antara aplikasi server dan aplikasi client tidak terdapat perbedaan
yang mencolok. Perbedaan yang ada hanyalah pada bagian proses, dimana
pada sisi client tidak membutuhkan proses pengambilan citra, namun tetap
ada proses pengolahan citra dikarenakan data citra yang telah dikirim oleh
aplikasi server perlu diolah kembali agar dapat ditampilkan menjadi citra
yang dapat dilihat secara visual. Hasil terjemahan proses komunikasi yang
berupa bit-bit data citra yang terpecah-pecah akan digabungkan lalu diolah
agar kembali membentuk citra kemudian disimpan menjadi sebuah file
buffer. Melalui control object picture, file buffer tersebut akan diload dan
ditampilkan sehingga didapatkan jendela preview yang dapat dilihat secara
54
visual. Proses ini merupakan kebalikan dari proses yang dilakukan pada
aplikasi server.
3.3.4.2. Proses komunikasi dengan server.
Seperti pada aplikasi server, proses ini juga memanfaatkan control
object winsock untuk dapat berkomunikasi dengan server melalui IP
(Internet Protokol). Untuk dapat menerima paket data citra dari server, client
harus berada pada kondisi listening state. Selama state listening, client akan
menerima data yang dikirimkan kepadanya dan akan diterjemahkan sesuai
dengan tabel komunikasi. Client hanya akan menanggapi hasil terjemahan
yang berupa data citra saja, selain dari itu hanya akan diacuhkan dan tidak
diambil tindakan apa-apa. Begitu juga saat mengirimkan data, client hanya
akan mengirimkan paket-paket data yang berupa paket perintah dan
authentifikasi. Saat melakukan pengiriman data, paket-paket data yang akan
dikirimkan diproses terlebih dahulu, sesuai dengan tabel komunikasi yang
telah dijelaskan pada proses komunikasi aplikasi server.
3.3.5. Perancangan GUI (Graphical User Interface)
Sebelum merancang sebuah aplikasi yang nantinya akan digunakan
oleh pengguna, maka perlu dibuatlah sebuah rancangan antarmuka atau GUI
sehingga pengguna dapat berinteraksi dengan aplikasi yang akan dibuat oleh
penyusun. Rancangan tersebut dapat didefinisikan sebagai berikut :
55
3.3.5.1. Sketch Graphical User Interface
Layaknya sebuah lukisan yang akan dilukiskan oleh seorang pelukis,
maka penyusun pun perlu untuk membuat sketch atau sketsa terlebih dahulu
terhadap antarmuka yang akan dirancang.
Berikut ini adalah sketch dari antarmuka tersebut :
a) Sketch Aplikasi Server
Gambar 3.11. Sketch form main aplikasi server
Gambar 3.12. Sketch form password aplikasi server
56
Gambar 3.13. Sketch form options aplikasi server
Gambar 3.14. Sketch form speed setting aplikasi server
57
Gambar 3.15. Sketch form source aplikasi server
Gambar 3.16. Sketch form about aplikasi server
58
b) Sketch Aplikasi Client
Gambar 3.17. Sketch form main aplikasi client
Gambar 3.18. Sketch form password aplikasi client
59
Gambar 3.19. Sketch form setting aplikasi client
Gambar 3.20. Sketch form about aplikasi client
60
3.3.5.2. Mock-up Graphical User Interface
Dari keseluruhan sketch yang telah dibuat sebelumnya, dapat
diambil mock-up atau screen capture aplikasi server dan client ini. Mock-
up dapat diibaratkan sebagai prototype dari antarmuka.
a) Mock-up Aplikasi Server
Gambar 3.21. Mock-up form main aplikasi server
Gambar 3.22. Mock-up form password aplikasi server
61
Gambar 3.23. Mock-up form setting aplikasi server
Gambar 3.24. Mock-up form speed setting aplikasi server
62
Gambar 3.25. Mock-up form driver aplikasi server
Gambar 3.26. Mock-up form about aplikasi server
63
b) Mock-up Aplikasi Client
Gambar 3.27. Mock-up form main aplikasi client
Gambar 3.28. Mock-up form password Aplikasi Client
64
Gambar 3.29. Mock-up form setting aplikasi client
Gambar 3.30. Mock-up form about aplikasi client
65
3.4. Perancangan perangkat keras
Perangkat keras yang dibutuhkan oleh masing-masing aplikasi ini adalah
Personal Computer (PC) yang difungsikan sebagai komputer workstation dan
komputer monitoring. PC yang difungsikan sebagai komputer workstation adalah PC
dengan kecepatan proses yang cukup tinggi, memiliki webcam yang telah terinstall
dengan baik pada sistem operasi dan terkoneksi melalui kabel USB (Universal Serial
Bus), memiliki satu buah kartu jaringan dan telah terinstall aplikasi server pada sistem
operasinya. PC yang difungsikan sebagai komputer monitoring juga memiliki
kecepatan proses yang cukup tinggi, memiliki 1 buah kartu jaringan dan telah
terinstall aplikasi client pada sistem operasinya. Masing-masing kartu jaringan pada
setiap PC dihubungkan ke switch/hub.
PC yang difungsikan sebagai workstation dan monitoring diharapkan
memiliki spesifikasi minimal sebagai berikut :
1. Prosessor
2. Hard Disk
3. RAM
4. VGA
5. NIC
: Intel Pentium ® 3 700 hz atau lebih tinggi
: 5 GB atau lebih tinggi
: 128 (non shared), 256 (32 MB shared) atau lebih tinggi
: 32 MB
: Realtek RTL8139 Family PCI Fast Ethernet NIC Compatible
Jika fitur auto capture pada aplikasi client digunakan, maka harus
memiliki kapasitas hard disk sebesar 20GB dengan maintenance secara manual setiap
hari, untuk mencegah kehabisan ruang kosong di hard disk.
Switch atau hub yang akan digunakan sebagai konsentrator pada jaringan
diharapkan memiliki kecepatan minimal 10 Mbps.
66
BAB IV
IMPLEMENTASI SISTEM DAN HASIL
Pada bab ini penyusun akan menjelaskan mengenai implementasi remote
webcam pada LAN. Karena aplikasi ini berbasiskan jaringan, maka tidak menutup
kemungkinan aplikasi ini dapat dipergunakan pada internetwork atau internet, namun
di sini penyusun hanya akan membahas mengenai implementasi pada LAN saja.
4.1. Lingkungan Implementasi
4.1.1. Spesifikasi perangkat lunak
Perangkat lunak yang penyusun gunakan saat implementasi adalah
sebagai berikut :
Sistem Operasi Microsoft® Windows® XP Professional Edition
SP2
Bahasa Pemrograman Visual Basic 6.0
4.1.2. Spesifikasi perangkat keras
Perangkat keras yang penyusun gunakan saat implementasi adalah
sebagai berikut :
Komputer Server 1 Intel® Pentium® 4 Dual Core 3.0Ghz
1024Mb RAM
67
128Mb NVDIA Graphic Card
10/100 Mbps 3Com Ethernet Card
Compex USB Wifi Card
Lexcron Gennie WebCamera
Komputer Server 2 Laptop Axio Intel® Centrino Duo 2.4Ghz
1024Mb RAM
32Mb Onboard Intel® Graphic Card
100/1000 Mbps Intel® Network Card
Intel® Wifi Card
Lexcron Alladin WebCamera
Komputer Client Compaq NC600 Intel® Pentium® 4 1.7 Ghz
1024Mb RAM
32Mb ATI Mobility Graphic Card
100/1000 Mbps Broadcom NetExtreem Ethernet
Card
Atheros Wifi Card
Media penunjang 10/100 Mbps D-Link Switch-hub
Wireless D-Link AirStream
UTP Cable Belden
68
4.2. Implementasi API dalam aplikasi.
Dalam proyek ini, penyusun hanya menitikberatkan pembahasan pada data
transfer yang akan ditangani oleh socket atau lebih dikenal dengan nama winsock.
Pembahasan mengenai fungsi-fungsi API yang akan menangani pengambilan citra
dan konversi citra tidak akan dibahas secara mendetail, mengingat ruang lingkup
yang akan meluas pada API dan juga waktu yang dibutuhkan tidak mencukupi.
Fungsi-fungsi API yang penulis gunakan, telah dideskripsikan oleh E. J. Bantz Jr.
yang menggabungkan semua fungsi pengolahan citra menjadi sebuah modul pada
Visual Basic.
Seperti telah dijelaskan pada sub bahasan di atas, proses pengambilan citra
melalui API akan memanfaatkan DLL windows, yaitu avicap32.dll , kernel32.dll dan
user32.dll. Penggunaan API ini lebih banyak digunakan pada aplikasi server, karena
aplikasi server yang langsung berhubungan dengan webcam dan akan mengakses
resource webcam untuk mengambil gambar dan mentransfernya ke client.
Pada kernel32.dll (library kernel32), fungsi yang akan digunakan adalah
sebagai berikut ini
Declare Function lStrCpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As Long, ByVal lpString2 As Long) As Long
Declare Function lStrCpyn Lib "kernel32" Alias "lstrcpynA" (ByVal lpString1 As Any, ByVal lpString2 As Long, ByVal iMaxLength As Long) As Long
Declare Sub RtlMoveMemory Lib "kernel32" (ByVal hpvDest As Long, ByVal hpvSource As Long, ByVal cbCopy As Long)
Declare Sub hmemcpy Lib "kernel32" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
69
Penjelasan dari masing-masing fungsi API tersebut adalah sebagai berikut :
• lStrCpy pada library kernel32 berfungsi untuk mengkopi sebuah string
ke dalam buffer.
• lStrCpyn pada library kernel32 memiliki fungsi yang hampir sama
seperti lStrCpy, hanya saja fungsi ini lebih mengarah pada pengkopian
sejumlah karakter dari sebuah string saja.
• RtlMoveMemory pada library kernel32 berfungsi untuk memindahkan
memory dalam blok 4-bytes yang akan diikuti oleh byte-byte sisanya.
• hmemcpy pada library kernel32 berfungsi untuk mengkonversi user-
defined variable menjadi sebuah string.
Pada user32.dll (library user32), fungsi yang akan digunakan adalah sebagai
berikut ini:
Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Declare Function DestroyWindow Lib "user32" (ByVal hndw As Long) As Boolean Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd
As Long, ByVal lpString As String) As Long Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd
As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As
Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Long) As Long
Penjelasan dari masing-masing fungsi API tersebut adalah sebagai berikut :
• SetWindowPos pada library user32 berfungsi untuk mengubah ukuran,
posisi dan Z order dari sebuah child, pop-up atau top-level window.
70
Window-window tersebut akan diurutkan berdasarkan penampakan
atau tampilnya di layar.
• DestroyWindow pada library user32 berfungsi untuk menutup sebuah
window. Fungsi ini akan mengirimkan pesan WM_DESTROY dan
WM_NCDESTROY kepada window untuk menonaktifkan window
dan melepaskan fokus keyboard dari window tersebut.
• GetSystemMetrics pada library user32 berfungsi untuk mengambil system
metric atau seting konfigurasi sistem.
• SetWindowText pada library user32 berfungsi mengubah teks pada
sebuah window yang telah ditentukan.
• SetWindowLong pada library user32 berfungsi mengubah atribut dari
window yang telah ditentukan. Fungsi ini juga mengeset nilai 32-bit
pada offset yang telah ditentukan ke dalam extra window memory.
• SendMessage pada library user32 berfungsi memanggil prosedur
window pada window yang telah ditentukan dan tidak akan
mengembalikan nilai hingga prosedur window selesai memproses
pesan tersebut.
Pada avicap32.dll (library avicap32), fungsi-fungsi yang digunakan adalah
sebagai berikut:
Declare Function capCreateCaptureWindowA Lib "avicap32.dll" ( _ ByVal lpszWindowName As String, _ ByVal dwStyle As Long, _ ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Integer, _ ByVal hWndParent As Long, ByVal nid As Long) As Long
71
Declare Function capGetDriverDescriptionA Lib "avicap32.dll" ( _ ByVal wDriver As Integer, _ ByVal lpszName As String, _ ByVal cbName As Long, _ ByVal lpszVer As String, _ ByVal cbVer As Long) As Boolean
Penjelasan dari masing-masing fungsi API tersebut adalah sebagai berikut :
• capCreateCaptureWindowA pada library avicap32 berfungsi untuk
membuat atau membentuk window capture frame yang akan
digunakan untuk menampilkan hasil capture dari imaging device.
Window capture frame ini nanti akan penyusun letakkan di dalam
sebuah picture box.
• capGetDriverDescriptionA pada library avicap32 berfungsi untuk melihat
satu-persatu driver imaging device yang telah terinstall pada sistem.
Proses pengambilan citra dilakukan dengan memanggil fungsi berikut ini
pada rutin event timer:
Private Sub tmrCam_Timer() On Error GoTo hell Dim i As Integer If isCameraON <> True Then GoTo hell Else 'get preview window frame Call capGrabFrame(lwndCap) ' Copy current frame to Clipboard Call capEditCopy(lwndCap) ' Put Clipboard's data to picPreview, but verified it first (is it DIB?) If Clipboard.GetFormat(8) Then picPreview.Picture = Clipboard.getData
72
' clear clipboard Clipboard.Clear End If End If hell: End Sub
Fungsi-fungsi API di atas lebih banyak dipergunakan oleh aplikasi server,
karena aplikasi serverlah yang langsung menggunakan webcam.
4.3. Implementasi timer control dalam aplikasi
Dalam aplikasi penyusun menggunakan timer control untuk berbagai
macam keperluan handling atau penanganan, seperti penanganan terhadap koneksi,
penanganan terhadap file buffer, penanganan terhadap log citra dan penanganan
terhadap penjadualan proses.
Penanganan terhadap koneksi merupakan hal yang cukup penting dalam
aplikasi ini untuk mencegah aplikasi crash, dikarenakan jika tidak ada kontrol
terhadap koneksi maka pengiriman data akan dilakukan asal-asalan tanpa peduli
apakah koneksi masih terjalin ataukah tidak. Dengan memanfaatkan timer control
maka proses pengecekan konektivitas dapat dilakukan secara berkala sehingga error
atau crash dapat sedikit ditekan. Selain itu proses di dalam timer control akan
menutup koneksi yang menganggur terlalu lama untuk mencegah aplikasi membanjiri
sistem oleh koneksi yang terlalu banyak dibuka.
73
Berikut ini merupakan proses yang dilakukan pada timer control client dan
server, event pada timer control inilah yang melakukan pengecekan terhadap
komunikasi antar client dan server.
Private Sub tmrSocketState_Timer() Dim inState As String On Error GoTo hell Select Case inSock.State Case sckClosed inState = "Closed" inSock.Listen Case sckOpen inState = "Open" Case sckListening inState = "Listening" Case sckConnectionPending inState = "Connection pending" Case sckResolvingHost inState = "Resolving host" Case sckHostResolved inState = "Host resolved" Case sckConnecting inState = "Connecting" Case sckConnected inState = "Connected" Case sckClosing inState = "Peer is closing the connection" inSock.Close Case sckError inState = "Error" inSock.Close End Select lblStatus.Caption = "Status : Port " & inSock.LocalPort & " " & inState hell: If Err.Number = 10048 Then 'err.number 10048 == address in use then exit program MsgBox "Port " & FormMain.inSock.LocalPort & " already in use. Please specify other port at Setting Window", vbExclamation, "Port in use" tmrSocketState.Enabled = False frmSetting.Show
74
End If End Sub
Timer control juga digunakan untuk menangani file buffer dan log citra
karena saat aplikasi menggunakan sebuah file, file tersebut akan terkunci dan tidak
dapat digunakan oleh proses yang lain sampai file tersebut ditutup oleh proses yang
membukanya. Ketika sebuah proses lain akan membuka file yang sedang digunakan
oleh proses lain maka akan timbul konflik di dalam aplikasi yang akan menyebabkan
aplikasi crash. Sebuah proses di dalam timer control akan melakukan penjadualan
terhadap file-file yang akan dipergunakan oleh aplikasi, sehingga memperkecil
kemungkinan untuk terjadinya tabrakan saat membuka file.
Penjadualan pada proses juga perlu dilakukan dan ditangani oleh timer
control. Masing-masing proses dalam aplikasi akan diurutkan sesuai urutan yang
seharusnya dan dipanggil oleh timer control. Proses yang berada di dalam timer
control diantaranya adalah proses pengambilan citra, pengkopian citra ke dalam
clipboard, peletakan citra ke dalam picture box, pengeksportan citra menjadi buffer
dan dikonversi menjadi JPEG lalu mengirimkannya kepada client. Jika runtutan
proses tersebut tidak berjalan secara urut, maka akan timbul konflik di dalam aplikasi,
karena itu di sini timer control dipergunakan.
Berikut ini adalah proses yang dilakukan pada sisi server.
Private Sub tmrSender_Timer(Index As Integer) On Error GoTo hell tmrSender(Index).Interval = SPEEDCAPTURE lbltimer.Caption = "Timer : " & Index & " [activated] PORT : " & outSock(Index).Index If isCameraON <> True Then
75
MsgBox "Camera is Off" GoTo hell Else FileName = App.Path & "\stream" & Index & ".buff" 'writeImage 'SavePicture picPreview.Picture, FileName Call SAVEJPEG(getWidth(lwndCap), getHeight(lwndCap), FileName, JPEGQUALITY, picPreview) 'send file buffer to remote host and then load file buffer to _ preview window after all buffer has been send If ISAUTHENTICATED(Index) Then If sendFile(FileName, Index) Then 'imgView.Picture = LoadPicture(FileName) End If Else lblpackage.Caption = "Session Not Authenticated" closeSession (Index) End If 'checking for connection. if not connected then stop camera routine If Not isReadyToCommunicate(outSock(Index)) Or Not NextPart(Index) Then tmrSender(Index).Enabled = False closeSession (Index) End If 'delete file buffer 'If Dir(FileName) <> "" Then Kill FileName End If hell: End Sub
Untuk melakukan logging terhadap gambar webcam yang telah diterima dari
server, pada aplikasi client juga menggunakan timer control. Proses logging akan
dilakukan berdasarkan interval pada timer control yang mengatur proses logging
tersebut. Berikut adalah source dari timer control tersebut.
Private Sub tmrCapture_Timer() If isReadyToCommunicate(outSock) And Not IsFileOpen And Dir$(bufferName) <> "" Then newPathFile = IMAGEPATH & "\" & Me.Caption & "\" & Day(Date) & _ "-" & Format(Time, "hh-nn-ss-") & GetTickCount & ".jpg" MoveFile Me.Caption, bufferName Else: Exit Sub
76
End If End Sub
Penyusun lebih banyak menggunakan timer control untuk mengurangi
timbulnya konflik di dalam aplikasi dengan menjalankan beberapa rutin-rutin
pengecekan yang harus dilakukan.
4.4. Implementasi socket pada aplikasi.
Secara umum socket pada masing-masing aplikasi memiliki fungsionalitas
yang sama, akan tetapi secara proses masing-masing aplikasi memiliki alur yang
berbeda. Pada sisi server, socket akan bersifat multiple sehingga sisi server mampu
untuk menerima multiple connection dari beberapa host. Fungsi seperti ini dilakukan
dengan cara menyiapkan satu socket untuk selalu listening pada port yang sudah
didefinisikan sebelumnya, lalu disediakan juga socket lain yang akan berkomunikasi
secara langsung dengan client yang melakukan request connect ke server. Sedang
pada sisi client, masing-masing socket akan dialokasikan hanya untuk satu connection
ke server, meskipun secara tampilan sisi client memiliki banyak target host, namun
untuk setiap host tersebut hanya terdapat satu socket.
Berikut ini merupakan proses pada sisi server untuk menangani event
request connect.
Private Sub inSock_ConnectionRequest(ByVal requestID As Long) ' have a free sock connect to the request Dim i As Integer If INIGet("integration", "ipfilter", FilePathINI) Then If doFiltering(Me.ListAllowIP, inSock.RemoteHostIP) = False Then
77
GoTo hell End If End If For i = 0 To 10 If FreeConn(i) Then FreeConn(i) = False outSock(i).Close outSock(i).Accept requestID 'MsgBox "Porting Connection to index " & i Exit For End If Next hell: inSock.Close End Sub
Pada proses ini, socket sisi server akan melemparkan requestID dari connection
request sisi client kepada socket lain pada sisi server yang sedang menganggur atau
free lalu membuat socket tersebut yang akan berkomunikasi dengan sisi client. Proses
penerimaan requestID tersebutlah yang akan dilakukan secara terus menerus selama
terjadi request connect dari sisi client.
Ketika konektivitas sudah terjalin maka antara client dengan server dapat
memulai untuk mengirimkan data. Untuk dapat saling berkomunikasi dengan baik,
dibuatlah sebuah protokol lain selain TCP/IP yang akan berfungsi untuk
membahasakan isi dari paket data yang dikirimkan. Seperti halnya protokol YM
(Yahoo! Messenger), protokol ini penyusun beri nama protokol ITP (invisible_theater
protokol) Berikut ini merupakan protokol ITP yang dirangkum dalam satu module
Visual Basic:
78
Option Explicit '****************************************************************************** ' Author: invisible_theater ([email protected]) ' ' ([email protected]) ' ' ' ' Date: 07/02/2007. ' ' Copyright: Copyright© 2007, invisible_theater. ' ' Purpose: webcamera syncronization and comunication as ' ' internet protocol. ' ' ' ' Details: ' ' ITP module (invisible_theater Protocol) ' ' ' ' NOTE: ' ' ' ' ' '****************************************************************************** ' =================== CONSTANT PACKET PROTOCOL ======================== ' 'Private Const START_WEBCAM = "#i_t#start#i_t#" 'Private Const STOP_WEBCAM = "#i_t#stop#i_t#" 'Private Const OPEN_CONN = "#i_t#open#i_t#" 'Private Const CLOSE_CONN = "#i_t#close#i_t#" 'Private Const REJECT_CONN = "#i_t#reject#i_t#" 'Private Const ACCEPT_CONN = "#i_t#accept#i_t#" 'Private Const KEEP_ALIVE = "#i_t#pingpong#i_t#" Private Const PACKET_COMMAND = "#i_t#" Private Const PACKET_AUTH = "#invisible#" Private Const PACKET_DATA = "#dat#" ' ===================================================================== ' Dim Crypto As New clsCryptoRC4 Public Function getFrame(ByVal Frame As String) As String If Left(Frame, 5) = PACKET_COMMAND And Right(Frame, 5) = PACKET_COMMAND Then getFrame = getCommand(Frame) ElseIf Left(Frame, 11) = PACKET_AUTH And Right(Frame, 11) = PACKET_AUTH Then getFrame = "auth" 'getAuth(frame) ElseIf Left(Frame, 5) = PACKET_DATA Then getFrame = "data" 'getData(frame) Else: getFrame = "NOT DEFINED COMMAND" End If End Function Private Function getCommand(ByVal data As String) As String 'getCommand = StrReverse(Mid$(StrReverse(Mid(data, 6)), 6)) Dim arrDATA As Variant arrDATA = Split(data, PACKET_COMMAND) '
79
getCommand = arrDATA(1) Debug.Print "getCommand :: " & arrDATA(1) End Function Public Function getAuth(ByVal data As String) As String Dim RAW_CRYPTED As String, CRYPTED As String 'RAW_CRYPTED = StrReverse(Mid(StrReverse(Mid(data, 12)), 12)) Dim arrDATA As Variant arrDATA = Split(data, PACKET_AUTH) ' RAW_CRYPTED = arrDATA(1) Debug.Print "raw crypted :: " & arrDATA(1) CRYPTED = Crypto.ACSDecrypt(RAW_CRYPTED, FormMain.PASS_CODE, True) Debug.Print CRYPTED CRYPTED = Mid$(CRYPTED, 6, Len(CRYPTED) - 10) Debug.Print "AUTH :: " & CRYPTED getAuth = CRYPTED End Function Public Function getData(ByVal data As String) As String Dim i As Long Dim arrDATA As Variant arrDATA = Split(data, PACKET_DATA, -1, vbTextCompare) ' 'getData = arrDATA(0) For i = 0 To UBound(arrDATA) getData = getData & arrDATA(i) Next Debug.Print "DATA : " & data End Function Public Function setFrame(ByVal Command As String, Optional password As String, Optional data As String) As String 'Dim dataPacket As String Select Case LCase(Command) Case "auth" setFrame = PACKET_AUTH & Crypto.ACSEncrypt("auth!" & password & "!auth", password, True) & PACKET_AUTH Case "data" setFrame = data & PACKET_DATA Case "start" setFrame = PACKET_COMMAND & LCase(Command) & PACKET_COMMAND Case "stop" setFrame = PACKET_COMMAND & LCase(Command) & PACKET_COMMAND Case "open" setFrame = PACKET_COMMAND & LCase(Command) & PACKET_COMMAND Case "close" setFrame = PACKET_COMMAND & LCase(Command) & PACKET_COMMAND Case "getauth"
80
setFrame = PACKET_COMMAND & LCase(Command) & PACKET_COMMAND Case "okauth" setFrame = PACKET_COMMAND & LCase(Command) & PACKET_COMMAND Case "errauth" setFrame = PACKET_COMMAND & LCase(Command) & PACKET_COMMAND Case "errstart" setFrame = PACKET_COMMAND & LCase(Command) & PACKET_COMMAND Case "next" setFrame = PACKET_COMMAND & LCase(Command) & PACKET_COMMAND Case "" setFrame = PACKET_COMMAND & "" & PACKET_COMMAND End Select End Function
Protokol tersebut akan membungkus paket-paket data komunikasi yang kritikal
menjadi paket data yang terenkripsi, seperti paket data autentifikasi password. Selain
itu, modul tersebut memiliki fungsi-fungsi yang berguna untuk menterjemahkan dari
paket data mentah menjadi paket data yang siap dikirimkan melalui jaringan dan
sebaliknya.
Dalam mengirimkan stream paket-paket datanya baik aplikasi server
maupun aplikasi client harus selalu melakukan sinkronisasi mengenai paket data yang
telah diterima dan yang akan dikirimkan. Sinkronisasi tersebut berguna untuk
memastikan apakah paket data tersebut rusak atau tidak, selain itu berguna untuk
memastikan akhir dari sebuah stream paket data. Sinkronisasi tersebut berupa
acknowledgment yang telah disepakati antar client dan server.
Proses yang akan terjadi pada sisi server ketika menerima data dari client :
Private Sub outSock_DataArrival(Index As Integer, ByVal bytesTotal As Long) If isReadyToCommunicate(outSock(Index)) Then Dim data As String outSock(Index).getData data
81
' // add packet received to listbox 'listPacketData.AddItem data 'If listPacketData.ListCount > 0 Then listPacketData.Selected(listPacketData.ListCount - 1) = True 'MsgBox data Select Case getFrame(data) Case "auth" ' server received 'writeLogDataIn ("REQUEST LOGIN ATTEMPT FROM [ " & inSock.RemoteHostIP & ":" & inSock.RemotePort & " ]") 'MsgBox "REQUEST LOGIN ATTEMPT FROM [ " & inSock.RemoteHostIP & ":" & inSock.RemotePort & " ]" If getAuth(data) = PASS_CODE Then ISAUTHENTICATED(Index) = True 'writeLogDataIn ("ACCESS CODE ACCEPTED. [authentification valid. waiting for next command.]") outSock(Index).SendData (setFrame("okauth")) Else ISAUTHENTICATED(Index) = False 'writeLogDataIn ("WRONG ACCESS CODE. [authentification failure, closing connection to remote host.]") outSock(Index).SendData (setFrame("errauth")) DoEvents 'reset socket to control outSock(Index).Close closeSession (Index) ' End If Case "start" ' server received 'lblStatus.Caption = "attempted to start camera" 'writeLogDataIn ("REQUEST START CAMERA ATTEMPT FROM [ " & inSock.RemoteHostIP & ":" & inSock.RemotePort & " ]") 'startCapture 'MsgBox "REQUEST START CAMERA ATTEMPT FROM [ " & inSock.RemoteHostIP & ":" & inSock.RemotePort & " ]" If ISAUTHENTICATED(Index) Then lblpackage.Caption = "START BROADCASTING ..." 'Call startCam(framePreview.hwnd) 'ISCAMHASSTART = True tmrSender(Index).Interval = SPEEDCAPTURE tmrSender(Index).Enabled = True Else outSock(Index).SendData (setFrame("getauth")) 'writeLogDataIn ("REQUEST NOT AUTHORIZED. [request cam not authorized, requesting authorization code from remote host.]") End If Case "stop" 'server received
82
'lblStatus.Caption = "attempted to stop camera" 'writeLogDataIn ("REQUEST STOP CAMERA FROM [ " & inSock.RemoteHostIP & ":" & inSock.RemotePort & " ]") 'ISCAMHASSTART = False 'MsgBox "REQUEST STOP CAMERA FROM [ " & inSock.RemoteHostIP & ":" & inSock.RemotePort & " ]" If ISAUTHENTICATED(Index) Then 'Call stopCam tmrSender(Index).Enabled = False closeSession (Index) 'ISCAMHASSTART = False 'writeLogDataIn ("BRODCAST AND CAMERA STOPPED ...") Else: 'writeLogDataIn ("PROBABLY HIJACKING PROCEDURAL DETECTED") End If Case "open" ' server received 'lblStatus.Caption = "attempted to handshake" 'writeLogDataIn ("REQUEST HANDSHAKE FROM [ " & inSock.RemoteHostIP & ":" & inSock.RemotePort & " ]") 'MsgBox "REQUEST HANDSHAKE FROM [ " & inSock.RemoteHostIP & ":" & inSock.RemotePort & " ]" If ISAUTHENTICATED(Index) Then 'writeLogDataIn ("HOST ALREADY AUTHORIZED. [waiting for next command.]") Else outSock(Index).SendData (setFrame("getauth")) 'writeLogDataIn ("HOST NOT AUTHORIZED. [ requesting authorization code from remote host.]") End If Case "close" 'server received 'lblStatus.Caption = "attempted to close connection" 'writeLogDataIn ("CONNECTION CLOSING ATTEMPT FROM [ " & inSock.RemoteHostIP & ":" & inSock.RemotePort & " ]") 'MsgBox "CONNECTION CLOSING ATTEMPT FROM [ " & inSock.RemoteHostIP & ":" & inSock.RemotePort & " ]" If ISAUTHENTICATED(Index) Then 'writeLogDataIn ("CLOSE CONNECTION TO REMOTE HOST") 'ISCAMHASSTART = False tmrSender(Index).Enabled = False closeSession (Index) 'Call stopCam 'stopConnect Else: 'writeLogDataIn ("PROBABLY HIJACKING PROCEDURAL DETECTED") End If Case "next" NextPart(Index) = True Case "NOT DEFINED COMMAND"
83
'lblStatus.Caption = "[WARNING !!!] hijacking attempt." 'writeLogDataIn ("MALICIOUS CODE RECEIVED FROM[ " & inSock.RemoteHostIP & ":" & inSock.RemotePort & " ]") 'writeLogDataIn ("PROBABLY HIJACKING PROCEDURAL DETECTED") 'MsgBox "MALICIOUS CODE RECEIVED FROM[ " & inSock.RemoteHostIP & ":" & inSock.RemotePort & " ]" End Select Else End If End Sub
Sebelum mengirimkan paket stream, aplikasi server melakukan validasi terlebih
dahulu, apakah koneksi dengan client sudah terjalin atau belum. Ketika koneksi telah
terjalin maka setiap paket data yang diterima oleh server akan diterjemahkan
berdasarkan protokol yang telah didefinisikan.
Ketika hasil terjemahan tersebut berupa permintaan untuk mengirimkan paket stream
ke client, maka aplikasi server akan melakukan proses sebagai berikut:
Private Sub tmrSender_Timer(Index As Integer) 'On Error GoTo hell tmrSender(Index).Interval = SPEEDCAPTURE lbltimer.Caption = "Timer : " & Index & " [activated] PORT : " & outSock(Index).Index If isCameraON <> True Then MsgBox "Camera is Off" GoTo hell Else FileName = App.Path & "\stream" & Index & ".buff" 'writeImage 'SavePicture picPreview.Picture, FileName Call SAVEJPEG(getWidth(lwndCap), getHeight(lwndCap), FileName, JPEGQUALITY, picPreview) 'send file buffer to remote host and then load file buffer to _ preview window after all buffer has been send If ISAUTHENTICATED(Index) Then If sendFile(FileName, Index) Then 'imgView.Picture = LoadPicture(FileName) End If Else lblpackage.Caption = "Session Not Authenticated"
84
closeSession (Index) End If 'checking for connection. if not connected then stop camera routine If Not isReadyToCommunicate(outSock(Index)) Or Not NextPart(Index) Then tmrSender(Index).Enabled = False closeSession (Index) End If 'delete file buffer 'If Dir(FileName) <> "" Then Kill FileName End If hell: End Sub
Di mana server akan melakukan validasi mengenai konektivitas dan authentifikasi
terlebih dahulu, setelah melewati kedua validasi tersebut maka aplikasi server akan
mengirimkan paket data kepada aplikasi client pada socket yang bersangkutan.
Proses pada aplikasi client ketika menerima paket data dari server :
Private Sub outSock_DataArrival(ByVal bytesTotal As Long) If isReadyToCommunicate(outSock) Then Dim packetData As String ', filename As String 'packetData = "" outSock.getData packetData 'lblStatus.Caption = "received data : " & getFrame(packetData) 'MsgBox packetData Debug.Print "RECEIVED PACKET :: " & packetData Select Case getFrame(packetData) Case "data" ' client received bufferName = App.Path & "\stream" & Me.Caption & ".buff" If (saveFile(bufferName, getData(packetData), Me)) Then On Error Resume Next With imgView .Picture = LoadPicture(bufferName) .ScaleMode = 3 .AutoRedraw = True .PaintPicture .Picture, _ 0, 0, .ScaleWidth, .ScaleHeight, _ 0, 0, _
85
.Picture.Width / 26.46, _ .Picture.Height / 26.46 End With Else End If Case "getauth" ' client received lblStatus.Caption = "attempted to get authentification" Dim Pass As New FormPassBox Pass.Show vbModal, MDImain PASS_CODE = Pass.pswd If isReadyToCommunicate(outSock) Then outSock.SendData (setFrame("auth", PASS_CODE)) End If Case "okauth" ' client received lblStatus.Caption = "password is OK" outSock.SendData (setFrame("start")) cmdConnect.Caption = "Stop Viewing" Case "errauth" ' client received lblStatus.Caption = "password is incorrect" cmdConnect.Caption = "Connect" stopConnect Case "errstart" ' client received lblStatus.Caption = "cam in use" stopConnect Case "" lblStatus.Caption = "NOT DEFINED COMMAND" 'writeLogDataIn (PartFile & " BLANK : " & packetData) Case "NOT DEFINED COMMAND" lblStatus.Caption = "[WARNING !!!] hijacking attempt." 'writeLogDataIn (PartFile & " NOT DEFINED: " & packetData) End Select Else: End If hell: End Sub
86
Seperti halnya pada sisi server, proses ini juga akan menerjemahkan paket data yang
diterima menjadi perintah yang akan dilakukan oleh client. Setelah paket data
diterjemahkan, maka client juga akan mengirimkan paket data kepada server
berdasarkan perintah terjemahan tersebut, seperti meminta authentifikasi, meminta
data stream, atau pemberitahuan bahwa authentifikasi gagal.
4.5. GUI (Graphical User Interface)
Ketika aplikasi server dijalankan, aplikasi akan memulai untuk meng-
capture citra dari webcam dan akan listening pada socket yang telah didefinisikan
pada konfigurasi.
Gambar 4.1 Aplikasi server ketika dijalankan
87
Untuk melakukan konfigurasi terhadap aplikasi server, pengguna dapat memilih
menu “Options” yang akan meminta authentifikasi berupa password sebelum
pengguna diperbolehkan merubah konfigurasi aplikasi server.
Gambar 4.2 Input authentifikasi password
Ketika authentifikasi tersebut valid maka pengguna akan disuguhkan konfigurasi
yang dapat diterapkan pada aplikasi server, seperti ubah password, filter IP,
kecepatan transfer, port yang akan digunakan dan lain-lain.
88
Gambar 4.3 Window konfigurasi server
Gambar 4.4 Window format video
89
Gambar 4.5 Window Video Source Setting
Gambar 4.6 Window konfigurasi kecepatan transfer
90
Untuk melihat mengenai informasi aplikasi server, pengguna dapat memilih menu
“About” yang akan menampilkan window seperti berikut ini:
Gambar 4.7 Window About
Pada aplikasi client, ketika aplikasi dijalankan pengguna akan diminta untuk
memasukkan hostname dan port yang digunakan oleh aplikasi server, setelah itu
pengguna dapat melakukan koneksi ke server dengan menekan tombol “Connect”
91
Gambar 4.8 Aplikasi client ketika dijalankan
Untuk menjalankan fitur auto capture pada aplikasi client, pengguna dapat memilih
menu “Options” sehingga akan memunculkan window konfigurasi auto capture.
92
Gambar 4.9 Window konfigurasi Auto Capture
93
BAB V
ANALISA HASIL
Pada bab ini penyusun akan memberikan analisa mengenai konfigurasi aplikasi,
kelebihan serta kekurangan menyangkut dengan aplikasi yang telah penyusun
buat.
5.1. Konfigurasi aplikasi
Lingkungan dan perangkat keras yang penyusun gunakan saat
melakukan analisa terhadap hasil serta kinerja aplikasi adalah sebagai berikut ini :
No Jenis Perangkat Keras Spesifikasi
1 Prosessor Intel® Celeron® 2.4 Ghz
2 RAM 512 Mb
3 VGA 64 Mb dedicated
4 Ethernet Card 100 mbps onboard (run on 100 base speed)
Tabel 5.1. Tabel Spesifikasi Aplikasi Server
No Jenis Perangkat Keras Spesifikasi
1 Prosessor Intel® Pentium® M 1.6 Ghz
2 RAM 1024 Mb
3 VGA 32 Mb dedicated
4 Ethernet Card 1024 mbps onboard (run on 100 base speed)
Tabel 5.2. Tabel Spesifikasi Aplikasi Client
94
No Jenis Perangkat Keras Spesifikasi
1 Switch hub Alliedtelesys 100 mbps
Tabel 5.3. Tabel Spesifikasi perangkat pendukung
Dari ujicoba yang telah penyusun lakukan pada dua warnet yang sama-sama
memiliki traffic local yang cukup tinggi, didapatkan hasil rerata sebagai berikut
ini :
Bandwidth No Cam. Res.
MTU Quality
Speed Client Server
Refresh rate
Noised
1 640x320 3kb 50% 500ms 93kB/s 45kB/s 42/30s No
2 640x320 3kb 50% 200ms 130kB/s 70kB/s 44/30s No
3 640x320 10kb 20% 500ms 90kB/s 42kB/s 40/30s 10%
4 640x320 3kb 30% 200ms 120kB/s 45kB/s 49/30s No
5 640x320 5kb 30% 200ms 110kB/s 48kB/s 39/30s 30%
6 640x320 8kb 50% 500ms 55kB/s 20kB/s - -
Tabel 5.4. Tabel Hasil ujicoba
Dari tabel hasil di atas, refresh rate yang dihasilkan tidak selalu
berbanding lurus dengan peningkatan nilai speed dan MTU, dimana semakin
besar nilai MTU maka besar data yang akan dikirimkan per-transmit akan
semakin besar, dan semakin kecil nilai speed maka jumlah stream citra yang akan
95
dikirimkan semakin banyak. Namun jika nilai kualitas gambar diturunkan maka
akan memiliki pengaruh yang cukup signifikan terhadap nilai refresh rate.
Sebagai bukti atas ujicoba yang telah penyusun lakukan, berikut ini
penyusun akan memberikan hasil capture desktop pada masing-masing aplikasi
saat dilakukan ujicoba disalah satu warnet.
Gambar 5.1. Gambar desktop aplikasi Server.
96
Gambar 5.1. Gambar desktop aplikasi Client.
Dari hasil capture destop tersebut di atas, terlihat juga nilai penggunaan CPU
pada masing-masing aplikasi. Pada aplikasi server penggunaan CPU berkisar
antara 15-18%, dan pada aplikasi client penggunaan CPU berkisar antara 3-10%.
Hal ini membuktikan bahwa aplikasi yang telah penyusun buat, tidak
menggunakan resource CPU yang besar
5.2. Manfaat dan kemudahan
Aplikasi Remote Webcam telah berhasil penyusun diujicobakan pada
jaringan LAN dan jaringan internet. Aplikasi ini memiliki manfaat dan
kemudahan sebagai berikut :
97
1. Warnet dapat melakukan monitoring terhadap workstation-
workstation atau asset-aset penting dengan memanfaatkan webcam
yang telah terintegrasi, sehingga tidak perlu untuk mengeluarkan
biaya pembelian CCTV.
2. Pengawas dapat lebih mudah mengawasi beberapa workstation
secara bersamaan karena beberapa workstation dapat ditampilkan
dalam satu GUI.
5.3. Keunggulan dan kekurangan
Aplikasi Remote Webcam ini memiliki keunggulan sebagai berikut :
1. Server mampu menerima dan melayani banyak permintaan koneksi
dari client secara simultan.
2. Server mampu melakukan filtering terhadap setiap koneksi yang
masuk, sehingga hanya IP tertentu saja yang dapat terkoneksi ke
server.
3. Kualitas citra dan kecepatan transfer antara client dan server dapat
disesuaikan dengan kebutuhan, kemampuan perangkat dan
kemampuan jaringan.
4. Proteksi keamanan terhadap konfigurasi server dan konektivitas
menggunakan password.
98
5. Client mampu terkoneksi dan memonitor lebih dari satu server
pada waktu yang bersamaan.
6. Client mampu melakukan logging terhadap citra yang diterima dari
server.
Dari beberapa kelebihan-kelebihan yang telah disebutkan di atas,
terdapat juga kekurangan-kekurangan yang masih belum didukung. Kekurangan-
kekurangan tersebut antara lain :
1. Paket data stream yang ditransfer belum terenkripsi, sehingga
memungkinkan untuk terjadinya pencurian data melalui sniffing.
2. Reabilitas aplikasi server dalam mengirimkan data stream tidak
dapat terjaga dengan baik sehingga image stream yang tertampil
akan terhenti ditengah jalan.
3. Tidak adanya fungsi untuk melakukan pencarian hasil loging pada
kurun waktu tertentu.
4. Pengecekan terhadap validitas image stream hanya dilakukan
dengan cara yang sederhana, sehingga berimbas pada timbulnya
noise pada image stream.
99
BAB VI
KESIMPULAN DAN SARAN
Pada akhir penyusunan skripsi ini dicantumkan beberapa kesimpulan dan
saran mengenai hal-hal yang terkait dengan aplikasi remote webcam yang penyusun
buat.
6.1. Kesimpulan
Dari implementasi aplikasi remote webcam yang telah penyusun lakukan,
maka didapatkan kesimpulan bahwa :
1. Aplikasi remote webcam dapat diterapkan dengan baik pada jaringan
LAN warnet yang memiliki traffic lokal yang cukup tinggi.
2. CPU usage aplikasi remote webcam pada sisi server dan sisi client
relatif kecil, sehingga tidak berdampak buruk bagi responsibilitas dan
stabilitas sistem operasi secara keseluruhan.
3. Bandwidth usage aplikasi remote webcam relatif kecil sehingga tidak
menambahi beban jaringan lokal warnet.
4. Workstation yang telah ditanamkan aplikasi server tidak akan dapat
menggunakan webcam untuk aplikasi yang lain, selain itu clipboard pun
juga tidak dapat digunakan.
100
5. Konfigurasi MTU pada aplikasi server akan berdampak pada disfungsi
aplikasi jika pengguna menggunakan MTU yang melebihi rekomendasi
default.
6.2. Saran
Saran yang dapat penyusun berikan dalam mengembangkan aplikasi remote
webcam ini adalah :
1. Enkripsi semua paket data yang dilewatkan melalui jaringan, sehingga
bukan hanya saat authentifikasi saja, melainkan saat data stream
dilewatkan juga dienkripsi.
2. Penambahan fungsi searching untuk log-log file streamnya.
101
DAFTAR PUSTAKA
Francesco, Balena, Programming Visual Basic 6.0, Microsoft® Press, 1999
Mandelbrot Set, The, Advanced Microsoft Visual Basic 6.0 , Microsoft® Press,
1998
Dan, Pilone, Neil, Pitman, UML 2.0 in a Nutshell, O'Reilly, 2005
Press, Microsoft, Microsoft® Win32® Programmer's Reference, Microsoft®
Press, 1993
Win32 API Reference for HLA
http://webster.cs.ucr.edu/Page_win32/kernelref.pdf
JPEG
http://en.wikipedia.org/wiki/JPEG
Overview of Windows32 API
http://msdn.microsoft.com/en-us/library/aa383723(VS.85).aspx
Glossary of Windows Socket
http://tangentsoft.net/wskfaq/glossary.html
Winsock Example
http://www.phoenixbit.com/site/tutorials/Programming/Visual%20Basic/w
insock1/WinsockSource.zip