C#畅谈“网络电视”

C#畅谈“网络电视”

以上是大家比较喜欢的网络电视软件,例如:PPTV,BOX央视影音,PPS等。

今天我就和大家来聊一下简单的“网络电视”。虽然和上边的软件没发比,但是正在向着这个目标努力中……

一开始我在做这个项目的时候思路很茫然,就像地上的一团线团一样。

我需要用到哪些方法?需要建几个类?

拿到一个项目的时候首先要分析我想大家都知道

主界面如下:

既然是网络电视,那么肯定有很多的频道供用户去选择。所以肯定有频道类,要定义一个频道的基类(ChannelBase),让所有频道类继承这个基类,提高抽象程度会更方便一些。

频道管理类(ChannelManager)也是必不可少的,要不怎么去管理那么多的频道呢!

选择频道,频道下面就会有节目,节目类也随之而来。

这里我定义了两个频道类(TypeAChannel类,TypeBChannel类),关系如下:

1 public class TypeAChannel:ChannelBase
1 public class TypeBChannel:ChannelBase

频道基类(ChannelBase)代码如下:

 1 //频道基类
 2     public abstract class ChannelBase
 3     {
 4         //频道名称
 5         public string ChannelName { get; set; }
 6         //频道路径
 7         public string Path { get; set; }
 8         //节目列表,该频道上的所有节目列表
 9         public List<TvProgram> TvList { get; set; }
10         //获取频道列表:通过Fetch方法获取该频道拥有的所有节目列表
11         public abstract void Fetch();
12         //频道类型
13         public string Type { get; set; }
14     }

节目类(TvProgram)代码如下:

 1 //节目类
 2     public class TvProgram
 3     {
 4         //播出时间
 5         public DateTime PlayTime { get; set; }
 6         //早间档,午间档,晚间档
 7         public string Shiduan { get; set; }
 8         //节目名称
 9         public string ProgramName { get; set; }
10         //视频路径
11         public string Path { get; set; }
12     }

接下来可以着手绑定treeView了。

首先先添加根节点:

 1         private void LoadRootNode()
 2         {
 3             TreeNode mineNode = new TreeNode();
 4             mineNode.Text = "我的电视台";
 5
 6             allNode.Text = "所有电视台";
 7
 8             treeView1.Nodes.Add(mineNode);
 9             treeView1.Nodes.Add(allNode);
10         }

treeView里代码如下:

 1 private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
 2         {
 3             TreeNode selectNode = treeView1.SelectedNode;
 4             if (selectNode.Level==1 && selectNode.Parent.Text=="所有电视台")
 5             {
 6                 ChannelBase channel = (ChannelBase)selectNode.Tag;
 7                 channel.Fetch();
 8
 9                 List<TvProgram> ProList = channel.TvList;
10                 dataGridView1.DataSource = ProList;
11             }
12         }

接下来把LoadRootNode()方法在Load中调用一下:

 1 private void Form1_Load(object sender, EventArgs e)
 2         {
 3             LoadRootNode();
 4             ChannelManager manager = new ChannelManager();
 5             manager.PareseXML();
 6             Dictionary<string,ChannelBase> dic=manager.FullChannel;
 7             foreach (var channel in dic.Values)
 8             {
 9                 TreeNode tn = new TreeNode();
10                 tn.Text = channel.ChannelName;
11                 tn.Tag = channel;
12                 allNode.Nodes.Add(tn);
13             }
14         }

到这里treeView已经绑定完成了,那么我上边是不是犯了一个小错误呢?会导致什么后果?

没错,相信大家都猜到了,我在调用Fetch()方法之前,节目列表没有清除,可以用下面的方法:

1                 if (channel.TvList != null)
2                 {
3                     channel.TvList.Clear();
4                 }

正确的代码如下:

 1 private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
 2         {
 3             TreeNode selectNode = treeView1.SelectedNode;
 4             if (selectNode.Level==1 && selectNode.Parent.Text=="所有电视台")
 5             {
 6                 ChannelBase channel = (ChannelBase)selectNode.Tag;
 7                 if (channel.TvList != null)
 8                 {
 9                     channel.TvList.Clear();
10                 }
11                 channel.Fetch();
12
13                 List<TvProgram> ProList = channel.TvList;
14                 dataGridView1.DataSource = ProList;
15             }
16         }

