Làm việc với video flash (file.flv)

Chia sẻ: Nguyen Thanh | Ngày: | Loại File: DOCX | Số trang:7

0
88
lượt xem
22
download

Làm việc với video flash (file.flv)

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

ActionScript 3.0 yêu cầu một số các lớp làm việc cùng nhau để tải và Flash video phát lại. Bạn phải sử dụng một đối tượng NetStream để tải các video và kiểm...

Chủ đề:
Lưu

Nội dung Text: Làm việc với video flash (file.flv)

  1. LÀM VIỆC VỚI VIDEO FLASH (FILE .FLV) ActionScript 3.0 yêu cầu một số các lớp làm việc cùng nhau để tải và Flash video phát lại. Bạn phải sử dụng một đối tượng NetStream để tải các video và kiểm soát phát lại, tuy nhiên, lớp NetStream chỉ quan tâm cách chuyển dữ liệu, chứ không biết làm thế nào để đưa dữ liệu vào video. Vì vậy bạn phải sử dụng một đối tượng Video. Các đối tượng Video cho phép sử dụng dữ liệu từ đối tượng NetStream để đưa các dữ liệu video lên màn hình. Để làm được điều đó cần phải có một đối tượng NetConnection. Các đối tượng NetConnection xác định nguồn gốc của những dữ liệu mà các đối tượng NetStream sẽ xử lý. Khi các luồng video Flash từ m ột Server truyền thông Flash (Flash Communication Server ) hoặc Server đa phương tiện Flash(Flash Media Server) chuyển đi thì các đối tượng NetConnection sẽ hướng tới máy chủ. Với các video đang tải về ,các đối tượng NetConnection bắt buột sử dụng một chuỗi kết nối null. Các mã sau đây xây dựng một đối tượng NetConnection và khởi tạo nó để sử dụng với quá trình tải video . Lưu ý rằng mã giả sử bạn đã import các lớp flash.net.NetConnection: import flash.media.Video; import flash.net.NetConnection; import flash.net.NetStream; var videoConnection: NetConnection = mới NetConnection (); videoConnection.connect (null); Một khi bạn đã xây dựng một đối tượng NetConnection và gọi phương thức kết nối connect( ) với tham số là một giá trị null, ta xây dựng các đối tượng NetStream, và sau đó thông qua hàm dựng NetStream tham chiếu đến các đối tượng NetConnection. Các mã sau đây xây dựng một đối tượng NetStream (giả sử bạn đã import flash.net.NetStream): var videoStream: NetStream = mới NetStream (videoConnection); Bạn đã xây dựng các đối tượng NetStream, baay giờ thêm một đối tượng Video, và kết hợp NetStream với Video. Lớp flash.media.Video là một đối tượng hiển thị, có nghĩa là bạn phải thêm nó vào danh sách hiển thị sau khi xây dựng. Các mã sau đây xây dựng một đối tượng Video mới và rồi thêm chúng vào danh sách hiển thị:
  2. var video: Video = mới Video (); addChild (video); Bạn có thể kết hợp một đối tượng NetStream với một đối tượng video bằng cách sử dụng phương thức attachNetStream() của đối tượng Video , thông qua tham số là đối tượng NetStream video.attachNetStream (videoStream); Sau khi bạn gắn đối tượng NetStream vào đối tượng Video, bất kỳ dữ liệu video được kiểm soát bởi các đối tượng NetStream đều được đưa ra bởi các đối tượng Video. Sau đó phải xác định tên file video cần thiết và cho phép video đó được phát: videoStream.play ("example.flv"); Trong quá trình biên dịch có thể xảy ra lỗi về dữ liệu loại metadatam, khi đó ta cần thiết lập hàm sau để bỏ qua lỗi và không ném lỗi ra. luong_video.addEventListener(AsyncErrorEvent.ASYNC_ERROR, bo_qua_loi); function bo_qua_loi(event: AsyncErrorEvent): void { // bo qua loi } Tổng kết lại các điều trên ta có code tải video như sau: import flash.media.Video; import flash.net.NetConnection; import flash.net.NetStream; import flash.display.Sprite; var kn_video:NetConnection = new NetConnection( ); kn_video.connect(null); var luong_video:NetStream = new NetStream(kn_video); var video:Video = new Video( ); video.height=200; video.width=300; video.x=stage.stageWidth/2-100; video.y=stage.stageHeight/2-100; video.attachNetStream(luong_video);
  3. luong_video.play("Unefemmeamoureuse.flv"); addChild(video); luong_video.addEventListener(AsyncErrorEvent.ASYNC_ERROR, bo_qua_loi); function bo_qua_loi(event: AsyncErrorEvent): void { // bo qua loi } Thời gian phát của video (videoStream).time Thời gian của toàn file video : Lớp Netstream không có hổ trợ việc đọc th ời gian t ổng của m ột video. Tuy nhiên trong video thông thường có một metadata ghi lại tổng đó. Thuộc tính onmetadata cho phép đ ọc các metadata đó nhưng yêu cầu phải tạo ra một đối tượng để lưu các metadata và ta sẽ đọc thời gian ghi trong đ ối tượng var thoigian:Object = new Object( ); thoigian.onMetaData = function(metadata:Object):void { trace(metadata.duration); }; videoStream.client= thoigian; Ví dụ : Trong code ở ví dụ trên để xuất thời gian của video ta thêm đoạn code sau vào dưới đoạn code trên : var thoigian:Object = new Object( ); thoigian.onMetaData = function(metadata:Object):void { trace(Math.floor(metadata.duration/60)+":"+Math.floor (metadata.duration- 60*Math.floor(metadata.duration/60))); }; luong_video.client= thoigian; vi du : trong ví dụ sau ta load một file .Flv và cho hiển thi thời gian play và tổng thời gian của file video package { import flash.text.TextField; import flash.media.Video; import flash.net.NetConnection; import flash.net.NetStream; import flash.events.NetStatusEvent; import flash.display.TextFieldAutoSize; import flash.display.Sprite; import flash.events.Event;
  4. public class Example extends Sprite { private var _stream:NetStream; private var _video:Video; private var _playbackTime:TextField; private var _duration:uint; public function Example( ) { _video = new Video(160, 120); _playbackTime = new TextField( ); _playbackTime.autoSize = TextFieldAutoSize.LEFT; _playbackTime.y = 120; _playbackTime.text = "test"; _duration = 0; var connection:NetConnection = new NetConnection( ); connection.connect(null); _stream = new NetStream(connection); _stream.play("video.flv"); var client:Object = new Object( ); client.onMetaData = onMetaData; _stream.client = client; _video.attachNetStream(_stream); addChild(_video); addChild(_playbackTime); addEventListener(Event.ENTER_FRAME, onEnterFrame); } private function onMetaData(data:Object):void { _duration = data.duration; } private function onEnterFrame(event:Event):void { if(_duration > 0 && _stream.time > 0) { _playbackTime.text = Math.round(_stream.time) + " / " + Math.round(_duration); } } } } Để cho video phát ở thời điểm nào ta dùng : videoStream.seek(x); trong đó x : giây Kích thước video :
  5. var video:Video = new Video(160, 120);// kich thước video ban đầu video.width = 320; // đặt lại kích thước video.height = 240; video.width = video.videoWidth; video.height = video.videoHeight; videoWidth;videoHeight là kích thước của video khi nó được mã hoá hay khi nó được chuyển thành file flv; videoStream.bufferTime = 10; Thiết lập thời gian bufffer cho việc load video Các cue point của video : là các vị trí mang thông tin của vídeo (như tên video). Hàm để lấy thông tin ở các điểm chốt đó là tham khảo đến onCuePoint. Muốn vậy ta tạo một đối tượng và cho tham khảo đến onCuePoint. Khi đó ta sẽ thiết lập một hàm để xử lý các kết quả trên cuepoint theo ý mình. var client:Object = new Object( ); client.onCuePoint = onCuePoint; videoStream.client = client; private function onCuePoint(cuePoint:Object):void { trace(cuePoint.name + " " + cuePoint.time); } Dừng ,tạm dừng và phát lại , xoá video : ta dùng phương thức pause() của NetStream. videoStream.close( );để dừng video video.clear( ); để xoá streamvideo, removeChild(video); để xoá video ra khỏi display list videoStream.pause() thường không có tham số , tuy nhiên có thể cho nó một tham số là true hay false v ới ý nghĩa sau đây: videoStream.pause(true); video sẽ tạm dừng nếu nó đang phát , nếu nó đang dừng thì không có gì xảy ra. videoStream.pause(false);: ngược lại với trường hợp trên Di chuyển đầu đọc video ( play head) về trước hay sau khi video đang phát : ta dùng điều khiển slider và phương thức seek(). Sau đây là một ví dụ về việc tạo slider và khi video phát thì slider tự động chạy. Nếu kéo slider về trước hay sau thì video sẽ phát đúng vị trí đó.Ví dụ này chưa hoàn hảo về tính đơn giản của code , các bạn hãy tối ưu nó. Nếu kết hợp với phần trước có thể tạo các nút play-stop , xuất hiện thời gian đã phát, tổng thời gian của video . package { import flash.media.Video; import flash.display.Sprite; import flash.net.NetStream; import flash.net.NetConnection; import flash.events.Event;
  6. import flash.events.MouseEvent; import flash.geom.Rectangle; public class VideoScrubber extends Sprite { private var _thumb:Sprite; private var _track:Sprite; private var _stream:NetStream; private var _duration:Number; private var _scrubbing:Boolean; private var kn_video:NetConnection; private var luong_video:NetStream; private var video:Video; private var client:Object ; public function VideoScrubber() { _track = new Sprite( ); _track.graphics.lineStyle( 2 ); _track.graphics.drawRect(0, -2.5, 200, 5); addChild(_track); _thumb = new Sprite( ); _thumb.graphics.lineStyle( 2 ); _thumb.graphics.beginFill(0xF123FFF); _thumb.graphics.drawRect(-5, -5, 10, 10); _thumb.graphics.endFill( ); addChild(_thumb); addEventListener(Event.ENTER_FRAME, onEnterFrame); _thumb.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); _thumb.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); client = new Object( ); client.onMetaData = onMetaData; kn_video= new NetConnection( ); kn_video.connect(null); luong_video= new NetStream(kn_video); video= new Video( ); video.height=200; video.width=300; video.x=stage.stageWidth/2-100; video.y=stage.stageHeight/2-100;
  7. video.attachNetStream(luong_video); luong_video.play("Paul MauriatToccata.flv"); luong_video.client =client; addChild(video); } private function mouseDownHandler(event:MouseEvent):void { _scrubbing = true; var rectangle:Rectangle = new Rectangle(0, 0, _track.width, 0); _thumb.startDrag(false, rectangle); } private function onMetaData(data:Object):void { _duration = data.duration; } private function mouseUpHandler(event:MouseEvent):void { _scrubbing = false; _thumb.stopDrag( ); } private function onEnterFrame(event:Event):void { if(_duration > 0) { if(_scrubbing) { luong_video.seek(_duration * _thumb.x / _track.width); } else { _thumb.x = luong_video.time / _duration * _track.width; } } } } }
Đồng bộ tài khoản