Klad 发表于 2022-08-24 10:21
Tags:audio, rust
菜鸟求助:
比如有个url是 https://....../...../xxx.mp3 如何不把它全部下载到本地后再播放, 而是边下载边播放呢?
https://....../...../xxx.mp3
head 拿不到文件大小吗
-- 👇 Jedsek: 谢谢, 这个分段下载我倒是会, 不过在纠结一些其他问题, 比如要是只是下载了一部分文件, mp3的帧协议有没有地方能够告诉总时间, 再比如要是网速不行的时候, 分段下载后播放器已经到了文件末尾, 但文件还在被追加新内容, 有没有什么办法检测当前文件是否正在被写入, 然后来决定播放器是停止播放还是等待新内容被追加后继续播放
当然还有另外一种简单的思路: 先下载完毕mp3文件, 然后直接根据mp3文件的总大小计算播放总时长, 一切都清爽了许多......
有一种读取流媒体的方式是发送Range请求。大概思路是get 请求头包含 Range bytes=0-{你的分片结束位置}。你可以先head请求媒体文件,获取到 headers 信息中的 Content-Length 后,实现 Range 分片请求
谢谢, 这个分段下载我倒是会, 不过在纠结一些其他问题, 比如要是只是下载了一部分文件, mp3的帧协议有没有地方能够告诉总时间, 再比如要是网速不行的时候, 分段下载后播放器已经到了文件末尾, 但文件还在被追加新内容, 有没有什么办法检测当前文件是否正在被写入, 然后来决定播放器是停止播放还是等待新内容被追加后继续播放
读流 参考 https://gist.github.com/giuliano-oliveira/4d11d6b3bb003dba3a1b53f43d81b30d
关键在 while 循环那里
评论区
写评论head 拿不到文件大小吗
--
👇
Jedsek: 谢谢, 这个分段下载我倒是会, 不过在纠结一些其他问题, 比如要是只是下载了一部分文件, mp3的帧协议有没有地方能够告诉总时间, 再比如要是网速不行的时候, 分段下载后播放器已经到了文件末尾, 但文件还在被追加新内容, 有没有什么办法检测当前文件是否正在被写入, 然后来决定播放器是停止播放还是等待新内容被追加后继续播放
当然还有另外一种简单的思路: 先下载完毕mp3文件, 然后直接根据mp3文件的总大小计算播放总时长, 一切都清爽了许多......
有一种读取流媒体的方式是发送Range请求。大概思路是get 请求头包含 Range bytes=0-{你的分片结束位置}。你可以先head请求媒体文件,获取到 headers 信息中的 Content-Length 后,实现 Range 分片请求
谢谢, 这个分段下载我倒是会, 不过在纠结一些其他问题, 比如要是只是下载了一部分文件, mp3的帧协议有没有地方能够告诉总时间, 再比如要是网速不行的时候, 分段下载后播放器已经到了文件末尾, 但文件还在被追加新内容, 有没有什么办法检测当前文件是否正在被写入, 然后来决定播放器是停止播放还是等待新内容被追加后继续播放
当然还有另外一种简单的思路: 先下载完毕mp3文件, 然后直接根据mp3文件的总大小计算播放总时长, 一切都清爽了许多......
读流 参考 https://gist.github.com/giuliano-oliveira/4d11d6b3bb003dba3a1b53f43d81b30d
关键在 while 循环那里