频道管理类:

 1 //频道管理类
 2     public class ChannelManager
 3     {
 4         public ChannelManager()
 5         {
 6             fullChannel = new Dictionary<string, ChannelBase>();
 7         }
 8
 9         private Dictionary<string, ChannelBase> fullChannel = new Dictionary<string, ChannelBase>();
10         public Dictionary<string, ChannelBase> FullChannel
11         {
12             get { return fullChannel; }
13             set { fullChannel = value; }
14         }
15         public void PareseXML()
16         {
17             XmlDocument doc = new XmlDocument();
18             doc.Load("FullChannels.xml");
19             XmlNode root = doc.DocumentElement;
20             foreach (XmlNode node in root.ChildNodes)
21             {
22                 string type = node["channelType"].InnerText;
23                 ChannelBase channel = ChannelFactory.CreatChannel(type);
24                 channel.ChannelName = node["tvChannel"].InnerText;
25                 channel.Path = node["path"].InnerText;
26                 channel.Type = type;
27
28                 fullChannel.Add(channel.ChannelName,channel);
29             }
30         }
31     }

这里列举一个频道TypeAChannel类:

 1 //A频道类
 2     public class TypeAChannel:ChannelBase
 3     {
 4         //多态,覆盖父类的获取频道列表方法
 5         public override void Fetch()
 6         {
 7             XmlDocument doc = new XmlDocument();
 8             doc.Load("北京电视台.xml");
 9             if (TvList == null)
10             {
11                 TvList = new List<TvProgram>();
12             }
13             //获取根节点
14             XmlNode root = doc.DocumentElement;
15             foreach (XmlNode item in root.ChildNodes)
16             {
17                 if (item.Name == "tvProgramTable")
18                 {
19                     foreach (XmlNode child in item.ChildNodes)
20                     {
21                         //一个item就是一个tvProgram节点
22                         TvProgram program = new TvProgram();
23                         program.PlayTime = Convert.ToDateTime(child["playTime"].InnerText);
24                         program.Shiduan = child["meridien"].InnerText;
25                         program.ProgramName = child["programName"].InnerText;
26                         program.Path = child["path"].InnerText;
27                         TvList.Add(program);
28                     }
29                 }
30             }
31         }
32     }

频道TypeBChannel类和TypeAChannel类一样。

至此基本功能已经完成,那么接下来大家也可以接着制作如下功能:

右键我的电视台下的频道会只有删除选项,右键所有电视台会只有加入我的电台选项。

那么还有提醒功能,就是用户可以设一个时间点,到时间了会提醒用户去收看,有兴趣的可以研究一下。

时间: 2024-10-18 09:51:38

C#畅谈“网络电视”的相关文章

网络电视精灵~分析~~~~~~简单工厂模式,继承和多态,解析XML文档

小总结: 所用技术: 01.C/S架构,数据存储在XML文件中 02.简单工厂模式 03.继承和多态 04.解析XML文档技术 05.深入剖析内存中数据的走向 06.TreeView控件的使用 核心:通过该项目,我们对业务流程有一个整体把控.对继承和多态有深入的了解 下面是类图: 主界面图: 核心思路: 1   1.首先在频道管理类ChannelManager中写一个加载所有频道方法LoadAllChannel; 2   3        该方法作用读取FullChannels.xml文件,并且

ubuntu ipv6网络电视(avplay)

首先在ubuntu下安装好ipv6 (话说是已经装好了的,不过最好检查以下) 网上有很多资源,我不写了. 测试一下 :ping ipv6.scau.edu.cn 另外,关于ipv6 网络播放器很多人推荐的是mplayer vlc 这里我再介绍一个更简便的播放器avplay(其实还不是播放器.只是个流视频处理架构) 采用的处理模式也不是mms 而是rtsp. 我就说一个没那么普遍的方法去看ipv6电视 方法: 再终端输入: $avplay rtsp://tv6.ustc.edu.cn/tv5 如果

单例模式的应用___网络电视精灵

