基于NanoHttpd的Android视频服务器开发
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视频服务器开发相关推荐
- 基于Java的Android区块链开发之生成助记词(位数可选)
基于Java的Android区块链开发之生成助记词 位数可选 具体实现代码 这里使用bitcoinj库,来实现生成bip39的12个助记词,引用库 implementation 'org.bitcoi ...
- 基于Go语言的Web服务器开发
基于Go语言的Web服务器开发 本文将介绍使用Go语言来开发一个简单的Web服务器,其中将包括文件上传和下载功能. 必备条件 Go语言环境 一个文本编辑器 网络服务器 步骤一:编写server.go文 ...
- Android手机QQ的UI自动化实践,音视频服务器开发难点
在上一步环节中,我们虽然确定了自动化框架,但是框架只提供底层的驱动能力,如果无统一封装模式进行规范,随着用例的增多会变得难以维护,所以我们需要一个统一模式来封装细节,可以使 testcase 更稳健, ...
- 基于ARM的网络视频监控开发boa+servfox
http://whlfly.blog.163.com/blog/static/9058441620088424626543/ 2008-09-04 14:46:26| 分类: Linux |字号订阅 ...
- android 视频sdk 开发总结
2016年年底,公司开始放弃普通插屏广告sdk,因这种方式对用户的干扰太大,用户体验不好,视频方式的广告越来越被用户认可,另一个重要的原因是视频广告的转化率比插屏广告更好,投放效果更好. 所以公司老板 ...
- 基于OpenGL的Android系统视频转换功能实现
第1章OpenGL ES 3D图形编程首先OpenGL.OpenGL的英文全称是OpenGL Graphics Library,中午名称是开发式图形库.OpenGL为程序开发人员定义了一个 ...
- JNI编程基础(二)——Android Studio NDK开发
由于笔者目前的工作是Android开发,所以在JNI开发系列博客中穿插一篇AndroidStudio NDK开发介绍. 随着Android Studio 2.2的推出,Android Studio的N ...
- 基于NDK、C++、FFmpeg的android视频播放器开发实战-夏曹俊-专题视频课程
基于NDK.C++.FFmpeg的android视频播放器开发实战-1796人已学习 课程介绍 课程包含了对流媒体(拉流)的播放,演示了播放rtmp的香港卫视,支持rtsp摄像头和ht ...
- android jmf,基于JMF与Android的无线视频监控系统的设计与实现
摘要: 视频监控系统是一种防范能力很强的综合系统,是安防领域的重要组成部分.随着无线网络与流媒体传输技术的飞速发展,视频监控系统也朝着无线化,高清化,智能化的方向发展.针对这一需求,通过研究JAVA多 ...
最新文章
- HTTP协议中的keep-alive
- IE内嵌google chrome frame解决浏览器兼容问题
- 十天精通CSS3(11)
- JVM — 类加载机制
- 开发板通过NTS挂载在PC机中的文件夹
- 一个简单的你好,世界! 使用 Boost.MPI broadcast() 的示例
- api 规则定义_API有规则,而且功能强大
- 网络基础2-2(传输层,端口,详谈UDP)
- 机器学习- 吴恩达Andrew Ng - week3-1 Classification
- Citrix XenApp 6.5客户端自动下载(无需从官网下载)
- 解决Win10磁盘占用100%
- java编程第七周作业
- 【经验科普】实战分析C工程代码可能遇到的编译问题及其解决思路
- String 和 StringBuider
- SWIFT?CHIPS?CHAPS?CIPS?SPFS?INSTEX?全球支付结算系统简单对比
- 中职 计算机专业,中职计算机专业发展新思维
- 量化投资学习——汇率套利策略
- java塑形是什么意思_所谓“塑形”是个什么概念?塑形和减脂的区别
- 数字示波器的三大指标
- flash mx拖拽实例_集成Flash MX 2004和Director MX 2004
热门文章
- 兰州大学微型计算机原理及应用,兰州大学信息学院微型计算机原理及应用试题答案01...
- Object-C 类
- 《水经注地图服务》发布的卫星影像数据在ArcMap中调用
- 【操作说明】RTSP/GB28181/EHOME协议视频融合平台EasyCVR如何通过OBS接收RTMP协议推流
- 英文写作中的最常见“十大句式”
- 2023北京智源大会亮点回顾 | 高性能计算、深度学习和大模型:打造通用人工智能AGI的金三角
- PCDN--P2P技术与CDN的融合创新
- e签宝签署电子合同使用手册
- torchtext安装
- Centos8安装英伟达显卡驱动并通过docker部署深度学习环境