如何设置服务器以使用react-native-video流视频?

问题描述

我们正在努力设置服务器以在Android上使用react-native-video流式传输视频。所有要流传输的文件均为.MP4格式,并且大小与50-100 MB不同。我无法提供用于复制或共享任何MP4文件的URL。我已经尝试过Android播放器和Exoplayer,但在我们讲话时并没有寻找视频。

对于小型视频,似乎没有问题,因为服务器从播放器收到带有以下标头的HTTP请求:

{
    "name":"test.mp4","User-Agent":"stagefright/1.2 (Linux;Android 10)","Connection":"close","X-Forwarded-Proto":"https","X-Forwarded-For":**********,"Host":**********,"Accept-Encoding":"gzip","ssl_session_id":**********,}

我们将提供test.mp4文件。在这种情况下,即使我们在服务器端遇到以下错误,因为react-native-video再次发送相同的相同HTTP请求,但一切都在客户端起作用(视频正常播放)。 为什么发送多个请求?

Failed to handle request.: java.io.IOException: Broken pipe
....
Failed to send error response: java.lang.IllegalStateException: UT010019: Response already commited

对于两个相同的请求,我们返回一个响应,其中文件内容为正文,200 STATUS OK和以下标头:

{
    "Server": "nginx","Date": <date>,"Content-Length": <length in bytes>,"Connection": "keep-alive","Expires": 0,"Cache-Control": "no-cache,no-store,max-age=0,must-revalidate","Pragma": "no-cache","Content-Disposition": "attachment; filename="test.mp4",}

react-native-video希望使用哪种标题?

当文件变大(〜{100 MB)时,情况会改变。 react-native-video在某个时候开始发送range requests何时?但是,第一个请求没有Range标头参数,与之前的参数相同。与往常一样,我们发送相同的响应并产生相同的错误。但是,从那里开始,播放器开始发送与上述请求类似的重复范围请求,但带有Range标头参数,如下所示:

{
    ...,"Range":"bytes=1752325-"
}

以下所有请求都遵循相同的模式:bytes=<start-bytes>-,这意味着从某个值到结束都请求字节。每次新请求时,值<start-bytes>都会增加(有时会有多次具有相同值的请求)。 为什么它一遍又一遍地请求相同的字节,而不要求特定的范围?

我们的服务器支持范围请求,因此会以有效的文件数据进行响应, 206 STATUS PARTIAL CONTENT和带有以下附加内容的相同标题(例如,值):

{
    ....,"Content-Range": "bytes 0-11546/115461173"
}

react-native-video期望什么类型的响应?

对于这些范围请求,服务器也会产生上述错误,并且视频经常在客户端冻结几分钟。一段时间后,视频开始正​​常播放,并且服务器端未出现错误。

我有几个困惑的问题以粗体标出。同样,我也找不到任何文档来描述与播放器的通信方式,以及它发送和期望什么样的请求。

是否有任何描述协议的文档,或者您在这里可能暗示我做错了什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)