【发布时间】:2018-08-27 04:00:02
【问题描述】:
我想在通过 unitywebrequest 下载视频的同时播放视频。 AVPro 视频会支持这个吗?如果是这样,请给我一些指导,因为我是统一和 avpro 视频的新手。我可以播放通过 AVPro 演示中的 FullscreenVideo.prefab 完全下载的视频。任何帮助将不胜感激。
【问题讨论】:
标签: unity3d download video-streaming
我想在通过 unitywebrequest 下载视频的同时播放视频。 AVPro 视频会支持这个吗?如果是这样,请给我一些指导,因为我是统一和 avpro 视频的新手。我可以播放通过 AVPro 演示中的 FullscreenVideo.prefab 完全下载的视频。任何帮助将不胜感激。
【问题讨论】:
标签: unity3d download video-streaming
有两个主要选项可用于在视频仍在下载时显示视频。
通过直播
您可以使用媒体播放器组件上的“绝对路径或 URL”选项将视频流式传输到 AVPro 视频,然后将其链接到 rtsp、MPEG-DASH、HLS 或 HTTP 渐进式流格式的流。根据您将针对的平台,其中一些选项将比其他选项更好地工作
可以在 AVProVideo 用户手册中找到支持哪种平台的文件格式表,该用户手册包含在第 12 页及以后的 AVProVideo 中。
如果您想使用流媒体,您还需要在播放器设置中将“互联网访问”选项设置为“必需”,因为没有互联网访问就无法播放视频。 当缓冲足够的视频时,正在流式传输的视频将自动开始/恢复播放。
但是,这确实需要持续的互联网连接,如果您针对的是移动设备,这可能并不理想,或者如果您打算循环播放视频,则不需要。
HLS m3u8
HTTP Live Streaming (HLS) 的工作原理是将整个流切割成更短且易于管理的数据块。然后,无论流有多长,这些块都将按顺序下载。 m3u8 是一种与播放列表一起使用的文件格式,它保留有关多个媒体文件而不是整个视频的位置信息,然后可以将其输入 HLS 播放器,该播放器将按照 m3u8 文件中的指示按顺序播放小型媒体文件。
如果您打算重复播放较小的视频,则使用此方法很有用,因为用户只需下载每个视频块一次,然后您可以将其存储以供以后使用。
您还可以根据需要将这些视频块设为长或短,并设置要预加载多少块的缓冲区。例如,如果您将块大小设置为 5 秒,缓冲 5 个视频,那么您将拥有的唯一加载时间是加载视频的前 25 秒。一旦加载了前 5 个块,它将开始播放视频并在后台加载其余的块,而不会中断视频(假设您的互联网速度可以处理它)
一个缺点是您必须自己将所有视频转换为 m3u8。不过,FFMPEG 之类的工具可以帮助解决这个问题。
参考文献
【讨论】:
WWW www = new WWW("http://yourSite.com/Videos/SomeVideo.m3u8"); 那样下载它,然后使用 File.WriteAllBytes(<Path where you want to save>, www.bytes); docs.unity3d.com/ScriptReference/… 保存视频。然后您可以执行检查文件是否存在,如果不下载,是否从保存的文件播放