我已经创建了一个基本应用程序并上传到 Azure。我想嵌入视频,以便用户可以从列表中进行选择并查看每个视频;例如,选择一部电影并观看其预告片。
我在 MVC 解决方案中创建了两个文件夹:“/Posters”包含用作每个视频背景的 .jpg 文件,“/Videos”包含用作每个视频源的 .mp4 文件。
.cshtml 片段在这里:
<video controls="controls" poster="@Model.PosterPath" width="640" height="360">
<source src="@Model.VideoPath" type="video/mp4" />
<object type="application/x-shockwave-flash" data="http://releases.flowplayer.org/swf/flowplayer-3.2.1.swf" width="640" height="360">
<param name="movie" value="http://releases.flowplayer.org/swf/flowplayer-3.2.1.swf" />
<param name="allowFullScreen" value="true" />
<param name="wmode" value="transparent" />
<param name="flashVars" value="config={'playlist':['@Model.PosterUrl',{'url':'@Model.VideoUrl','autoPlay':false}]}" />
<img alt="@Model.AltText" src="@Model.PosterPath" width="640" height="360" title="No video playback capabilities" />
</object>
</video>
发布后,视频元素就在那里,并且海报显示正确,但是当我单击播放按钮时,出现“找不到流”错误。
我对 VideoPath 和 PosterPath 值使用相对路径,如下所示:
../../Videos/myvideo.mp4
VideoUrl 和 PosterUrl 值需要是绝对路径,并替换“:”和“/”值,因此“http://mywebsite.azurewebsites.net/Videos/myvideo.mp4”显示如下:
http%3A%2F%2Fmywebsite.azurewebsites.net%2FVideos%2Fmyvideo.mp4
显然路径(相对和绝对)有可能不正确;但由于海报显示正确,我想知道是否还有其他原因。
有什么方法可以测试视频是否已正确发布?如果这是一个非常基本的问题,我深表歉意,这是我的第一个 Azure 应用程序:-)
谢谢
最佳答案
您最好将视频放入 Azure Blob Storage 。您将遇到的问题之一是,每次有人流式传输您的视频时,都会会计入您的 Azure 网站的传出流量,即 limited to 165MB a day 。
如果将视频存储在 Azure Blob 存储中,速度会更快且可扩展性更好,因为您可以利用 Azure CDN ,而不会给您的网站带来所有流量。请注意,您仍然需要支付Azure Blob Storage costs ,但这可能是更便宜的路线。
这也意味着您不必在项目中保留巨大的媒体文件,我认为这对于源代码控制或部署来说不是很好。
有关于如何操作的教程smooth streaming with Silverlight以及如何获取 HTML5 video to work 。重要的一点是,请确保在存储文件时设置内容类型,否则它们只会下载而不会流式传输。
使用 HTML5 VideoJS 的示例(它也应该与上面的 Flash 播放器一起使用):
- 在 Azure 门户中创建 Blob 存储帐户
- 上传您的视频。通过代码,或使用 Azure Storage Explorer 。确保设置文件“video/mp4”的内容类型
- 添加 VideoJS css 和脚本文件,并创建
<video>
指向 Blob 存储文件的元素
代码:
<link href="http://vjs.zencdn.net/c/video-js.css" rel="stylesheet">
<script src="http://vjs.zencdn.net/c/video.js"></script>
<video class="video-js vjs-default-skin" controls
preload="auto" width="640" height="480"
data-setup="{}">
<source src="http://storageaccount.blob.core.windows.net/yourvideo.mp4" type='video/mp4'>
</video>
使用 Blob 存储的其他优点之一是使用 Shared Access Signatures 。这些允许您将 blob 保持私有(private),然后生成仅在指定时间段内有效的签名 URL。这样,您的应用程序的用户就可以观看视频,如果他们复制 URL 来尝试重新分发,则该视频将过期且无用。这并不会阻止他们下载和分发,但也不是 DRM 的一种形式。
关于video - 如何在 Azure 上的 MVC 应用程序中托管和嵌入视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14165110/