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

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

1. Demo效果

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

2. 源码地址

Demo源码的地址:https://github.com/Jhuster/Android/tree/master/VideoServer,你也可以在本博文的附件中直接下载。

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

3. 工作原理

(1)NanoHTTPD

这里是NanoHTTPD的官方网站:http://nanohttpd.org/

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

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

public class VideoServer extends NanoHTTPD {public VideoServer(int port) {super(port);}@Overridepublic 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页面,参考:《HTML5教程》

<!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端就需要通过字节流的形式将本地的视频文件发送给浏览器,代码如下:

 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交流,或者关注我的新浪微博 @卢_俊 获取最新的文章和资讯。

基于NanoHttpd的Android视频服务器开发相关推荐

  1. 基于Java的Android区块链开发之生成助记词(位数可选)

    基于Java的Android区块链开发之生成助记词 位数可选 具体实现代码 这里使用bitcoinj库,来实现生成bip39的12个助记词,引用库 implementation 'org.bitcoi ...

  2. 基于Go语言的Web服务器开发

    基于Go语言的Web服务器开发 本文将介绍使用Go语言来开发一个简单的Web服务器,其中将包括文件上传和下载功能. 必备条件 Go语言环境 一个文本编辑器 网络服务器 步骤一:编写server.go文 ...

  3. Android手机QQ的UI自动化实践,音视频服务器开发难点

    在上一步环节中,我们虽然确定了自动化框架,但是框架只提供底层的驱动能力,如果无统一封装模式进行规范,随着用例的增多会变得难以维护,所以我们需要一个统一模式来封装细节,可以使 testcase 更稳健, ...

  4. 基于ARM的网络视频监控开发boa+servfox

    http://whlfly.blog.163.com/blog/static/9058441620088424626543/ 2008-09-04 14:46:26|  分类: Linux |字号订阅 ...

  5. android 视频sdk 开发总结

    2016年年底,公司开始放弃普通插屏广告sdk,因这种方式对用户的干扰太大,用户体验不好,视频方式的广告越来越被用户认可,另一个重要的原因是视频广告的转化率比插屏广告更好,投放效果更好. 所以公司老板 ...

  6. 基于OpenGL的Android系统视频转换功能实现

          第1章OpenGL ES 3D图形编程首先OpenGL.OpenGL的英文全称是OpenGL Graphics Library,中午名称是开发式图形库.OpenGL为程序开发人员定义了一个 ...

  7. JNI编程基础(二)——Android Studio NDK开发

    由于笔者目前的工作是Android开发,所以在JNI开发系列博客中穿插一篇AndroidStudio NDK开发介绍. 随着Android Studio 2.2的推出,Android Studio的N ...

  8. 基于NDK、C++、FFmpeg的android视频播放器开发实战-夏曹俊-专题视频课程

    基于NDK.C++.FFmpeg的android视频播放器开发实战-1796人已学习 课程介绍         课程包含了对流媒体(拉流)的播放,演示了播放rtmp的香港卫视,支持rtsp摄像头和ht ...

  9. android jmf,基于JMF与Android的无线视频监控系统的设计与实现

    摘要: 视频监控系统是一种防范能力很强的综合系统,是安防领域的重要组成部分.随着无线网络与流媒体传输技术的飞速发展,视频监控系统也朝着无线化,高清化,智能化的方向发展.针对这一需求,通过研究JAVA多 ...

最新文章

  1. HTTP协议中的keep-alive
  2. IE内嵌google chrome frame解决浏览器兼容问题
  3. 十天精通CSS3(11)
  4. JVM — 类加载机制
  5. 开发板通过NTS挂载在PC机中的文件夹
  6. 一个简单的你好,世界! 使用 Boost.MPI broadcast() 的示例
  7. api 规则定义_API有规则,而且功能强大
  8. 网络基础2-2(传输层,端口,详谈UDP)
  9. 机器学习- 吴恩达Andrew Ng - week3-1 Classification
  10. Citrix XenApp 6.5客户端自动下载(无需从官网下载)
  11. 解决Win10磁盘占用100%
  12. java编程第七周作业
  13. 【经验科普】实战分析C工程代码可能遇到的编译问题及其解决思路
  14. String 和 StringBuider
  15. SWIFT?CHIPS?CHAPS?CIPS?SPFS?INSTEX?全球支付结算系统简单对比
  16. 中职 计算机专业,中职计算机专业发展新思维
  17. 量化投资学习——汇率套利策略
  18. java塑形是什么意思_所谓“塑形”是个什么概念?塑形和减脂的区别
  19. 数字示波器的三大指标
  20. flash mx拖拽实例_集成Flash MX 2004和Director MX 2004

热门文章

  1. 兰州大学微型计算机原理及应用,兰州大学信息学院微型计算机原理及应用试题答案01...
  2. Object-C 类
  3. 《水经注地图服务》发布的卫星影像数据在ArcMap中调用
  4. 【操作说明】RTSP/GB28181/EHOME协议视频融合平台EasyCVR如何通过OBS接收RTMP协议推流
  5. 英文写作中的最常见“十大句式”
  6. 2023北京智源大会亮点回顾 | 高性能计算、深度学习和大模型:打造通用人工智能AGI的金三角
  7. PCDN--P2P技术与CDN的融合创新
  8. e签宝签署电子合同使用手册
  9. torchtext安装
  10. Centos8安装英伟达显卡驱动并通过docker部署深度学习环境