博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NanoHttpd
阅读量:6977 次
发布时间:2019-06-27

本文共 1949 字,大约阅读时间需要 6 分钟。

NanoHttpd是个很强大的开源库,仅仅用一个Java类,就实现了一个轻量级的 Web Server,可以非常方便地集成到Android应用中去,让你的App支持 HTTP GET, POST, PUT, HEAD 和 DELETE 请求。

 

为了演示它的功能,我利用该库搭建了一个简单地Android视频服务器,可以通过PC浏览器远程播放Android手机存储器中的mp4视频文件。

 

1. Demo效果

 

左边是手机端App界面,右边是在电脑的浏览器中远程播放手机视频的效果。

 

 

 

2. 源码地址

 

Demo源码的地址:,你也可以在本博文的附件中直接下载。

 

注意:使用前请首先将代码根目录下的movie.mp4文件拷贝到手机的SDCard根目录中。

 

3. 工作原理

 

(1)NanoHTTPD

 

这里是NanoHTTPD的官方网站:

 

下载该库并添加到你的Android工程中,就可以使用NanoHTTPD类了,该类最重要的三个函数,一个是start(),一个是stop(),用于启动和停止Web Server,再一个就是serve(),该函数就是收到浏览器的请求后的回调函数,可以在该函数内部给浏览器返回响应的HTTP页面。

 

下面是一个最简单的对所有请求都返回404错误的示例:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public 
class 
VideoServer 
extends 
NanoHTTPD {
     
    
public 
VideoServer(
int 
port) {
        
super
(port);
    
}
     
    
@Override
    
public 
Response serve(IHTTPSession session) {        
        
StringBuilder builder = 
new 
StringBuilder();
        
builder.append(
"<!DOCTYPE html><html><body>"
);        
        
builder.append(
"404 -- Sorry, Can't Found "
+ session.getUri() + 
" !"
);        
        
builder.append(
"</body></html>\n"
);
        
return 
new 
Response(builder.toString());
    
}
 
}

 

其中,IHTTPSession类提供了一系列的接口,用来判断浏览器的请求内容,包括:GET/PUT类型、请求的URL等等,你可以以此为判断针对不同的请求完成服务或者返回相应的页面。

 

(2)浏览器中播放视频

 

要想通过浏览器直接播放视频,目前最常见的有两种方式,一种是采用Flash播放器,另一种利用HTML5标签,本文就是采用了HTML5标签实现的。

 

下面就是Android端收到HTTP请求之后返回的HTML5页面,参考:

 

1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE HTML>
<
html
>
<
body
>
 
<
video 
width
=
"320" 
height
=
"240" 
controls
=
"controls"
>
<
source 
src
=
"/storage/emulated/0/movie.mp4" 
type
=
"video/mp4"
>
    
Your browser doestn't support HTML5
</
video
>
</
body
>
 
</
html
>

 

浏览器收到该HTML5页面后,会进一步请求<source>标签给出的视频地址,这时Android端就需要通过字节流的形式将本地的视频文件发送给浏览器,代码如下:

 

1
2
3
4
5
6
7
8
9
10
 
public 
Response responseVideoStream(IHTTPSession session,String videopath) {
     
try 
{
         
FileInputStream fis = 
new 
FileInputStream(videopath);
         
return 
new 
NanoHTTPD.Response(Status.OK, 
"video/mp4"
, fis);
     
     
catch 
(FileNotFoundException e) {        
         
e.printStackTrace();
         
return 
new 
Response(
"Error"
);
     
 
}

 

4. 小结

 

关于如何利用NanoHttpd开发Android视频服务器就简单介绍到这里,希望对大家有所帮助,有任何疑问或者建议欢迎留言或者来信lujun.hust@gmail.com交流,或者关注我的新浪微博 获取最新的文章和资讯。

 

转载地址:http://fhupl.baihongyu.com/

你可能感兴趣的文章
设计模式----组合模式UML和实现代码
查看>>
定期删除各子文件下数据
查看>>
更换VC后DDC提示证书不可用
查看>>
日历表
查看>>
SpringMVC中实现的token,防表单重复提交
查看>>
受限列表 队列与栈
查看>>
1.0 封装后的布局成本
查看>>
osi七层协议和tcp/ip四层协议
查看>>
我的友情链接
查看>>
马哥2-3
查看>>
Linux --进程间通信--共享内存
查看>>
zookeeper集群环境搭建
查看>>
MySQL索引背后的数据结构及算法原理【转】
查看>>
用户登录
查看>>
这些编程语言程序员工资最高!Java才第四
查看>>
用shell分析nginx日志百度网页蜘蛛列表页来访情况
查看>>
类似ngnix的多进程监听用例
查看>>
高性能网站性能优化与系统架构(ZT)
查看>>
我的友情链接
查看>>
make报错:"/usr/bin/ld: cannot find -lXXX"
查看>>