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
119
Embed
APLIKASI REMOTE WEBCAM PADA LAN (LOCAL AREA NETWORKrepository.usd.ac.id/32275/1/035314036_Full.pdf · 2018-11-21 · Dalam sebuah warnet dibutuhkan pengawasan ekstra untuk mencegah
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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
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
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
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”,
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”,
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
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.