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