วันจันทร์ที่ 17 ตุลาคม พ.ศ. 2554

บันทึกภาพวิดีโอด้วย Flash Media Server

การบันทึกภาพวิดีโอลง Harddisk ที่เป็น localhost มีเครื่องมีอให้เลือกใช้หลายตัวไม่ว่าจะเป็น FMS หรือ Red5 ซึ่งทั้ง 2 นี้เป็น server ที่ทำหน้าที่ในการบันทึกภาพวิดีโอลงบนเครื่องของคุณนั่นเอง แต่สำหรับบทความนี้ผู้เขียนขอเขียนเกี่ยวกับการเขียนร่วมกับ Flash Media Server ครับ ซึ่ง FMS มีหน้าที่ในการเข้ารหัสภาพจากกล้อง Webcam ของเราในรูปแบบของไฟล์ .flv โดยผ่าน Protocal Real-Time Messaging Protocol (RTMP) และทำการบันทึกลงบนแฟ้มที่เราตั้งค่าไว้ ซึ่งเราสามารถเขียนโปรแกรมเพื่อควบคุมการทำงานด้วย Flash Actionscript 2.0 หรือ Actionscript 3.0 ก็ได้ครับ


หลังจากติดตั้ง Flash Media Server เราต้อง Start การทำงานของ FMS ให้เริ่มทำ connection ก่อนครับ (ดังภาพ)



ก่อนเริ่มเขียนโปรแกรมบันทึกเราต้องทำการ config ค่าของ FMS ก่อน

เริ่มต้นการเขียนโปรแกรมกันเลยครับ

ขั้นแรกเราต้องทำการสร้าง Class NetConnect เพื่อเชื่อมต่อระหว่าง Client กับ Server หลังจากนั้นสร้าง Class NetStream มาใช้งาน ซึ่ง NetStream จะเป็น Class ที่ดูแลการส่ง stream ข้อมูลระหว่าง Server และ Client ครับ

import flash.net.netstream;
import flash.net.NetConnection;


var nc:NetConnection = new NetConnection;
nc.connect(rtmp://localhost:1935/sample);
var ns:NetStream = new NetStream(nc);

เมื่อสร้าง NetConnection Class และ NetStream เรียบร้อยแล้ว เราก็เริ่มเชื่อมต่อกล้อง Webcam ครับ

var cam:Camera = Camera.get();
ns.attachVideo(cam);

ทำการเรียกไมโครโฟนเพื่อนำเสียงมาบันทึกครับ

var mic:Microphone = Microphone.get();
ns.attachAudio(mic);

เมื่อเราเรียก class ทั้งหมดเรียบร้อยแล้วเราจึงเขียนเพื่อประกอบกับ Application ที่เราได้ออกแบบไว้ โดยเป็นดังนี้ครับ



กล่าวโดยสรุป ในบทความนี้กล่าวถึงขั้นตอนการสร้างโปรแกรมเบื้องต้นเพื่อทำงานทางฝั่ง Client และกระบวนการแลกเปลี่ยนข้อมูลระหว่าง Flash Media Server กับ Client ซึ่งเขียนด้วยโปรแกรม Flash เพื่อสามารถสร้างกราฟฟิกได้อย่างสวยงาม โดยเริ่มต้นจากการสร้าง function บน Flash Media Server เพื่อรับข้อมูลจาก client แล้วนำมาประมวลผล ส่งผลลัพธ์กลับไปยัง client ซึ่งต้องมี function หรือ Responder มารองรับ และการติดต่อและการแลกเปลี่ยนข้อมูลต่าง ๆ ต้องอาศัย NetConnection เป็นตัวจัดการ  ขั้นตอนต่อไปเราจะเริ่มทำการเขียนเพื่อเรียกไฟล์วิดีโอแนะนำการใช้งานขึ้นมาปรากฏครับ

การเรียกไฟล์วิดีโอขึ้นมาแสดง

ขั้นตอนแรกคือการสร้าง Class NetConnection และ Class NetStream เหมือนกับการเขียนเพื่อบันทึกภาพครับ

var nc:NetConnection = new NetConnection();
nc.connect(null);
var ns:NetStream = new NetStream(nc);
videoPlayer.attachVideo(ns);

ขั้นตอนที่สอง เรียกไฟล์ .flv ที่เราตัดต่อไว้เพื่อมาแสดงครับ

ns.play("externalVideo.flv");

ขั้นตอนสุดท้ายคือการตรวจสอบการว่าวิดีโอจบหรือยังเพื่อที่จะไปยังหน้าต่อไป

if(myMovie._currentframe == myMovie._totalframes){
//Do something
}