随着网络信息的飞速增长,人们已不再局限于使用收音机、电视机等来收听或收看音乐和电视节目,一些支持多种格式的音频、视频媒体播放器逐渐流行起来,为了使读者更多地了解在线播放原理,本节通过几个实例进行详细说明。
实例310 在线点播
实例说明
在一般音乐网站中,都提供在线欣赏的功能,把多个歌曲放在播放列表中连续播放,这样方便了访问者收听音乐。本实例是一个在线点播的程序,访问者可以根据歌曲名称或歌手名字的关键字查询想听的歌曲,在每一栏中的复选框中,选中要听歌曲对应的复选框,然后单击【播放文件】按钮,选中的文件就会在弹出的播放器中轮流播放,本实例运行结果如图13.23所示。
|
图13.23 在线点播 |
技术要点
在线点播是指客户端利用播放器播放服务器端的音乐文件,其原理是客户端服务器提交音乐选单后,服务器端生成.m3u文件,生成.m3u文件的代码如下:
StreamWriter srd = new StreamWriter(Server. MapPath("Video/list.m3u"),true, System.Text. Encoding.GetEncoding("gb2312")); |
注意:使用GB2312编码格式,可以防止在播放音乐文件中汉字乱码的产生。
客户端选择完需要播放的影片名称,单击【播放】按钮,将影片名称写入到.m3u文件中,代码如下:
srd.Write("http://" + Request.ServerVariables["LOCAL_ADDR"] + "/Video/" + baseclass.filmName("select FilmPath from tb_22 where id=" + ((Label)dlList.Items[i].FindControl ("labID")).Text) + "\n\r"); |
服务器端生成.m3u文件后,将该文件通过HTTP协议下载到客户端;客户端将被激发,且调用相应的播放器执行文件实现在线点播。支持.m3u的文件播放器有Winamp、RealPlayer、Musucmath等。实例中播放影片时,是通过链接文件的网络路径完成的。
实现过程
(1)新建一个网站,将其命名为Ex13_23,默认主页名为Default.aspx。
(2)Default.aspx页的控件及用途如表13.7所示。
表13.7 Default.aspx页面控件列表
控 件 类 型 |
控 件 名 称 |
用 途 |
HTML/Table |
table |
页面布局 |
标准/Button |
btnPlay |
播放文件 |
btnFirst |
转到DataList控件的首页 |
btnUp |
转到DataList控件当前页的上一页 |
btnNext |
转到DataList控件当前页的下一页 |
btnLast |
转到DataList控件的尾页 |
续表
控 件 类 型 |
控 件 名 称 |
用 途 |
标准/Label |
labCurrently |
显示DataList当前页页码 |
labTotel |
显示DataList总共页码 |
标准/DataList |
dlList |
显示影片信息 |
为了使数据能够显示,在DataList内部拖放下列控件来布局,控件类型、名称及用途如表13.8所示。
表13.8 DataList内部控件布局列表
控 件 类 型 |
控 件 名 称 |
用 途 |
HTML/Table |
table |
布局DataList |
标准/CheckBox |
CheckBox1 |
选中当前选项 |
标准/DataList |
labID |
显示影片在数据库中ID号 |
labFilmName |
显示影片名称 |
(3)为了在DataList控件中显示数据库中的数据,需要将DataList控件在前台中进行代码绑定,由于绑定控件的格式相同,这里就以绑定“影片名称”为例,代码如下:
<asp:Label ID="labFilmName" runat="server" Text=<%#DataBinder. Eval(Container.DataItem,"FilmName") %>></asp:Label>
| 为了在DataList控件中显示指定的数据,需要在后台代码中编写一个自定义方法dlBind( ),完成DataList控件的分页功能。dlBind( )方法主要代码如下:
public void dlBind( ) { int curpage = Convert.ToInt32(this.labCurrently.Text); PagedDataSource ps = new PagedDataSource( ); ps.DataSource = baseclass.SqlDs("select * from tb_22", "tb_22").Tables["tb_22"].DefaultView; ps.AllowPaging = true; //是否可以分页 ps.PageSize = 6; //显示的数量 ps.CurrentPageDefault = curpage - 1; //取得当前页的页码 this.btnUp.Enabled = true; this.btnNext.Enabled = true; this.btnFirst.Enabled = true; this.btnLast.Enabled = true; if (curpage == 1) { this.btnFirst.Enabled = false;//不显示第一页按钮 this.btnUp.Enabled = false;//不显示上一页按钮 } if (curpage == ps.PageCount) { this.btnNext.Enabled = false;//不显示下一页 this.btnLast.Enabled = false;//不显示最后一页 } this.labTotel.Text=Convert.ToString(ps.PageCount); this.dlList.DataSource = ps; this.dlList.DataBind( ); } | 在单击【播放文件】按钮时,客户端需要将.m3u文件下载到本地机器中,以进行列表播放,完成该功能的主要代码如下:
protected void btnPlay_Click(object sender, EventArgs e) { StreamWriter srd = new StreamWriter(Server.MapPath ("Video/list.m3u"),false, System.Text.Encoding.GetEncoding("gb2312")); for (int i = 0; i < dlList.Items.Count; i++) { if (((CheckBox)dlList.Items[i].FindControl ("CheckBox1")).Checked == true) { srd.Write("http://" + Request.ServerVariables ["LOCAL_ADDR"] + "/Video/" + baseclass.filmName("select Film Path from tb_22 where id=" + ((Label)dlList.Items[i]. FindControl("labID")).Text) + "\n\r"); } } srd.Close( ); Response.Redirect("Video/list.m3u"); }
|
举一反三
根据本实例,读者可以:
实现手机铃声在线下载;
实现彩铃在线点播。
|