Ahad, 22 Ogos 2010

Live Streaming & On Demand Video

Add caption
Wowza Server Console
HD quality streaming over RTMP using Flowplayer
CakePHP, WowZa VOD Demo


Web 2.0 kini semakin canggih. Sudah berlalu zaman di mana melayari internet untuk membaca text dan melihat gambar. Melihat video melalui internet kini telah menjadi satu kebiasaan. Untuk itu, saya sedang melakukan research berkaitan :

1. Teknologi yang boleh stream Live Video melalui Webcam / HD Camera
2. Menggunakan Encoder percuma seperti Adobe FMLE 2.5 / 3.0
3. Media dalam bentuk FLV / MP4 dalam format H.264
4. Boleh dilihat menggunakan Browser dan Iphone/BB/ Mobile

Pada mulanya saya memilih Adobe Flash Media Server, tetapi setelah mencuba Wowza Flash Media Server versi 2.0, saya mungkin memilih solution dari Wowza untuk solution tetap.


Ciri-ciri Wowza yang saya suka
- Anti Hotlink
- Direct MySQL Logging
- h.264, mp4,f4v,mp3
- Allow Domain ( eg, only viewable at http://azrilnazli.com )
- supports live and vod

Seharian saya setup Wowza dalam Linux CentOS dan Windows 2003 Server dan namapknya kedua-keduanya berjalan dengan lancar kecuali server saya cuma mempunyai 1 CPU sahaja ( Wowza memerlukan 4 CPU )

Ujian yang saya jalankan
1. Stream dari webcam laptop over wifi ke server di IDC @ 200kbps ~ PASSED
2. HD Video On Demand Streaming guna format RTMP/MP4 ~ PASSED
3. MySQL Database log untuk usage ~ PASSED
4. CDN integration untuk VOD/LIVE RTMP ~ PASSED
5. Wirecasting ( VOD / Live Switch ) ~ PASSED

Statistik
Disebabkan sudah ada module untuk rekod log ke dalam MySQL database, membina statistik menjadi lebih mudah. Jadi saya boleh keluarkan data seperti berikut
- TOP 10 Video On Demand
- Volume used for VOD/LIVE
- Number of users
- Total volume served
Dengan menggunakan framework CakePHP dan digabungkan dengan FusionFreeCharts, saya boleh membina antara muka interaktif untuk paparkan kegunaan video secara live.

Auto Encoding on Upload
Membina transcoding engine adalah satu tugas yang sukar, bayangkan anda membuat sistem yang boleh menerima audio/video dari pengguna dan perlu proses setiap video yang diupload ke mp4 atau flv sebelum dipaparkan ke browser. FFMPEG adalah utility yang anda perlu kuasai dan juga GEARMAN
- FFMPEG ( transcoder )
- GEARMAN ( queue engine )
- SWFUPLOAD ( flash uploader dari browser )
- CAKEPHP

Anda mungkin boleh membina Youtube versi sendiri jika menguasai semua ilmu di atas.

Kos yang mungkin terlibat
1. RM3000  untuk Wowza 1 time license
2. RM3000  untuk Wirecast
3. RM7000 4U rack + 2mb dedicated @ IDC untuk setahun
4. RM15,000 1 X 1U 4 CPU 16 GB RAM server
7. RMXXX CDN subscription untuk local deliovery dan international delivery


Boleh tahan mahal untuk running media business :D

Sabtu, 21 Ogos 2010

Ebook: CakePHP Ajax Web 2.0


Ebook : Panel Kawalan User menggunakan ACL/AUTH


Akhirnya setelah menulis dan membuat ujian selama lebih kurang 5 hari, Ebook Panel Kawalan User menggunakan Acl/Auth berjaya disiapkan.

Acl adalah satu komponen penting dalam Framework CakePHP , dan untuk menguasainya agak mengambil masa. Saya memerlukan beberapa percubaan untuk memahami konsep asal ACL dan AUTH. Jika anda seorang developer CakePHP, cuba ikuti tutorial ini.

ScribD: http://www.scribd.com/doc/36175172/CakePHPPanelKawalanACL-AzrilNazli
PDF : http://mamakspot.googlecode.com/files/CakePHPPanelKawalanACL-AzrilNazli.pdf

Jumaat, 20 Ogos 2010

Menulis Ebook Panel Kawalan


Sudah 45 mukasurat Ebook Membina Panel Kawalan ACL ditulis. Semalam dengan bantuan seorang tester, kami mencuba untuk test run sistem Panel Kawalan ACL dan alhamdulillah tiada major error, cuma tertinggal code. Hari ini saya menulis dan menguji kod untuk AccessComponent dan AccessHelper. Fungsinya untuk show/hide menu berdasarkan credentials user yang login ke dalam sistem. Sistem yang dibina cukup lengkap dengan
  • User Registration,
  • Login,
  • Logout, 
  • Paparan data user yang login
  • Show/Hide Menu berdasarkan ARO Permission
  • Highlight Menu
  • CSS Untuk menu

Countdown : Panel Kawalan ACL CakePHP

Muka Hadapan Ebook

ACL atau Access Control List adalah satu tajuk yang agak sukar dikuasai, namun sangat berguna jika anda berjaya menguasainya. Nantikan penerbitan Ebook ini. Pihak kami sedang membuat testing ke atas kod yang dihasilkan dengan bantuan programmer-programmer CakePHP yang cukup terlatih.

Selasa, 17 Ogos 2010

Training Joomla 1.5

Hari ini pertama kali sejak menceburkan diri dalam bidang training, mengajar CMS Joomla versi 1.5. Training material saya gunakan buku Joomla For Dummies.

Peserta kebanyakkannya gabungan dari sektor swasta dan kerajaan dan kebanyakkannya adalah pengguna asas IT. Tidak sebelum student saya sebelum ini yang rata-rata mempunyai pengetahuan basic HTML/CSS/PHP dan MySQL, kali ini memang betul-betul end user.

Jadi cabaran-cabaran training kali ini ialah :

- Laptop mereka OS berlainan ( XP, Vista )
- ada antivirus block Port 80,3306 dan 443 ( skype guna port 80 )
-  Laptop processing power yang sangat slow ( 10 saat untuk render page depan Joomla )
- Konsep CMS Joomla,  ( Section - Category - Article )
- Apa itu PHP,MySQL,PHPMyADMIN dan XamppLite

So saya kena ikut pace setiap peserta. Kelas akan berlangsung selama 3 hari dan target utama setiap peserta dapat menggunakan Joomla 1.5 sebagai portal.

Ahad, 15 Ogos 2010

CakePHP & CCTV Motion Detection

Flowplayer integration
Image Sequence
Took me 3 hours to configure the whole thing. The only problem was FLV generated video playing too fast

Motion detection and database connectivity powered by Motion, http://www.lavrsen.dk/foswiki/bin/view/Motion/WebHome

Paparkan asset dalam folder

Semua fail video dan gambar CCTV, saya simpan dalam /tmp/motion. Saya menggunakan teknik PHP Gateway untuk paparkan semula imej dan video yang ditangkap menggunakan CCTV

$filename = basename($_GET['filename']);
$dir = '/tmp/motion/';
$path = $dir . $filename ;
$info = getimagesize( $path );
header( "Content-type: {$info['mime']}" );
@readfile( $path );
?>

Kemudian, saya boleh lihat kembali menerusi, alamat seperti gambar di bawah

Sabtu, 14 Ogos 2010

CakePHP beforeSave :: Automatic append user_id

I use this callback extensively, so need to hardcode user_id in every controller.

function beforeSave() {
      App::import('Component', 'Session');
      $Session = new SessionComponent();
      $user = $Session->read('Auth.User');
      $this->data[$this->alias]['user_id'] = $user['id'];
      return true;
  }

Jumaat, 13 Ogos 2010

Membina Panel Kawalan untuk ACL


Hampir 2 hari memahamkan Acl di dalam CakePHP.

Apa pentingnya Acl ?
Acl berfungsi untuk mengawal akses pengguna setelah berjaya login ke dalam sistem. Cotnohnya sistem anda mempunyai usergroup berikut

SuperUser
Admin
User
Suspended

dan anda mempunyai Controller/Action seperti berikut

Users/index
Users/add
Posts/index
Post/edit

dan anda ingin menghadkan akses setiap usergroup tersebut.


Pertama, saya bina satu panel kawalan untuk tambah/buang semua actions ke dalam sistem
Assign registered Acos ( Action ) to Aro ( Group )
ACL check in View

Improved Security Access Page
Cake CLI View Acos
Cake CLI View AROS

MySQL data structure


Senarai semua actions dalam sistem


Khamis, 12 Ogos 2010

Ubuntu CakePHP Setup

Enable mod_rewrite

sudo
a2enmode rewrite

Exxon Mobil Job Scammer


Too good to be true, Exxon Mobile offered me a job at UK ? After seconds, ahh a Job Scammer. Victim normally send their CV to the scammer and they will asking some amount of deposit ( at least RM5k ). So beware if you received an email like this

How do I know this is a scam ?
1. Exxon will not use Gmail
2. Typo errors
3. Google the sender/ HR

Rabu, 11 Ogos 2010

The Inceptions / Pengasasan

Antara movie terbaik untuk tahun 2010. The Inception berkisah mengenai teknologi penguasaan minda separa sedar oleh individu ke-3.

Log : Memahami CakePHP ACL & Auth

Ini adalah log

mkdir cds-is
cake bake project  cds-is
cd cds-is
ls *
// test http://localhost/cds-is  using Mozilla
// create a database with username and password
cake bake db_config  # setup cakephp default database
cake schema generate
// edit APP/config/schema/schema.php and create users table using these schema

/* SVN FILE: $Id$ */
/* CdsIs schema generated on: 2010-08-11 09:08:38 : 1281491378*/
class CdsIsSchema extends CakeSchema {
        var $name = 'CdsIs';

        function before($event = array()) {
                return true;
        }

        function after($event = array()) {
        }

        var $users = array(
                        'id' => array('type'=>'integer', 'null' => false, 'default' => NULL, 'length' => 10, 'key' => 'primary'),
                        'usename' => array('type'=>'string', 'null' => true, 'default' => NULL),
                        'password' => array('type'=>'string', 'null' => true, 'default' => NULL),
                        'description' => array('type'=>'text', 'null' => true, 'default' => NULL),
                        'created' => array('type'=>'datetime', 'null' => true, 'default' => NULL),
                        'modified' => array('type'=>'datetime', 'null' => true, 'default' => NULL),
                        'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1))
                );


}
?>

// create users database using schema
cake schema generate

// create user model
cake bake model user

// create user controller
cake bake controller users

// create users views directory
mkdir view/users

// Create basic auth system in and use Auth Components in UsersController

Isnin, 9 Ogos 2010

Mengesan staff / pekerja / kekasih guna teknologi GPS



Saya ada membuat satu sistem pengesan GPS yang simple yang mempunyai ciri-ciri berikut :

1. Aplikasi GPS Tracking yang run dalam Nokia E71/E72/E75 ( Java App ) yang akan menghantar data GPS mengikut interval yang ditentukan menggunakan 3G ( HTTP Protokol )

2. Penerima data menggunakan CakePHP dan data yang diterima akan dimasukkan ke dalam database MySQL

3. View data menggunakan kordinat dari dalam database menggunakan Google MAP JS API

Untuk menggunakan SMS pun boleh tapi disebabkan kos yang tinggi, buat masa ini sistem ini hanya menggunakan HTTP update sahaja

Ahad, 8 Ogos 2010

Axis 2100 Ip Camera MJPEG stream to Wowza Server

So I have an Axis 2100 IP Camera running on the network and these are the specs :

1. 15 FPS max
2. JPG or MJPEG format
3. Direct URL will be http://10.0.0.5/cgi-bin/video640x480.mjpg

Planned Stream
1. Will be published to Wowza server using RTMP format, rtmp://x.x.x.x/live/axis.sdp
2. Will be published in FLV format
3. FFMPEG will transcode the input format in MJPEG and output in FLV

FFMPEG
1. Using Ubuntu Server Operating system
2. Network for OS will be same segment with Axis camera ( 10.0.0.X )
3. Compile FFMPEG with RTMP support
  1. 3.1 sudo apt-get install libssl-dev
  2. 3.2 svn co svn://svn.mplayerhq.hu/rtmpdump/trunk rtmpdump 
  3. 3.3 Configure;Make,Make Install rtmpdump then ldconfig
  4. 3.4. Download and compile latest FFMPEG with these options,  ./configure --enable-gpl --enable-shared --enable-librtmp
4. Now, transcode using this command
ffmpeg -f mjpeg -i http://10.0.0.5/cgi-bin/video320x240.mjpg -an   -vcodec flv   -b 100k -r 15 -f flv rtmp://x.x.x.x/live/axis.sdp

5. Grab back the video using your favorite player eg Flowplayer.

Screenshots

Flowplayer RTMP streaming from Wowza Server
FFMPEG transcoding result
MJPEG from Axis Camera Web Server

Jumaat, 6 Ogos 2010

Live Streaming menggunakan Wowza Media Server Centos


Alkisahnya, saya tengah research mengenai Wowza Media Server. Alternatif kepada Adobe Flash Media Server dan Microsoft Silverslight.

Saya mempunyai task di mana client ingin beralih dari Microsoft Media Server ke Flash. Keperluan client adalah seperti berikut :

1. HD quality streaming
2. End format in FLV
3. Smooth Streaming Technology
4. Adove Media Encoder compability mode
5. Variable streaming rate, bergantung kepada speed broadband user

Saya menggunakan VMWARE ESX virtual machine yang menggunakan CentOS 5.1 sebagai OS utama. Wowza memerlukan Java versi seperti di bawah :

[root@wowza azril]# java -version
java version "1.6.0_0"
OpenJDK Runtime Environment (IcedTea6 1.6) (rhel-1.11.b16.el5-i386)
OpenJDK Server VM (build 14.0-b16, mixed mode)

Download Wowza versi developer dalam bentuk RPM executables dan install. Kemudian isi no serial untuk developer ( percuma )

Pastikan port 1935 dan 8086 dibuka, dan run startup.sh yang terletak di dalam path /usr/local/WowzaMediaServer/bin

Wowza berjaya run
Sekarang saya akan cuba setting server untuk menerima Live Feed dari HD Webcam yang dipasang di dalam Laptop. Saya mengikuti tuorial yang dibekalkan oleh WowZa, http://www.wowzamedia.com/quickstart_2_1_2.html#live-rtmp.

Adobe Flash Media Live Encoder
 Menggunakan Feed dari Webcam laptop, saya download program Adobe Flash Media Live Encoder dan mula masukkan setting seperti berikut
URL : rtmp://x.x.x.x/live
STREAM: wowza.sdp

Kemudian saya melihat log
Log dari startup.sh
Nampaknya WowzaMediaServer berjaya menerima video feed dari Adobe FLME. Seterusnya saya ingin melihat feed menggunakan 2 player
1. Adobe Flash Media Player
2. Flowplayer dengan plugin RTMP

Streaming Live dari Mozilla Firefox menggunakan player dari Adobe Flash
Streaming Live menggunakan FLowplayer RTMP Plugin
Nampaknya, misi berjaya. Sebelum ini saya ada pengalaman menggunakan Microsoft Media Server dan Adobe Media Server.

Business Model  yang boleh dibuat dengan servis ini
===================================
1. Live streaming guna Web TV ala Youtube guna Flash. User tak perlu special player, memadai ada Flash
2. Harga berdasarkan  jumlah maksimum Concurrent Users
3  Harga berdasarkan jumlah User yang boleh Akses
4. Harga berdasarkan kualiti stream ( 50kbps - 1.5mb )
5. Sokongan CDN seperti Akamai, Jaring Speed CDN dan sebagainya
6. Anda boleh cipta sendiri plan-plan tersebut
7. Harga berdasarkan jumlah live channel

Flow Untuk Business ( self streaming user )
===================================
Sinopsis : Business ini akan menganggap user mempunyai pengalaman sendiri . Target user ini ialah wartawan yang menggunakan internet, stesen TV/Radio, blogger profesional., event management, kolej yang menawarkan course jarak jauh.


1. User akan subscribe dengan salah satu plan anda
2. User akan diberi trial akaun dan boleh login ke Control Panel
3. User boleh create sendiri live channel mereka, eg http://x.x.x.x/user/live/channelname
4. User publish stream ke channel menggunakan Adobe FLME
5. Dalam control panel akan menunjukkan stream mereka beserta HTML embed code
6. Dalam control panel akan ada statistik penggunaan update setiap 1 jam

Flow Untuk Business ( corporate client )
===================================
Sinopsis: Client yang tiada equipment dan harapkan kita sediakan semua sekali dari A-Z
Peralatan wajib
1. Camera HD, Video Camera Digital
2. Channel Switcher seperti Wirecast
3. PC based encoder yang power ( 12GB ram, highend graphics card )
4. Internet connection yang stabil, mampu hantar video feed pada kelajuan 1mbps
5. Penyediaan website untuk paparkan feed.

Peralatan untuk Server ( minimum )
===================================
1. CPU: Single Dual Core, 3.00 GHz or better
2. RAM: 2GB
3. Disk: 2 or more in RAID 0 (striping)
4. Network: 1Gb Ethernet

OS yang disokong :
1. Windows (XP, Vista, 7, Server 2003 & 2008)
2. Linux (all distributions)
3. Solaris
4. Mac OS
5. Unix

Content Delivery Network ( ini sepatutnya ada sebab untuk kurangkan kos bandwidth video feed )

Skillsets yang diperlukan untuk System Admin
================================
1. Linux basic OS maintenance
2. Network troubleshooting
3. Wowza Server Administration
4. Zabbix Realtime Monitoring

Skillsets yang diperlukan untuk Web App Developer
=====================================
1. Log file manipulations ( apache style )
2. Wowza Configuration management ( XML )
3. Statistics Generation via Flash ( Fusion Chart Free )
4. Any RAD Frameworks
5. Paypal integration

How to Market this business ?
=====================================
1. Live streaming importance
2. Cost saving in longer run
3. Subscription based
4. Technical Supports for SLA
5. CDN as value added service

 Issues dan masalah yang mendatang
=====================================
1. HTML Hotlinking ( kena prevent user dari embed HTML streaming code )
2. SWF Theft ( kena prevent SWF Player dari kena hotlinking ( boleh guna cara PHP gateway technique )
3. Limit siapa yang boleh publish ker server dan limit jenis encoder

Update 07 August 2010
===================
Saya berjaya buat testing untuk prevent Hotlinking menggunakan panduan dari ( http://www.wowzamedia.com/forums/showthread.php?t=5239 )

Untuk Package, saya menggunakan pre compiled edition dari, http://www.wowzamedia.com/forums/showthread.php?t=6565

Sample configuration
Contoh konfigurasi application/live/Application.xml
Contoh log file menunukkan module HotlinkDenial

Rabu, 4 Ogos 2010

Nasi Ayam Kampung Awan Besar

Ayam Kampung, Ikan Masin, Budu Kelantan
Peha dan Kepak

Tadi tekak terasa nak makan Ayam Kampung. Jadi , destinasi paling dekat, Restoran Hassan Nasi Ayam Kampung yang terletak di RnR Awan Besar. Seketul ayam kampung harga RM4, jadi saya pilih peha dan kepak. Lauk pulak ambil kuah daging, cecah budu dan teh O Ais. Semuanya RM12/=

Apa yang bestnya ayam kampung ?
  • Ratah sampai tulang
  • Dagingnya lembut dan lebih rasa
  • Sedap dicecah sos budu yang ditumis dengan lada
  • Makan seketul tak puas, mesti nak 2
Harga : RM4 seketul
Lokasi : http://wikimapia.org/84066/Rest-Area-Kesas-Highway-Awan-Besar

Isnin, 2 Ogos 2010

E39 Speed Sensor, Odometer stop functioning

Tengah drive tetiba perasan odometer dah mati. Nih sure speed sensor yg duduk kat area tayar belakang belah kiri.

1 sensor original dalam RM300, upah dalam RM100. Kopak jugaklaa RM400 karang.

Odometer tak jalan
Computer board tak boleh bagi reading
Mileag count tak jalan
PDC tak mati secara automatik

Ahad, 1 Ogos 2010

Perodua Viva EZi on Sapura Leda Suspension

Kereta adik ipar. Software Engineer ( VOip) yg minat kereta. Baru pasang suspension Sapura Leda tadi @ Dengkil. Upah boleh tahan mahal, RM80 untuk pasang spring sahaja.

Mods
- Sapura Leda Suspension
- Ultra Racing 2 pt Strutbar
- Ultra Racing anti roll bar ( rear )

Nasi Beriyani Batu Pahat Salim


Peminat nasi beriyani seperti saya ini, memang agak cerewet kalau bab makan, lebih-lebih lagi makan nasi beriyani. Jadi saya mencuba nasi beriyani Hj Salim menggunakan tag Nasi Beriyani Batu Pahat. Lokasinya terletak di hadapan JPJ Bukit Katil Melaka,

Menu :
  1. Ayam
  2. Daging
  3. Kambing
Hargnya dalam RM6 sepinggan. Tidak keterlaluan jika saya katakan, lagi sedap dari Beriyani Mat Shah, Peserai Batu Pahat. Kelembutan kambingnya, lebih-lebih lagi jika memimilih rib steak ( kambing tulang ). Mau order 2 kali, confirmed !

Lokasi : Bukit Katil, Melaka
Harga : RM6 sepinggan
Contact : Hj Salim, 012 - 252 3870
Wikimapia: http://wikimapia.org/1368830/Jabatan-Pengangkutan-Jalan-Melaka

Tips : Hubungi Hj Salim dulu sebelum datang, takut beriyani dia habis cepat.