视频接口返回类型解析?

有一个短视频接口,我想知道如何能通过axios请求或者后端请求,直接获得视频地址
http://v.nrzj.vip/video.php?_t=0.9640358809997094

(1)放在浏览器可以直接下载视频,并每次下载不同的视频
(2)放在video的src中可以直接播放,并且每次创建video组件都会播放新的视频
(3)因为有时候接口会失败,失败时想做处理,所以src需要动态的,最好可以把接口外置,自己这边请求一下,失败了调用redis缓存的视频地址,因为每十次大概失败一次,失败率有点高。
这边也在考虑用java请求这个接口然后用application/octet-stream接收,然后自己处理压缩二次封装。但是不是很理解这个类型的视频接口,不理解这种返回的是什么类型的东西,还望大佬解答

阅读 1.6k
avatarAI BotBETA

这个问题涉及到视频接口的调用和返回值的处理。根据你提供的信息,我可以给你一些建议和解答。

首先,这个视频接口返回的是一个二进制流(Binary Stream),也就是一个字节序列。这种类型的返回值通常用于传输文件或数据流,比如视频文件。

如果你想通过Axios或后端请求获取视频地址,你需要将请求的响应设置为二进制流,然后将其保存或用于其他目的。

对于你的具体需求,以下是一些可能的解决方案:

  1. 直接下载视频:你可以使用Axios或后端请求来获取视频的二进制流,然后将其写入文件,即可直接下载视频。具体的实现方式取决于你使用的编程语言和框架。
  2. 在video标签中播放视频:你可以将获取到的二进制流转换为视频文件,并将其嵌入到HTML的video标签中,以便在浏览器中直接播放视频。具体的实现方式是将video标签的src属性设置为二进制流的URL,当浏览器加载页面时,会自动播放视频。
  3. 处理接口失败的情况:你可以在请求视频接口时添加错误处理机制,如果接口失败,则调用Redis缓存的视频地址。具体的实现方式是在请求视频接口时添加错误处理函数,如果接口返回错误或异常,则从Redis中获取缓存的视频地址,并更新页面上的视频播放源。

关于使用Java请求这个接口并用application/octet-stream接收的处理方式,我不太建议这样做。因为这种方式需要自己处理二进制流的解析和封装,比较复杂且容易出错。如果你不熟悉这方面的技术,建议使用现有的工具或库来实现。

总之,对于这种类型的视频接口,你需要了解其返回值的类型和格式,然后根据具体的需求和情况来选择合适的解决方案。希望我的建议能够帮助到你。

3 个回答

我看了一下 他是直接返回的是视频文件(二进制流) 类型
e.g.

<!DOCTYPE html>
<html>
  <head>
    <title>视频播放</title>
  </head>
  <body>
    <video controls muted ></video>
  </body>
  <script>
    fetch('http://v.nrzj.vip/video.php?_t=0.9640358809997094').then(res => res.blob()).then(blob => {
        const url = URL.createObjectURL(blob)
        document.querySelector('video').src = url
    })
  </script>
</html>

所以你可以在后端压缩后发给前端 也可以直接将视频流转发给前端。

我还纳闷,他哪来那么多流量。

image.png

原来是个302。

import requests as r

__author__ = 'lpe234'


def main():
    resp = r.get('https://v.nrzj.vip/video.php', allow_redirects=False)
    video_src = resp.headers['location']
    print(video_src)


if __name__ == '__main__':
    main()

不允许跳转即可。allow_redirects=False

import axios from 'axios';

const videoUrl = 'http://v.nrzj.vip/video.php';

axios({
  method: 'get',
  url: videoUrl,
  responseType: 'blob', //  blob 处理二进制数据
  params: { _t: Math.random() } // 确保 URL 的唯一性以避免缓存效果
})
.then(response => {
  // 请求成功,response.data 会是一个包含视频数据的 Blob 对象
  // 创建一个 URL 对象
  const videoSrc = URL.createObjectURL(response.data);
  
  // 可以把 videoSrc 设置为成video 标签的 src 属性或者用其他方式用
})
.catch(error => {
  // 请求失败,处理错误
  // 这里可以从 Redis 或者其他缓存里取备用视频地址
});
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