我使用了下面的代码(从网站上读取视频并在面板上播放),但是这个视频存储在我的电脑上。
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文件,我可以再次查看视频。
每当我需要运行此程序时,它应该从我的网站上读取而不是从临时文件中读取。我怎样才能做到这一点?
答案 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),您应该能够将捕获的事件过滤到您的应用程序,并且您将看到许多文件活动。