简单网络视频播放器(C#)

 

/******************网络视频播放器(C#)**********************************
 * Autor:wgscd
 * mail:wgscd@126.com  
 * http://www.lie78.com/
 *QQ:153964481
 *可以获取新浪视频,结合Flash播放FLV文件
 * 新浪视频可以用http://v.iask.com/v_play.php?vid=87987"形式获得一个XML文件“vid=”后面的就是一个标示ID
************************************************/
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Text.RegularExpressions;
using System.Threading;
using System.Xml;
using System.Collections;

namespace V_Show
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        /**********范型测试******
        void wgscd<T>(T x, T y)
        {
            MessageBox.Show(x.ToString());
        }
        wgscd<string>("fdghfghfgh","");
         *********/

        //******************用来屏蔽Flash右键**********************************
        private const int GWL_WNDPROC = -4;
        public delegate IntPtr FlaWndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);

        private IntPtr OldWndProc = IntPtr.Zero;
        private FlaWndProc Wpr = null;

        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern IntPtr SetWindowLong(IntPtr hWnd, int nIndex, FlaWndProc wndProc);
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern IntPtr CallWindowProc(IntPtr wndProc, IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);

        private IntPtr FlashWndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam)
        {
            if (msg == 516)
                return (IntPtr)0;
            return CallWindowProc(OldWndProc, hWnd, msg, wParam, lParam);
        }
        //******************************************************************

        //***********************用来获取网络连接情况***********************
        [DllImport("wininet.dll")]
        private extern static bool InternetGetConnectedState(out   int connectionDescription, int reservedValue);
        ///   <summary>  
        ///   Query   method   to   cause   provider   to   actively   detect   the   connection   state  
        ///   </summary>  
        ///   <returns>True   if   provider   believes   we   are   connected</returns>  
        public bool IsConnected()
        {
            int connectionDescription = 0;
           
            return InternetGetConnectedState(out   connectionDescription, 0);


        }
        //****************************************************************

        string ThumPicFoder = "ThumPic";
        ArrayList VideoInfo = new ArrayList();

        /*/最新上传: http://you.video.sina.com.cn/l/mr/1/0
        */
    void getPage(string strUrl)
    {

        WebRequest myWebClient = WebRequest.Create(strUrl);
        Stream myStream = myWebClient.GetResponse().GetResponseStream();
        StreamReader myReader = new StreamReader(myStream, Encoding.Default);
        string strResult = myReader.ReadToEnd();
        myStream.Close();

        myReader.Close();

        //MessageBox.Show(strResult);

        string pattner = "<li><img style=.*/></li>";


        Regex ex = new Regex(pattner);


        if (ex.Match(strResult).Success)
        {


            foreach (Match mc in ex.Matches(strResult))
            {
                int i1 = mc.Value.IndexOf("window.open('/b/") + 16;

                int i2 = mc.Value.IndexOf(".html')");
                string id = mc.Value.Substring(i1, i2 - i1);
                id = id.Substring(0, id.IndexOf("-"));//ID号
                string info = id;

                //MessageBox.Show(id);

                i1 = mc.Value.IndexOf("title=/"") + 7;
                i2 = mc.Value.IndexOf("/" οnclick=");
                id = mc.Value.Substring(i1, i2 - i1);//标题
                info += "|" + id;

                // MessageBox.Show(id);
                i1 = mc.Value.IndexOf("src=/"") + 5;
                i2 = mc.Value.IndexOf(".jpg/"  />") + 4;
                id = mc.Value.Substring(i1, i2 - i1);//图片地址
                info += "|" + id;
         // MessageBox.Show(info);

               VideoInfo.Add(info);

            }

 

        }
    }

 

    string getVideoUrl(string strID)
    {

        WebRequest myWebRequest = WebRequest.Create("http://v.iask.com/v_play.php?vid=" + strID);

        Stream myStream = myWebRequest.GetResponse().GetResponseStream();

        StreamReader myStreamReader = new StreamReader(myStream, Encoding.UTF8);

        string str = myStreamReader.ReadToEnd();

        myStreamReader.Close();
        myStream.Close();

        if ((str.IndexOf("<result>error</result>") > 0))
        {
            return "";

        }


        this.Text = str.IndexOf("<vname><![").ToString();
        // str.IndexOf("]]></vname>")
        int str1=str.IndexOf("<url><![CDATA[")+14;
        int str2=str.IndexOf("]]></url>");
        string strurl = str.Substring(str1, str2-str1);
       // MessageBox.Show(strurl);

        return strurl;

 

    }

 


        private void Form1_Load(object sender, EventArgs e)
        {
            //******************用来屏蔽Flash右键********************
            this.Wpr = new FlaWndProc(this.FlashWndProc);
            this.OldWndProc = SetWindowLong(Flash.Handle, GWL_WNDPROC, Wpr);
            //*****************************************************
           
            if (IsConnected() == false) { //判断网络连接 
                return;
                  }
            PicBox_thumb.Visible = false;
          //   getVideoUrl("87987");//测试获取视频URL

      getOnePage("http://you.video.sina.com.cn/l/mr/1/0");//得到一页
       Flash.Movie = "d://我的文档//桌面//~Flv.swf";//flash加载进来

        }


        void getOnePage(string PageURL) {

            VideoInfo.Clear();
            getPage(PageURL);
            //动态创建控件
            for (int i = 0; i < VideoInfo.Count; i++)
            {
                Label lb = new Label();
                lb.Size = new Size(190, 22);
                panelItem.Controls.Add(lb);

                lb.Location = new Point(12, (2 + 22) * i);
                lb.Tag = VideoInfo[i];

                lb.Text = lb.Tag.ToString().Split('|')[1].ToString();
                lb.BackColor = Color.Blue;
                lb.TextAlign = ContentAlignment.MiddleCenter;

                lb.Click += new EventHandler(lb_Click);
                // PicBox_thumb
                lb.MouseEnter += new EventHandler(lb_MouseEnter);

                lb.MouseLeave += new EventHandler(lb_MouseLeave);
            }
            //新建一线程下载缩略图
            Thread thDownPic = new Thread(new ThreadStart(dpic));
            thDownPic.Start();
       
       
       
       
        }


        void dpic() {//根据图片数下载之


            for (int i = 0; i < VideoInfo.Count; i++)
            {
               downLoadPics(VideoInfo[i].ToString().Split('|')[2].ToString());

            }
       
        }
        void downLoadPics(string strUrl)//下载缩略图函数
        {

            WebClient myWebClient = new WebClient();
            if (Directory.Exists(ThumPicFoder) == false)
            {

                Directory.CreateDirectory(ThumPicFoder);

            }

            if (File.Exists( ThumPicFoder +"//"+ strUrl.Substring(strUrl.LastIndexOf("/"), strUrl.Length - strUrl.LastIndexOf("/")))){//如果已经存在返回
                return;}
            myWebClient.DownloadFile(strUrl, ThumPicFoder +"//"+ strUrl.Substring(strUrl.LastIndexOf("/"), strUrl.Length - strUrl.LastIndexOf("/")));


        }


        private void lb_Click(object sender, EventArgs e)//单击一项就获取视频URL并发送到FLASH通知播放
        {
            string FlvURL=getVideoUrl(((Label)sender).Tag.ToString().Split('|')[0].ToString());

           // MessageBox.Show(FlvURL );
            Flash.SetVariable("flvURL", FlvURL);//程序向Flash传递信息

        }

        private void lb_MouseEnter(object sender, EventArgs e)//鼠标移动到缩略图控件上就显示缩略图
        {
            string str=((Label)sender).Tag.ToString().Split('|')[2].ToString();

            int str1 = ((Label)sender).Tag.ToString().Split('|')[2].ToString().LastIndexOf("/")+1;

            string LocalPicFullPath = ThumPicFoder+"//"+str.Substring(str1, str.Length - str1);

            //MessageBox.Show(LocalPicFullPath);
           PicBox_thumb.Image = Image.FromFile(LocalPicFullPath);
           PicBox_thumb.Visible = true;


        }
        private void lb_MouseLeave(object sender, EventArgs e)//鼠标移开设置缩略图控件不可见
        {
            PicBox_thumb.Visible = false;
        }

        private void Flash_FSCommand(object sender, AxShockwaveFlashObjects._IShockwaveFlashEvents_FSCommandEvent e)//flash向程序发送信息
        {
            //MessageBox.Show(e.args);  //在flash里可以用fscommand("wgacd命令","参数")形式测试!

        }

        private void PageNext_Click(object sender, EventArgs e)
        {
            getNextPage();

        }

        void getNextPage() {

            getOnePage("");

            //..
             //...
              // ...
              // ...


       
        }

     


    }
}

部分功能暂时写到这里

修改后:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值