如何播放视频(.flv)而不显示加载图像以便在播放时进行缓冲?

时间:2009-11-05 06:42:10

标签: html flv streaming-flv-video

我想在我的网站上播放一个flv视频文件。考虑到客户端机器的互联网连接速度,视频将开始播放,以便视频永远不会暂停显示加载图像以进行缓冲。

缓冲/流传输将首先完成然后播放或视频将在短暂延迟后开始播放,同时将完成缓冲,例如40%和其余的缓冲将同时进行,以便视频永远不会暂停并显示加载图像。

如何做到这一点?是否可以实施?

请帮助实现此目的。

6 个答案:

答案 0 :(得分:2)

可以真正帮助你的一件事是以不同的比特率对视频进行编码。事实上,有些人只是没有足够的带宽来保持良好的视频播放效果。幸运的是,Flash允许您根据检测到的客户端带宽进行动态流切换。要使用此功能,而不是直接播放FLV,您可以为播放器提供SMIL文件播放列表,其中列出了不同的流。 FLVPlayback内置了此功能。这是一个样本SMIL文件,从here被盗:

<?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>

答案 1 :(得分:1)

您应该阅读Eight Fallacies of Distributed Computing [wikipedia]。 “从长远来看,一切都证明是错误的,都会造成大麻烦和痛苦的学习经历。”

简言之:

  • 恒定/固定速度不是。
  • 可靠的网络不是。

这是许多计算机的基础,事实上,它们是较低级别概念的抽象。这是一件好事(tm),因为它可以让我们完成更多的工作;当抽象泄漏时,它就成了问题。

我要去哪里?你不可能知道你永远不需要显示一个缓冲窗口只是因为电影的初始部分加载了X个时间量。当然,大多数时候你可以测量它并获得不错的结果,但每隔一段时间,一个孩子就会将一根以太网电缆从插座中拉出来 - 比喻或字面上。当发生这种情况时,您不希望崩溃或丢失用户的数据。

解决方案很简单:设计您的设置,以便大多数用户看不到缓冲窗口,但不要在需要时尝试阻止它。

答案 2 :(得分:0)

最简单的方法是使用Pre load asset 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,您可以设置播放前需要加载的金额。 而不是瑞士法郎使用你想要预加载的flv。我没有用它作为flv,但它应该工作。有关详细信息,请查看文档。

在不预加载整个flv时不允许缓冲也不是一个好主意。互联网速度是可变的。

答案 3 :(得分:0)

您可以创建自定义缓冲动画。如果您不想显示任何内容,我想您可以创建一个其中没有任何内容或没有框架的动画。请参阅here for a video tutorial

答案 4 :(得分:0)

您可以使用flex添加所需的视频并自定义您自己的视频控制器

像这样

Sample Player with and without Video Controller

希望这会给你一个想法。

答案 5 :(得分:0)

试试这个。获取视频持续时间并将其设置为缓冲时间:

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");