【问题标题】:Save video stream into the database's table将视频流保存到数据库的表中
【发布时间】:2011-09-03 16:09:30
【问题描述】:

我想将流视频保存到我的数据库中,我想知道 SQL-Server 中的哪种数据类型适合保存视频流?

编辑:请注意,我使用 EF4 作为我的项目 ORM。

任何建议都是优雅的。

谢谢。

【问题讨论】:

  • 出于什么特殊原因要将视频本身保存在数据库中,而不仅仅是指向它的指针(例如文件名)?
  • 它不是一个网络应用程序,原因是我不希望用户可以直接访问文件。这就是我想将它们存储在数据库中的原因。
  • 如果您不希望您的用户能够看到该文件,只播放它,您将不得不使用 ISequentialStream 并创建自己的播放器。 EF 对此无济于事...我建议将其存储为文件,以免以后出现很多头痛(如果事实上,您将用另一种头痛替换一个头痛,可能更小)。

标签: c# sql-server sql-server-2005 sqldatatypes


【解决方案1】:

对于存储 BLOB(例如视频数据),您可以在 SQL Server 2005 中使用实体框架支持的 varbinary(MAX) 数据类型。

请记住,每当您加载包含此列的实体时,EF 都会尝试将您的完整视频完全加载到内存中,EF 中没有字节流模式 - 这意味着这不仅不能很好地扩展,而且还有多个用户由于内存要求,变得不可行,并且性能很差。不要这样做 - 我会努力寻找更好的替代品。

【讨论】:

  • @s.amani:基本上没有什么可以做的,因为这是一个桌面应用程序——不管你喜欢与否,用户已经可以访问你的视频了。您唯一能做的就是让它变得更难一些,即您可以在流式传输时加密视频和解密,或者仅将视频头存储在单独的位置,并在运行时将它们与视频的其余部分结合起来。根据视频文件格式,这可能可行,也可能不可行。
  • 您提出了一个绝妙的技巧,分离其数据是个好主意。
【解决方案2】:

我们可以假设视频基本上是一个文件,您可以使用FILESTREAM SQL 2008 数据类型。

应该有很多例子,我发现了这个:

http://weblogs.asp.net/aghausman/archive/2009/03/16/saving-and-retrieving-file-using-filestream-sql-server-2008.aspx

【讨论】:

  • 感谢您的回复,但我使用的是 SQL-Server 2005。
【解决方案3】:

Download and Upload images from SQL Server via ASP.Net MVC。本文展示了如何为大型 BLOB 使用流式语义(避免在内存中创建字节 []),并且您也可以使用 C# 形式的实现,这并不特定于 ASP MVC 或一般的 Web。

【讨论】:

  • 谢谢你,Remus 很有用。
猜你喜欢
  • 2019-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-22
  • 1970-01-01
  • 1970-01-01
  • 2017-03-10
  • 1970-01-01
相关资源
最近更新 更多