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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章