如何在播放视频(.flv)时不显示缓冲加载图片?

3
我想在我的网站上播放一个flv视频文件。视频将根据客户机的互联网连接速度开始播放,以便视频永远不会暂停显示缓冲加载图像。
缓冲/流式传输将首先完成,然后播放,或者视频将在短暂延迟后开始播放,同时进行缓冲,例如40%,其余的缓冲将同时进行,以便视频永远不会暂停并显示加载图像。
如何实现这一点?是否可以实现?
请帮助实现这一点。
6个回答

2

有一件事情可以真正帮助你,那就是以不同的比特率对视频进行编码。无法避免的是,有些人的带宽可能会不足以保证视频播放的稳定性。幸运的是,Flash允许你根据检测到的客户端带宽进行动态流切换。为了利用这个功能,你需要提供一个SMIL文件播放列表,而不是直接播放FLV。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>

1

你应该阅读分布式计算的八个谬论 [wikipedia]。"所有这些谬论在长期内都被证明是错误的,它们都会带来大麻烦和痛苦的学习经历。"

简而言之:

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

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

我想说什么?你不能因为电影的初始部分在X时间内加载而认为你永远不需要显示缓冲窗口。当然,大多数情况下你可以测量并获得不错的结果,但偶尔会有孩子将以太网电缆拔出插座——比喻或字面意义上。你不希望在发生这种情况时崩溃或以其他方式丢失用户的数据。

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

很好的引申,但它并没有回答他的问题。 - user195488
1
听起来你在想的是Sun公司的一些人提出的“分布式计算的八个谬论”... http://blogs.oracle.com/jag/resource/Fallacies.html 虽然你可能是从http://www.rgoarchitects.com/Files/fallacies.pdf 这篇论文中了解到这些谬论的(维基百科上有一个总结:http://en.wikipedia.org/wiki/Fallacies_of_Distributed_Computing)。 - Stobor

0
最简单的方法是使用预加载资产管理器。 这里有一个例子:
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文件而不是swf文件,则可以使用它。我没有用过它来处理flv文件,但应该能够正常工作。有关此信息的更多信息,请查阅文档。

另外,当不预加载整个flv文件时,不允许缓冲不是一个好主意。因为互联网速度是可变的。


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

0
你可以创建自定义的缓冲动画。如果你不想显示任何内容,我想你可以创建一个没有东西或没有帧的动画。点击这里观看视频教程

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接