我想在我的网站上播放一个 flv 视频文件。考虑到客户端计算机的互联网连接速度,将开始播放视频,以便视频永远不会暂停显示加载图像以进行缓冲。
缓冲/流式传输将首先完成然后播放,或者视频将在短暂延迟后开始播放,同时缓冲将完成,例如 40%,其余的缓冲将同时进行,以便视频永远不会暂停并显示加载图像。
如何做到这一点?是否可以实施?
请帮助实现这一点。
我想在我的网站上播放一个 flv 视频文件。考虑到客户端计算机的互联网连接速度,将开始播放视频,以便视频永远不会暂停显示加载图像以进行缓冲。
缓冲/流式传输将首先完成然后播放,或者视频将在短暂延迟后开始播放,同时缓冲将完成,例如 40%,其余的缓冲将同时进行,以便视频永远不会暂停并显示加载图像。
如何做到这一点?是否可以实施?
请帮助实现这一点。
真正可以帮助您的一件事是以不同的比特率对视频进行编码。无法回避这样一个事实,即有些人根本没有足够的带宽来获得始终如一的良好视频播放。幸运的是,Flash 允许您根据检测到的客户端带宽进行动态流切换。要利用此功能,而不是直接播放 FLV,您可以为播放器提供一个 SMIL 文件播放列表,其中列出了不同的流。FLVPlayback 内置了这个功能。这是一个示例 SMIL 文件,从这里偷来的:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE smil PUBLIC "-//W3C//DTD SMIL 2.0//EN"
"http://www.w3.org/2001/SMIL20/SMIL20.dtd">
<smil xmlns="http://www.w3.org/2001/SMIL20/Language">
<body>
<switch>
<video src="video2.flv" system-bitrate="512000" />
<video src="video1.flv" system-bitrate="256000" />
<video src="video0.flv" />
</switch>
</body>
</smil>
您应该阅读分布式计算的八个谬误[维基百科]。“从长远来看,所有这些都被证明是错误的,都会造成很大的麻烦和痛苦的学习经历。”
简要地:
这是许多计算机的基础,实际上,它们是对较低级别概念的抽象。这是一件好事(tm),因为它可以让我们完成更多的工作;当抽象泄漏时,它成为一个问题。
我要去哪里?你不可能知道你永远不需要显示缓冲窗口,因为电影的初始部分在 X 时间内加载。当然,大多数时候你可以测量它并得到不错的结果,但每隔一段时间,一个孩子就会从插座中拔出一根以太网电缆——无论是比喻性的还是字面上的。当这种情况发生时,您不希望崩溃或以其他方式丢失用户的数据。
解决方案很简单:设计您的设置,使大多数用户看不到缓冲窗口,但在需要时不要试图阻止它。
您可以创建自定义缓冲动画。如果您不想显示任何内容,我想您可以创建一个没有任何内容或没有帧的动画。请参阅此处获取视频教程。
最简单的方法是使用Pre load assets manager。有一个例子:
import gs.dataTransfer.PreloadAssetManager;
var preloader_obj = new PreloadAssetManager(["myFile1.swf","myFile2.swf"]);
this.onEnterFrame = function() {
myPreloader_mc.bar_mc._xscale = preloader_obj.percentLoaded_num;
if (preloader_obj.percentLoaded_num == 100) {
gotoAndPlay("start");
}
}
使用 percentLoaded_num 您可以设置播放前需要加载的数量。而不是 swf 使用您要预加载的 flv。我没有将它用于flv,但它应该可以工作。查看文档以获取更多信息。
此外,在不预加载整个 flv 时不允许缓冲也不是一个好主意。互联网速度是可变的。
尝试这个。获取视频持续时间并将其设置为您的缓冲时间:
var netConn:NetConnection = new NetConnection();
// Create a local streaming connection
netConn.connect(null);
// Create a NetStream object and define an onStatus() function
var netStream:NetStream = new NetStream(netConn);
netStream.onStatus = function(infoObject) {
status_txt.text += "Status (NetStream)" + newline;
status_txt.text += "Level: "+infoObject.level + newline;
status_txt.text += "Code: "+infoObject.code + newline;
};
// Attach the NetStream video feed to the Video object
my_video.attachVideo(netStream);
my_video.onMetaData = function(videoMetaData:Object):Void {
var videoDuration = videoMetaData.duration;
}
// Set the buffer time
netStream.setBufferTime(videoDuration);
// Begin playing the FLV file
netStream.play("http://www.mydomain.com/myvid.flv");