如何确保从网站播放视频,而不是缓存版本

时间:2011-07-13 07:46:23

标签: c#

我使用了下面的代码(从网站上读取视频并在面板上播放),但是这个视频存储在我的电脑上。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.DirectX.AudioVideoPlayback;
namespace webplayer
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                int width = panel1.Width;
                int height = panel1.Height;
              System.Uri u = new Uri("http://cassfordinfo.com/Testmovie.avi");                Video video;
              video = Video.FromUrl(u);

                video.Owner = panel1;
                video.Stop();
                video.Play();

                // resize the video to the size original size of the panel

                panel1.Size = new Size(width, height);
            }catch(Exception gh)
            {
                MessageBox.Show(gh.ToString());
            }
        }

    }
}

一旦我运行exe,它将从网站上读取,但我已拔掉互联网连接并运行它。它在没有连接的情况下运行相同的视频。我已重新启动计算机,如果我运行exe文件,我可以再次查看视频。

每当我需要运行此程序时,它应该从我的网站上读取而不是从临时文件中读取。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

我相信你想看看媒体流。这可以通过多种方式完成 - 有些人会建议使用silverlight,但据我所知,可以通过使用Windows Media Services的asp.Net来完成。

也可以通过不同的方式从其他项目类型中完成,但看起来你需要ASP.Net吗?

答案 1 :(得分:0)

虽然我已经投票结束了(今天我也有点脾气暴躁),但这仍然是我的两分钱:

我假设您正在使用DirectX中的Video Class,因此第一个问题必须是您是否可以控制缓存。

根据API判断你不能 - 你只需要传递一个Uri,就是这样。

因此我有几个问题:

  • 您是否尝试过在最后一次播放之间播放的视频?应用程序是否正确使用新版本而不是旧的缓存版本?如果确实如此,那么当用户的网络连接良好时,可能没有问题。

  • 为什么必须始终播放最新版本?实际上是因为如果'网络连接断开,你想确保用户没有看到视频吗?如果是这种情况,请尝试使用HttpWebRequest手动向视频网址发出HTTP HEAD请求,或者(因为Web服务器并不总是支持HEAD)这是一个ping着名的ping友好域名的老技巧,或者,更好的是,在您自己的网站上发送网页请求 - 如果网络连接中断,您甚至不尝试播放视频。

最后,我猜你是在文件之后,所以你可以尝试删除它。我的猜测是,这几乎不可能在运行时跟踪 - 文件可能甚至没有.avi扩展名,并且很可能是随机的。

然而,一次运行找到它的最好方法是使用Process Monitor监控您的计算机上的文件活动,同时您的应用连接到视频并播放几秒钟。假设应用程序直接访问该文件(而不是间接通过某些服务或其他Dx shell的exe),您应该能够将捕获的事件过滤到您的应用程序,并且您将看到许多文件活动。