渐进式流媒体
- 目标
- 如何启用渐进下载
- 如何知道已下载了什么
- 如何知道已下载的数据存储在哪里
- 如何限制保留的已下载数据的量
具备网络弹性的带有本地存储样例
- 在流媒体中,数据从网络获取,并保留未来数据的一个小缓冲区以确保平滑播放(参见基础教程12:流媒体)。然而,一旦数据被显示或渲染,就会被丢弃(没有过去数据的缓冲区)。这意味着,如果用户想要跳回并从过去的某一点继续播放,需要重新下载数据。
- 针对流媒体的媒体播放器,如YouTube,通常会将所有已下载的数据存储在本地,以备不时之需。通常还会使用图形小部件显示已下载文件的进度。
playbin
通过“DOWNLOAD
”标志提供类似的功能,该功能将媒体存储在本地临时文件中,以便更快地播放已下载的块。- 本教程还展示了如何使用缓冲查询,它允许了解文件中的哪些部分可用。
函数与知识点
deep-notify
介绍:deep-notify
信号用于通知属性变化。通常将其附加到顶级bin
上,以接收该bin
中包含的所有元素的通知。temp-location
介绍:用于存储临时文件的位置(只读此属性,使用temp-template
来配置名称模板)GstQuery *gst_query_new_buffering (GstFormat format)
功能:为查询流的缓冲状态构建一个新的查询对象。
cleanup:gst_query_unref()
gboolean gst_element_query (GstElement * element, GstQuery * query)
功能:对给定的元素执行查询。
说明:对于不实现查询处理程序的元素,此函数将查询转发到随机的srcpad
或此元素的随机链接sinkpad
的对等体。
注意:某些查询可能需要一个正在运行的管道才能工作。guint gst_query_get_n_buffering_ranges (GstQuery * query)
功能:获取查询结构中缓冲范围数组中当前存储的值的数量。gboolean gst_query_parse_nth_buffering_range (GstQuery * query, guint index, gint64 * start, gint64 * stop)
功能:解析一个可用的查询并获取存储在缓冲范围数组的索引处的开始和结束值。GstQuery *gst_query_new_buffering (GstFormat format)
功能:创建一个用于查询流缓冲状态的新查询对象。
cleanup:gst_query_unref()