[AS3]as3开发流媒体视频播放器源代码
[AS3]as3开发流媒体视频播放器源代码
[AS3]as3开发流媒体视频播放器源代码
- package
- {
- import flash.events.*;
- import flash.media.Video;
- import flash.display.Sprite;
- import flash.net.*;
- import flash.text.TextField;
- import fl.controls.Button;
- public class StreamingVideoPlayer extends Sprite {
- private var _videoURL:String;
- private var _video:Video;
- private var _vidDuration:Number;
- private var _vidXmax:Number;
- private var _vidYmax:Number;
- private var _vidWidth:Number;
- private var _vidHeight:Number;
- private var _main_nc:NetConnection = new NetConnection();
- private var _serverLoc:String;
- private var _ns:NetStream;
- private var _start_btn:Button;
- /* ------------Contructors/Initialization-----------*/
- public function StreamingVideoPlayer(serverLoc:String,
- flvLocation:String,vidDuration:Number,vidXmax:Number,
- vidYmax:Number):void {
- //set video params
- _videoURL = flvLocation;
- _vidDuration = vidDuration;
- _vidXmax = vidXmax;
- _vidYmax = vidYmax;
- //add eventListeners to NetConnection and connect
- _main_nc.addEventListener(NetStatusEvent.NET_STATUS,
- onNetStatus);
- _main_nc.addEventListener(
- SecurityErrorEvent.SECURITY_ERROR,
- securityErrorHandler);
- _main_nc.connect(serverLoc);
- }
- private function onNetStatus(event:Object):void {
- //handles NetConnection and NetStream status events
- switch (event.info.code) {
- case "NetConnection.Connect.Success":
- //play stream if connection successful
- connectStream();
- break;
- case "NetStream.Play.StreamNotFound":
- //error if stream file not found in
- //location specified
- trace("Stream not found: " + _videoURL);
- break;
- case "NetStream.Play.Stop":
- //do if video is stopped
- videoPlayComplete();
- break;
- }
- //trace(event.info.code);
- }
- /* -------------------Connection------------------- */
- private function connectStream():void {
- //netstream object
- _ns = new NetStream(_main_nc);
- _ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR,
- asyncErrorHandler);
- _ns.addEventListener(NetStatusEvent.NET_STATUS,
- onNetStatus);
- //other event handlers assigned
- //to the netstream client property
- var custom_obj:Object = new Object();
- custom_obj.onMetaData = onMetaDataHandler;
- custom_obj.onCuePoint = onCuePointHandler;
- custom_obj.onPlayStatus = playStatus;
- _ns.client = custom_obj;
- //attach netstream to the video object
- _video = new Video(_vidXmax,_vidYmax);
- _video.attachNetStream(_ns);
- //video position could be parameterized but hardcoded
- //here to account for optional movie frame border
- _video.x = 1;
- _video.y = 1;
- addChild(_video);
- setVideoInit();
- _ns.play(_videoURL);
- }
- /* -------------NetStream actions and events-------------- */
- private function videoPlayComplete():void {
- setVideoInit();
- }
- private function setVideoInit():void {
- _ns.play(_videoURL);
- _ns.pause();
- _ns.seek(_vidDuration/2);
- addStartBtn();
- }
- private function playStatus(event:Object):void {
- //handles onPlayStatus complete event if available
- switch (event.info.code) {
- case "NetStream.Play.Complete":
- //do if video play completes
- videoPlayComplete();
- break;
- }
- //trace(event.info.code);
- }
- private function playFlv(event:MouseEvent):void {
- _ns.play(_videoURL);
- //_ns.seek(192); //used for testing
- removeChild(_start_btn);
- }
- private function pauseFlv(event:MouseEvent):void {
- _ns.pause();
- }
- /* ---------Buttons, labels, and other assets------------- */
- //could be placed in it's own VideoControler class
- private function addStartBtn():void {
- _start_btn = new Button();
- _start_btn.width = 80;
- _start_btn.x = (_vidXmax-_start_btn.width)/2+_video.x;
- _start_btn.y = (_vidYmax-_start_btn.height)/2+_video.y;
- _start_btn.label = "Start Video";
- _start_btn.addEventListener(MouseEvent.CLICK,playFlv);
- //addChild(_start_btn);
- }
- /* -----------------Information handlers---------------- */
- private function onMetaDataHandler(metaInfoObj:Object):void {
- _video.width = metaInfoObj.width;
- _vidWidth = metaInfoObj.width;
- _video.height = metaInfoObj.height;
- _vidHeight = metaInfoObj.height;
- //trace("metadata: duration=" + metaInfoObj.duration +
- //"width=" + metaInfoObj.width + " height=" +
- //metaInfoObj.height + " framerate=" +
- //metaInfoObj.framerate);
- }
- private function onCuePointHandler(cueInfoObj:Object):void {
- //trace("cuepoint: time=" + cueInfoObj.time + " name=" +
- //cueInfoObj.name + " type=" + cueInfoObj.type);
- }
- /* -----------------------Error handlers------------------------ */
- private function securityErrorHandler(event:SecurityErrorEvent):
- void {
- trace("securityErrorHandler: " + event);
- }
- private function asyncErrorHandler(event:AsyncErrorEvent):void {
- trace(event.text);
- }
- }
- }
热门文章推荐
- [HLS]做自己的m3u8点播系统使用HTTP Live Streaming(HLS技术)
- [FMS]FMS流媒体服务器配置与使用相关的介绍
- [AS3]什么是M3U8,与HTML5的区别是什么
- AS2.0 让flash自适应全屏,并且不自动缩放
- [AS3]as3.0的sound类常用技巧整理
- [AS3]as3与ByteArray详解、ByteArray介绍、ByteArray用法
- 关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE协议的介绍
- [JS]分享浏览器弹出窗口不被拦截JS示例
请稍候...