android 读取局域网共享文件和播放局域网共享视频

这个功能也没啥用,只是稍微研究了一下,最初研究的原因是想播放局域网内共享的视频,虽然成功了,但是现在只能播放几M的小视频

主要参考这篇文章Android 冷知识】利用SMB协议远程查看电脑文件或者其他存储设备,这篇文章有些地方写的不清不楚,经过摸索才简单的实现了

首先引入jcifs.jar,jcifs

cybergarage.jar我没找到,找到了源码cybergarage,把cybergarage-upnp/core/src/main/java/org/下的源码拷贝过来,删除xml/parser下报错的两个文件kXML2Parser.java,XercesParser.java

那篇文章基本都说了,我就说一下没有提的

SmbFile的isDirectory()函数也要在子线程内,在主线程偶尔会报错,很神奇,也不知道是不是系统原因

在做播放视频时发现hsl.getHTTPServer(0).getBindAddress();无法取到正确的ip

for (int i = 0; i < hsl.size();i++){
    ip = hsl.getHTTPServer(i).getBindAddress();
    port = hsl.getHTTPServer(i).getBindPort();
    if(ip.contains("/192.168."))break;
}

发现这个数组会生成多个/xxx::xxx:xxx和一个/192.168.x.x的ip所以我进行了简单的过滤

我懒的去注册Server,就直接用FileServer来用

通过SmbFile的路径生成http链接

private Map<String,SmbFile> fileMap = new HashMap<>();
public String getURL(SmbFile file){
    String path = file.getCanonicalPath();
    String url = path.replace("smb://","http:/"+ip+":"+port+"/smb/");
    fileMap.put(path.replace("smb://","/smb/"),file);
    return url;
}

由于String uri = httpReq.getURI();获得的字符串会把"http:/"+ip+":"+port这一段给去掉,所以直接用/smb/把smb://给替换掉

只能播放小视频的原因是httpRes.setContentLength(contentLen);的长度被限制了,所以想播放大视频的话要想办法解除限制

就这样,简单的Demo

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值