网络电视精灵 首先创建几个基本类 编写节目类 属性:播出时间.时段.名称.视频路径 编写频道基类 属性:频道名称.频道节目单位置.节目列表 抽象方法:Fetch() 编写频道子类 继承“频道基类”,实现Fetch()[只写方法声明] 编写频道工厂类 方法:实现创建频道子类 private void tsmAddToFavor_Click(object sender, EventArgs e) { //如何将电台从所有电台加载到我的电台 TreeNode tn = tvChannel.Select

OTT网络电视直播APP运营平台-如何保证视频的流畅性

很多单位需要搭建自己的网络电视平台,用于宣传自身的文化内容.比如,在教育方面可以建设自身的网络电视教学平台:在企事业单位可以用于员工的培训和企业文化宣传:在公众场所可以用于广播各种多媒体信息:在娱乐方面可以用于播放各种娱乐文化节目和电视节目等. 对于娱乐方面,更多的是播放电视频道直播节目,通过各种播放端观看如PC,手机,平板电脑等. 不可否认的观看群越来越多地向手机移动端和OTT/IPTV APK小盒子电视终端倾斜. 想做IPTV/OTT电视频道直播的运营商趋之若鹜,不过想要做好网络电视直播系统

有对OTT架设 很了解的吗?很想自己经营网络电视

网友问题:有对OTT架设 很了解的吗?很想自己经营网络电视. 应该是卫星信号然后转数字信号通过网络传输吧.传输这块估计常用P2P技术来实现.卫星电视不是太懂,国内开锅是违法的.就不研究了.也不是主要的瓶颈. 我想实现一些功能如下:1.专门做日本频道(市面的iptv最多也就40-50个台.不全),从免费到收费,大大小小200多个台,我很想做全.2.尽可能从4K<FHD<HD进行覆盖.3.节目单预告及回滚.方便回放查询.4.免去采集卡,实时转录.可编辑(cutting),可预约,可实现自动去除CM

网络电视精灵(新手练习,如果有不好的地方,请各位多多指导指导小弟。)

电视精灵效果展示: 1.电视台和节目信息从xml文件中解析并绑定: 2.实现点击频道节点时显示有关该频道的节目信息: 好了,废话不多说.大家请看效果演示,如有不好之处,请多多指教一下,毕竟我还是个新手. 01.第一张效果图. 02.第二张效果图. 03.第三张效果图. 04.第四张效果图北京电视台,然而截屏软件不行效果不太好. 05.第五张效果图,然而截屏软件不行效果不太好. 好了,效果图放完了,下面我们来看看代码吧.你们是不是很期待? 1.频道类: namespace Day08网络电视精灵

初识XML及简单工厂运用--网络电视精灵

网络电视精灵 任务描述 1. 解析XML文件中的数据 三个简单的xml文件; <?xml version="1.0" encoding="utf-8" ?> <TVChannele> <Channel> <channelType>TypeA</channelType> <tvChannel>北京电视台</tvChannel> <path>files/北京电视台.xml&l

见见面、聊聊天 - 5月22日晚7点Meetup,三里屯绿树旁酒吧,畅谈云技术和应用

总是邮件.QQ什么的线上聊,让我们见面吧,不怕见光死,呵呵. 我和同事会先抛砖引玉,给大家介绍一下Autodesk几款最新的云技术和解决方案,然后大家就可畅所欲言,自由交流.来自五湖四海的人,为了同一个目的(云技术)齐聚绿树旁咖啡馆,畅谈技术,畅想未来,技术切磋,生意探讨,寻找合作伙伴,等等,来吧,等你哦~ 时间:2014年05月22日19:00 - 21:00 地点:北京市朝阳区三里屯南33号绿树旁咖啡馆二楼 可以享用一杯免费的咖啡或饮料,你也可以随己意思在咖啡馆消费. 到这里注册 参加会议吧

助力网络电视800Li提供完整OTT解决方案

苏州八百里网络科技有限公司是一家提供流媒体系统OTT-TV网络电视一体化解决方案的科技公司,主要提供直播.点播.P2P加速,并提供跨平台多终端的流媒体的多屏融合.OTT-TV也就是我们更加了解的IPTV的整套解决方案包括采集.编码.流媒体发布.传输.安卓机顶盒和播放. 此方案的最大技术特点是:H.265 4K 超高清画质传输.先进优化的协议机制解决跨国传输瓶颈.P2P节省大量服务器带宽.秒换台.防盗链和防下载. 800Li OTT-TV应用后台管理界面 OTT时移功能演示 什么是网络电视: IP