我想将.flv文件存储在数据库中而不是文件系统中。
这就是我现在可以执行的操作: 使用ffmpeg成功将.wmv和.mpeg转换为.flv。 将图像存储在SQL Server中,并使用httphandler在我的页面上显示它们。 与.avi和.mpeg视频相同。(如果用户可以查看,则取决于用户的软件) 如果文件位于文件系统而不是数据库中,则在浏览器中播放.flv文件。
我不能做的是: 直接从数据库将.flv视频流传输到JW Player。(存储为二进制数据)
我已经在互联网上搜索了两天,但无法正常工作。感觉好像我快到了。JW Player打开并开始“缓冲”,但是什么也没有发生。
我知道没有简单的答案,但是如果有人以前做过类似的事情,我想知道您的做法。我觉得我有太多代码无法将其全部发布到此处。
提前致谢!
我可以使用它,但是我不知道它的效率如何。就连接,效率,负载等方面而言,从文件系统中进行流式传输是否比从数据库中进行流式传输好。我可以在此使用一些指针!
我在这里使用JW Player,因此使用了“ swfobject.js”和“ player.swf”
httpHandler:
public class ViewFilm : IHttpHandler { public void ProcessRequest(HttpContext context) { try { // Check if id was given if (context.Request.QueryString["id"] != null) { string movId = context.Request.QueryString["id"]; // Connect to DB and get the item id using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString)) using (SqlCommand cmd = new SqlCommand("GetItem", con)) { cmd.CommandType = CommandType.StoredProcedure; SqlParameter sqlParam = cmd.Parameters.Add("@itemId", SqlDbType.Int); sqlParam.Value = movId; con.Open(); using (SqlDataReader dr = cmd.ExecuteReader()) { if (dr.HasRows) { dr.Read(); // Add HTTP header stuff: cache, content type and length context.Response.Cache.SetCacheability(HttpCacheability.Public); context.Response.Cache.SetLastModified(DateTime.Now); context.Response.AppendHeader("Content-Type", "video/x-flv"); context.Response.AppendHeader("Content-Length", ((byte[])dr["data"]).Length.ToString()); context.Response.BinaryWrite((byte[])dr["data"]); } } } } } catch (Exception ex) { throw new Exception(ex.ToString()); } } public bool IsReusable { get { return false; } } }
javascript 该功能可以向播放器添加播放器,<div id="video1">例如,当用户单击按钮时可以调用播放器。
<div id="video1">
<script type='text/javascript' src='swfobject.js'></script> <script type="text/javascript" language="javascript"> function vid() { var s1 = new SWFObject('player.swf', 'player1', '480', '270', '9'); s1.addParam('allowfullscreen', 'true'); s1.addParam('allowscriptaccess', 'always'); s1.addVariable('file', encodeURIComponent('ViewFilm.ashx?id=10')); s1.addVariable('type', 'video'); s1.write(document.getElementById("video1")); } </script>