我有一个以下lighttpdconfiguration的videostream媒体网站:
server.modules = ( "mod_compress", "mod_access", "mod_alias", "mod_rewrite", "mod_redirect", "mod_secdownload", "mod_h264_streaming", "mod_flv_streaming", "mod_accesslog", "mod_auth", "mod_status", "mod_expire", "mod_fastcgi" ) server.document-root = "/data/domain.com/" index-file.names = ( "index.html" ) server.tag = "xhttpd" url.access-deny = ( "~", ".inc" ) dir-listing.encoding = "utf-8" mimetype.assign = ( ".gif" => "image/gif", ".jpg" => "image/jpeg", ".jpeg" => "image/jpeg", ".png" => "image/png", ".css" => "text/css", ".html" => "text/html; charset=UTF-8", ".htm" => "text/html; charset=UTF-8", ".js" => "text/javascript", ".mp4" => "video/mp4", ".3gp" => "video/3gpp", ".3gpp" => "video/3gpp", # make the default mime type application/octet-stream. "" => "application/octet-stream", ) mimetype.use-xattr = "enable" server.port = 80 server.pid-file = "/var/run/lighttpd.pid" server.username = "nginx" server.groupname = "nginx" server.stat-cache-engine = "simple" # either fam, simple or disabled # see http://blog.lighttpd.net/articles/2005/11/11/optimizing-lighty-for-high-concurrent-large-file-downloads server.network-backend = "writev" # http://redmine.lighttpd.net/wiki/1/Server.event-handlerDetails server.event-handler = "linux-sysepoll" server.max-fds = 8192 server.max-connections = 2048 server.max-write-idle = 360 server.max-keep-alive-requests = 4 server.max-keep-alive-idle = 4 server.max-read-idle = 30 # Files ending in .flv and .3gp are served by the module h264-streaming.extensions = (".mp4" ) $HTTP["url"] =~ "mp4$" { connection.kbytes-per-second = 90 } # Add Expires/Cache-Control header $HTTP["url"] =~ "\.(mp4|3gp|flv)$" { expire.url = ( "" => "access 8 hours" ) }
播放器是jwplayer,我的所有video都是mp4,在mp4box文件的开始处设置了元数据。 Lighttpd修补了h264的codeshop代码。
不幸的是,尽pipestream媒体和完美的工作,在video的开始时间有很大的不同。
对于短片(2-5分钟),立即开始播放。 对于长时间的video(20到60分钟),开始播放之前可能需要几分钟时间,因为他认为video不工作,使用户离开。
为什么会发生这种情况, 最重要的是如何避免这种情况?
通过lighttpd进程来查看当这样的请求发生时它正在做什么; 它会告诉你它到底在做什么,然后你可以通过源代码来看看为什么(无论如何,假设有某种评论)。 一旦你知道它在做什么,你可以继续如何解决它(如果甚至可能的话)。
我的(完全没有根据的)猜测是它正在做某种顺序扫描。 可能使用O(n^2) (甚至可能更糟糕)的一些基于延迟相对于电影长度(以及可能的尺寸)的相当大的增加。 或者,我想这可能是一些特定于video的东西,而你所有的长时间恰好触发了任何延迟引起的代码path导致的问题。
我认为你的mp4文件正在stream式传输到客户端,但客户端无法find它需要的一些信息,所以它正在下载整个文件,然后开始播放。 尝试优化你的MP4文件
mp4file --optimize somefile.mp4
由于MOOVprimefaces大小,moovprimefaces是保存整个文件的索引信息的文件的一部分。 所以当你stream式传输一个小文件时,moovprimefaces很小,因此video不需要很长时间就可以启动。 但是,当文件大小较大时,即使您有固定的编码问题,如移动前面的moovprimefaces,首先获取moovprimefaces,然后播放video也需要一些时间。
为了克服这个问题,你可以尝试通过adobe切换到Http Dynamic Streaming 。 video文件在服务器端被分段,其video块被传送,并且在播放器端被缝合以连续播放。 它也支持在任何时间点寻找。