论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Flash AS教程
Tag:2.0,3.0菜鸟,游戏,,cs,技巧,源码,,文本,文字,函数,音乐,随机,拖拽,asp,access,xml,mc,视频教程

制作FLV播放器源码教程

文章类别:Flash AS | 发表日期:2010-4-25 9:21:28

Flash AS_制作FLV播放器源码教程  

学了半年的FLASH做了个FLV播放器,自己感觉还说的过去,希望拿来与大家分享。另外也希望大家能给我提些宝贵的意见
废话不说了,开始制作吧:
首先建3个层,从上到下分别是:AS层,屏幕层,控制元件层。
1:新建视频放在屏幕层,命名实例名称为“my_video”.
2:建控制按钮,放在控制元件层
  分别是 播放按钮(实例名称为“btn_play”)上一首(实例名称为“btn_prev”)下一首(实例名称为“btn_next”)
         音量控制包括  静音开关(实例名称为“btn_vol”)音量滑块(实例名称为“vol_mc”)
  其他控制元件后面写AS代码时再具体说明,以上元件根据个人喜好制作,这里就不多说了。
3:该在AS层写代码了:
//声明
var p:Number = 0;
var total_num:Number = 0;
var title_array:Array = new Array();
var path_array:Array = new Array();
var uid_array:Array = new Array();
//解析XML
var my_xml:XML = new XML();
my_xml.ignoreWhite = true;
my_xml.load("laoge.xml");
my_xml.onLoad = function(success) {
    if (success) {
        for (var d:Number = 0; d<this.firstChild.childNodes.length; d++) {
            title_array.push(this.firstChild.childNodes[d].attributes.title);
            path_array.push(this.firstChild.childNodes[d].attributes.path);
            uid_array.push(this.firstChild.childNodes[d].attributes.uid);
        }
        //获取总曲目数
        total_num = this.firstChild.childNodes.length;
        //trace("total_num is :"+total_num);
        play_func();
    } else {
        trace("加载出错!");
    }
};
//首先视频初始化
var nc:NetConnection = new NetConnection();
nc.connect(null);
var ns:NetStream = new NetStream(nc);
my_video.smoothing = true;
my_video.attachVideo(ns);
ns.setBufferTime(1);
//然后获取各种所需信息
var flv_dur:Number = 0;
ns.onMetaData = function(infoObject:Object) {
    flv_dur = infoObject.duration;
    time();
};
function time() {
    onEnterFrame = function () {
        //音量信息
        var vol:Number = _root.mc.vol_mc._x-350;
        my_sound.setVolume(Math.floor(vol*2.5));
        _root.mc.volume_txt.text = (Math.floor(vol*2.5));
        //这里的volume_txt是显示音量大小的数值,可以在音量滑块附近建个动态文本实例名 称为“volume_txt”
        //时间信息
        var ns_seconds:Number = ns.time;
        var minutes = Math.floor(ns_seconds/60);
        var seconds = Math.floor(ns_seconds%60);
        var total_min = Math.floor(flv_dur/60);
        var total_sec = Math.floor(flv_dur%60);
        //让时间显示格式为"00:00"
        minutes<10 ? (minutes="0"+minutes) : NULL;
        seconds<10 ? (seconds="0"+seconds) : NULL;
        total_min<10 ? (total_min="0"+total_min) : NULL;
        total_sec<10 ? (total_sec="0"+total_sec) : NULL;
        //显示时间信息  这里要建2个显示时间的动态文本,实例名称分别为:当前播放时间videotime_left 总播放时间
videotime_right
        _root.mc.videotime_left.text = minutes+":"+seconds;
        _root.mc.videotime_right.text = total_min+":"+total_sec;
        //因播放器支持全屏播放,以下代码为按ESC退出全屏
        if (Key.isDown(Key.ESCAPE)) {
            my_video._x = 10;
            my_video._y = 20;
            my_video._width = 400;
            my_video._height = 300;
        }
    };
}
//播放进度条及加载百分比显示 建进度滑块实例名称为my_mc百分比显示的动态文本实例名称为yjz
function videoStatus() {
    var videoTotal:Number = ns.bytesTotal;
    var videoLoaded:Number = ns.bytesLoaded;
    percent_Loaded = videoLoaded/videoTotal*100;
    _root.mc.yjz.text = "已加载"+int(percent_Loaded)+"%";
    _root.mc.my_mc._x = int(ns.time/flv_dur*395);
    //395这个数值根据你滑动范围具体调整
}
//播放函数
function play_func() {
    ns.stop();
    //trace(uid_array[p]);
    ns.play(path_array[p]);
    //trace("The flv path is:"+path_array[p]);
    //trace(p);
    _root.mc.how_txt.text = title_array[p];
    _root.mc.num_txt.text = uid_array[p]+" / "+total_num;
}
//连续播放
ns.onStatus = function(infoObject) {
    if (infoObject.code == "NetStream.Play.Stop") {
        //trace("播放完成");
        if (p<total_num-1) {
            p++;
        } else {
            P = 0;
        }
        play_func();
    }
};
//音量控制区
this.createEmptyMovieClip("flv_audio", this.getNextHighestDepth());
flv_audio.attachAudio(ns);
var my_sound:Sound = new Sound(flv_audio);
_root.mc.vol_mc.onPress = function() {
    this.startDrag(false, 350, 31.2, 390, 31.2);
};
_root.mc.vol_mc.onRelease = _root.mc.vol_mc.onReleaseOutside=function () {
    stopDrag();
};
//按钮功能区
//播放按钮
_root.mc.btn_play.onRelease = function() {
    this.id = !this.id;
    this.id ? (ns.pause(true)) and (how_txt.text="已暂停") : (ns.pause(false)) and (how_txt.text="正在播放");
};
//下一首.这里要判断当前播放曲目"p"与总曲目数的关系
_root.mc.btn_next.onRelease = function() {
    if (p<total_num-1) {
        p++;
    } else if (p=total_num-1) {
        Null;
    } else {
        Null;
    }
    play_func();
};
//上一首.判断当前播放曲目"p"是否是第一首.
_root.mc.btn_prev.onRelease = function() {
    p != 0 ? p-- : null;
    play_func();
};
4:打开记事本编写以下代码:保存为list.xml文件放在同一文件夹里
<?xml version="1.0" encoding="UTF-8"?>
<flv>
<vid="1" title="爆!被央视《走近科学》删除的神秘视频" path="http://madrid.6rooms.com/h/2c/dc/0c91662336766.flv" uid="1"/>
<vid="2" title="赵本山徒弟的爆笑演讲" path="http://barcelona.6rooms.com/27/c0/caf21469240428.flv" uid="2"/>
<vid="3" title="小沈阳" path="http://barcelona.6rooms.com/e7/9b/37171049245226.flv" uid="3"/>
<vid="4" title="史上最强情人节之《天生绝
配"path="http://music4.tool.hexun.com/Save/Video/2008/0305/1581/M_14A59BA568F5C383.FLV" uid="4"/>
<vid="5" title="小沈阳" path="http://barcelona.6rooms.com/e7/9b/37171049245226.flv" uid="5"/>
</flv>
5:制作个全屏按钮放在合适位置,按钮上写以下代码
on (release) {
    if (Stage["displayState"] == "normal") {
        Stage["displayState"] = "fullScreen";
        _root.my_video._x = -_root.cc._x-10;
        _root.my_video._y = -_root.cc._y-20;
        _root.my_video._width = 1024;
        _root.my_video._height = 788;
    } else {
        Stage["displayState"] = "normal";
        _root.my_video._x = _root.cc._x-477.1;
        _root.my_video._y = _root.cc._y-54.2;
        _root.my_video._width = 400;
        _root.my_video._height = 300;
    }
}

视频教程列表
文章教程搜索
 
Flash AS推荐教程
Flash AS热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058