/******************网络视频播放器(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("");
//..
//...
// ...
// ...
}
}
}
部分功能暂时写到这里
修改后: