美文网首页
搭建离线m3u8代理服务器时,遇到播放器不播放问题

搭建离线m3u8代理服务器时,遇到播放器不播放问题

作者: 小木桨 | 来源:发表于2017-03-03 16:56 被阅读464次

    问题描述

    想要实现可以播放本地的m3u8文件,第一次播放时先从网上下载,第二次播放的时候则读取本地缓存的文件,使用ServerSocket搭建了一个代理服务器,将代理地址设置给播放器,播放器可以正常发送m3u8请求,代理服务器也能接收到请求并且读取本地的m3u8返回给播放器,但是在服务器输出完文件后并且flush输出流后,播放器并没有开始播放,也不请求m3u8中ts文件,一直是缓冲状态。。。

    解决方案

    最终的原因是在ServerSocket接收到客户端请求的Socket后没有给客户端Socket设置read超时时间,并且也没有主动去关闭socket,所以就导致了客户端以为没有服务器没有输出完数据,一直在等待中。。。

    设置read超时方法: setSoTimeout

    setSoTimeout  
    public void setSoTimeout(int timeout)  
       throws SocketException启用/禁用带有指定超时值的 SO_TIMEOUT,以毫秒为单位。将此选项设为非零的超时值时,在与此 Socket 关联的 InputStream 上调用 read() 将只阻塞此时间长度。  
       如果超过超时值,将引发 java.net.SocketTimeoutException,虽然 Socket 仍旧有效。选项必须在进入阻塞操作前被启用才能生效。  
       超时值必须是 > 0 的数。超时值为 0 被解释为无穷大超时值。   
    参数:  
    timeout - 指定的以毫秒为单位的超时值。   
    抛出:   
    SocketException - 如果底层协议出现错误,例如 TCP 错误。  
    从以下版本开始:   
    JDK 1.1   
    另请参见:  
    getSoTimeout() 
    

    相关文章

      网友评论

          本文标题:搭建离线m3u8代理服务器时,遇到播放器不播放问题

          本文链接:https://www.haomeiwen.com/subject/aidrgttx.html