问题标签 [progressive-download]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 一些文件没有缓存在 requirejs - 这是一个问题吗?
使用 RequireJS 我正在开发我的应用程序。我从我的浏览器开发工具(附加)中注意到一些文件(router.js、views.js、model.js 等)说缓存“不”。这意味着什么?这里有什么问题?
java - 渐进式视频流如何准确工作(MP4、flv 等)
我想知道渐进式视频流缓冲是如何工作的。目前我尝试为 Android 创建一个能够播放渐进式流视频文件的媒体播放器。为此,我使用 vitamio 库。它是一个非常强大的 Android 媒体库。它还支持渐进式串流和多种视频格式。vitamio 的唯一问题是暂停播放时它不会继续缓冲。因此,您无法在慢速网络上观看视频。
所以我目前解决这个问题的解决方法是打开一个 httpinputstream 到我想要流式传输的视频文件。然后我读取了视频文件的大小。假设它是80MB。然后我在我的硬盘上创建一个正好这个大小(80MB)的空虚拟文件。该文件当前填充了零。然后我开始从 httpinputstream 读取数据并从 . 如果我下载了 10MB,我将此文件放入视频播放器并开始播放。此时我的硬盘上的视频文件仍然是 80MB 大,但可读和有效的视频数据是 10MB。在播放期间,我继续下载并填充虚拟文件,直到完成。
有时这很好用,有时却不行。尽管播放位置为 5% 且下载已完成 15%,但播放停止并出现多个错误(未找到帧等)。它不是很可靠,我无法想象这是渐进式流媒体的常用方式。所以我的问题是:这在技术上是如何工作的?我的渐进式流式传输方法与普通方式有什么不同?
谢谢你
youtube - 如何提供像 Youtube 这样的视频?几乎即时播放和快速搜索
如何像 Youtube 一样提供视频服务?即使视频很长(将近 2 小时)并且以高清格式观看,它也几乎可以立即播放,并且寻找尚未加载的部分非常快。
我正在使用来自 Rackspace 的专用服务器,该服务器具有 100Mb 的上行/下行速度,我对服务器的 ping 时间低于 50ms。我的本地互联网连接为 10Mb,当我从服务器下载某些内容时,我可以最大化我的互联网连接,因此与服务器的连接不是这里的问题。
我正在尝试模拟这一点,我尝试使用 Wowza 进行实时流式传输,并使用H264 Streaming Module尝试使用 Pseudostreaming 。两者都无法与 Youtube 提供视频的速度相提并论。
视频测试文件为 MP4 (h.264),300MB,时长 2 小时,总码率设置为 500kbps,视频播放器为 JWPlayer
Wowza Streaming (RTMP) - 加载然后播放视频速度很快,但不如 youtube 快。搜索也没有那么快,移动到新位置并继续播放视频大约需要 5 - 7 秒。
Pseudostreaming H264 Streaming Module (HTTP) - 加载视频需要很长时间,因为它在播放之前先下载视频标头。一个 2 小时的视频有大约 2.5MB 的 MOOV ATOM(视频头文件),它需要先下载才能播放。一旦它开始播放,寻找未下载的部分就可以与 Wowza 相提并论,但不如 Youtube 快。
以 Youtube 的速度提供视频需要什么?我还需要它在暂停时缓冲/下载视频,就像 Youtube 一样,所以像 Wowza 这样的 Real Streaming 已经出来了。
使用 H264 Streaming 模块的伪流会很好,因为它在暂停时会缓冲,只是初始加载时间很长!无论如何我可以删除初始加载时间?
我还有哪些其他选择?我对可以在我的服务器中使用的任何其他选项持开放态度。
android - 在 Android 中获取应用内 MP4 播放器的最快方法
我需要在 Android 应用程序中嵌入视频,并希望尽快完成,以便为我的公司制作演示。不允许使用专有 SDK,所以我的选择似乎是:
关于哪种方法最好的建议?要求是我播放 MP4(通常使用 h.264 视频和 aac 音频),显示进度滑块,具有强大的搜索和开始/停止性能,并通过网络对较大的文件进行渐进式下载。
限制为 Android 4.x 和更新版本很好(所以 OpenMAX 很好)。
audio - 渐进式下载音频文件
我想编写一个应用程序,通过标准 Android 从远程 http 源逐步下载音频mediaplayer
,但我也想将音频文件的副本保存到 SD 卡。事实证明这是一个难题:
1)我们将 a 传递uri
给媒体播放器,然后在播放过程中“退出循环”,因为mediaplayer
直接与远程对话,因此无法访问正在播放的字节
2)Android似乎没有将下载的位写入磁盘的选项,也没有回调来访问下载的数据
3) 虽然可以在我们的应用程序中嵌入一个网络服务器(参见 参考资料nanohttpd
),然后将一个localhost
uri传递给mediaplayer
,但这似乎是一个可怕的组合
我错过了更简单的方法吗?这一定是一个已解决的问题?!
编辑:也许是一个更简单的问题:如果我在内存中有一个包含音乐的缓冲区,我可以播放它吗?我必须将它写入磁盘或使用 Web 服务器mediaplayer
来播放它,这似乎很荒谬。
javascript - 在 Phonegap 3.0 中脱机媒体文件
使用Phonegap 媒体 API,可以播放托管在 Web 服务器上的外部文件。
播放完该文件后,我想知道是否可以将其保存在本地,以便下次收听时可以从本地路径而不是从 URL 获取?这就是我所说的“离线”。
但是,媒体 API 中没有 save() 方法。文件是否存储在缓存中,以便我可以使用文件 API获取它(前提是我知道路径)?
我想一种解决方案可能是下载文件然后播放它,但我不想让用户等待下载完成。我想尽快开始播放媒体文件。是否可以在文件完全下载之前开始播放,例如使用渐进式下载?
android - 尝试在 VideoView 应用程序中使用渐进式加载从 SD 卡播放视频时出现错误代码 (1, -1004)
我正在将 MP4 文件从 Web 应用程序下载到移动设备上的文件中。由于文件往往很大,我想在获得一些数据后立即开始播放,而不是等到整个文件下载完毕,所以我想出了以下方案:
- 将前 1 MB 的数据下载到我的 SD 卡上的文件中。
- 启动视频播放器。
- 以 1 MB 块下载剩余数据,将新数据附加到原始文件中。
更准确地说,代码执行以下操作:
创建一个名为 out 的 FileOutputstream 写入“/storage/sdcard/tmpAttachment” 从服务器获取最多 1 MB 并将其写入 /storage/sdcard/tmpAttachment 启动视频播放器并让它从 /storage/ 的开头开始播放sdcard/tmpAttachment while (更多数据) 获取下一个 1 MB 块并写入 endwhile
实际代码如下:
ECSVideoViewer.java 的代码如下:
视频开始播放正常,在加载第一个块之后并且正在加载下一个块,但由于某种原因,播放器在尝试读取第二个 1 MB 下载数据块时停止并抛出错误,返回 MEDIA_ERROR_UNKNOWN 和 MEDIA_ERROR_IO . 谁能看到我做错了什么?
ios - 下载 iOS 时流式传输视频
我正在使用 iOS 7,并且我有一个 .mp4 视频需要在我的应用程序中下载。视频很大(约 1 GB),这就是为什么它不包含在应用程序中的原因。我希望用户能够在开始下载后立即开始观看视频。我还希望视频能够缓存在 iOS 设备上,这样用户以后就不需要再次下载了。两种播放视频的常规方法(渐进式下载和实时流式传输)似乎都不允许您缓存视频,因此我创建了自己的 Web 服务,将我的视频文件分块并将字节流式传输到客户端。我使用 NSURLConnection 启动流式 HTTP 调用:
当我收到一个数据块时,我将它附加到文件的本地副本的末尾:
如果我让设备运行,则文件下载成功,我可以使用 MPMoviePlayerViewController 播放它:
但是,如果我在文件完全下载之前启动播放器,视频就可以正常播放了。它甚至在顶部洗涤栏上显示了正确的视频长度。但是,当用户到达视频开始之前我已完成下载的视频位置时,视频就会挂起。如果我关闭并重新打开 MPMoviePlayerViewController,则视频会一直播放到我再次启动 MPMoviePlayerViewController 时所处的位置。如果我等到整个视频下载完毕,则视频播放没有问题。
发生这种情况时,我没有触发任何事件,也没有将错误消息打印到控制台(视频开始后永远不会发送 MPMoviePlayerPlaybackStateDidChangeNotification 和 MPMoviePlayerPlaybackDidFinishNotification)。似乎还有其他东西告诉控制器视频的长度是什么,而不是擦洗器正在使用的......
有谁知道可能导致此问题的原因是什么?我不一定要使用 MPMoviePlayerViewController,所以如果在这种情况下可以使用不同的视频播放方法,我完全赞成。
相关未解决的问题:
使用 AVURLAssets 的 AVPlayer 和渐进式视频下载
更新 1 我发现视频停顿确实是因为视频开始播放时的文件大小。我可以通过在开始下载之前创建一个归零文件并在进行时覆盖它来解决这个问题。由于我可以控制视频流服务器,因此我添加了一个自定义标头,以便我知道正在流式传输的文件的大小(流式传输文件的默认文件大小标头为 -1)。我正在我的 didReceiveResponse 方法中创建文件,如下所示:
这很好用,除了 truncate 导致应用程序在磁盘上创建 ~1GB 文件时挂起大约 10 秒(在模拟器上它是即时的,只有真实设备有这个问题)。这就是我现在卡住的地方 - 有没有人知道一种更有效地分配文件的方法,或者另一种让视频播放器识别文件大小而无需实际分配的方法?我知道一些文件系统支持“文件大小”和“磁盘大小”作为两个不同的属性......不确定iOS是否有类似的东西?
php - 逐步通过 php 文件流式传输 mp4
我正在为我们的视频播放器开发一种更安全的流媒体方法。因为每个文件都需要特殊的令牌身份验证,并且还只允许每个令牌加载一次,所以我通过 php 容器运行 MP4。这在 HTML5 视频标签内完美运行,并防止用户轻松下载源代码。
我正在从这里调整一些代码
现在出现了问题,因为我希望能够搜索视频。跳到视频中尚未加载的区域会使<video>
标签(和 chrome)崩溃。
我假设由于 HTML5 播放器在几秒钟内搜索并且 PHP 以字节为单位加载,因此这是无法完成的。这就是我在这里问的原因。
我可以做什么(如果有的话)来允许渐进式流式传输?
我可以使用更合适的容器格式来达到相同的目的吗?
android - Android HTTP 渐进式流 onBufferingUpdate 几秒钟后停止调用
我开发了一个 Android 音乐播放器应用程序,它可以通过 HTTP 渐进式下载(通过 WiFi,使用 Apache)流式传输 MP3。这就是我设置MediaPlayer
流式传输 MP3 的方式:
一切正常,直到与服务器的连接丢失。从我已注册的日志输出来看onBufferingUpdateListener
,似乎当与服务器的连接丢失时(例如,我关闭了手机上的 WiFi),MediaPlayer
尝试填充其缓冲区中剩余的歌曲。但是,此重试会在几秒钟后停止。
换句话说,如果与服务器的连接在丢失后的几秒钟内没有恢复,MediaPlayer
则不会恢复缓冲。(即onBufferingUpdate()
重试几秒钟后停止被调用)。此外,我的onInfoListener
or中没有收到任何错误/信息消息onErrorListener
。
问题是MediaPlayer
:无论连续连接之间的时间间隔如何,当与服务器的连接再次可用时,如何强制恢复缓冲歌曲的其余部分(最好不中断播放)?
我必须通过 HTTP 渐进式下载流式传输 MP3 的哪些替代方案?