如何通过浏览器输入一个地址播放手机上的视频?

在手机端搭建了一个服务器。

手机端的Server利用的是该库:

  • https://github.com/koush/AndroidAsync

先把服务器搭起来

依赖库

首先,依赖下我们搭建Server需要用到的库:

compile 'com.koushikdutta.async:androidasync:2.+'

编写简易html

然后我们在assets下编写一个html文件用于浏览器访问,index.html

最简单的即可:

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8">
</head><body>嘿嘿嘿,连通了...</body></html>

启动服务,监听端口

public class MainActivity extends AppCompatActivity {private AsyncHttpServer server = new AsyncHttpServer();private AsyncServer mAsyncServer = new AsyncServer();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);server.get("/", new HttpServerRequestCallback() {@Overridepublic void onRequest(AsyncHttpServerRequest request, AsyncHttpServerResponse response) {try {response.send(getIndexContent());} catch (IOException e) {e.printStackTrace();response.code(500).end();}}});server.listen(mAsyncServer, 54321);}@Overrideprotected void onDestroy() {super.onDestroy();if (server != null) {server.stop();}if (mAsyncServer != null) {mAsyncServer.stop();}}private String getIndexContent() throws IOException {BufferedInputStream bInputStream = null;try {bInputStream = new BufferedInputStream(getAssets().open("index.html"));ByteArrayOutputStream baos = new ByteArrayOutputStream();int len = 0;byte[] tmp = new byte[10240];while ((len = bInputStream.read(tmp)) > 0) {baos.write(tmp, 0, len);}return new String(baos.toByteArray(), "utf-8");} catch (IOException e) {e.printStackTrace();throw e;} finally {if (bInputStream != null) {try {bInputStream.close();} catch (IOException e) {e.printStackTrace();}}}}
}

可以看到很简单,创建AsyncHttpServer对象,我们在onCreate中调用get,对外设置一个get型的url监听,监听的url是/即根目录。

然后调用listen,传入端口号54321,开启对该端口的监听。

onDestroy的时候停止服务器。

当捕获到对”/”的访问时,读取assets下的index.html返回给浏览器。

记得添加网络权限。

好了,运行demo,测试一下。

输入地址,你的手机的IP:端口号。

注意电脑和手机在同一个网段!

然后你应该看到如下效果图:

完善Demo

接下来,我们将手机上的mp4返回让其在浏览器上显示。

很简单,既然我们可以监听/,返回一个index.html,我们就能监听另一个url,返回文件目录。

server.get("/files", new HttpServerRequestCallback() {@Overridepublic void onRequest(AsyncHttpServerRequest request, AsyncHttpServerResponse response) {JSONArray array = new JSONArray();File dir = new File(Environment.getExternalStorageDirectory().getPath());String[] fileNames = dir.list();if (fileNames != null) {for (String fileName : fileNames) {File file = new File(dir, fileName);if (file.exists() && file.isFile() && file.getName().endsWith(".mp4")) {try {JSONObject jsonObject = new JSONObject();jsonObject.put("name", fileName);jsonObject.put("path", file.getAbsolutePath());array.put(jsonObject);} catch (JSONException e) {e.printStackTrace();}}}}response.send(array.toString());}
});

我们监听/files这个Url,然后返回Sdcard根目录的视频文件,拼接成JSON返回。

这里如果你重新启动,在浏览器上输入:

http://192.168.1.100:54321/files

会看到一堆JSON数据:

但是我们需要在刚才的html上显示,所以这个请求应该是刚才的Html页面发起:

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><script src="jquery-1.7.2.min.js" type="text/javascript"></script><title>文档的标题</title><script type="text/javascript">$(function() {var now = new Date();var url = 'files' + '?' + now.getTime();// 请求JSON数据$.getJSON(url, function(data) {// 编辑JSON数组for (var i = 0; i < data.length; i++) {// 为每个对象生成一个li标签,添加到页面的ul中var $li = $('<li>' + data[i].name + '</li>');$li.attr("path", data[i].path);$("#filelist").append($li);}});});</script>
</head><body><ul id="filelist" style="float:left;"></ul></body></html>

可能很多朋友没了解过js,不过应该能看明白,$.getJSON获取返回的JSON数组,然后遍历为每个Json对象生成一个li标签,添加到页面上。

这里用了jquery,对于js的也需要也请求处理,这里省略了,很简单,看源码即可。

此时访问,已经可以显示出视频目录了:

接下来就是点击播放了,在html里面有个标签叫video用于播放视频的,他有个src属性用于设置播放的视频路径。

所以我们要做的仅为:

  • 点击名字,拿到该视频对应的url,然后设置给video的src属性即可。

那么视频的url是什么?

刚才我们返回了视频的路径,所以我们只要再监听一个url,将根据传入的视频路径,将视频文件流返回即可。

server.get("/files/.*", new HttpServerRequestCallback() {@Overridepublic void onRequest(AsyncHttpServerRequest request, AsyncHttpServerResponse response) {String path = request.getPath().replace("/files/", "");try {path = URLDecoder.decode(path, "utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}File file = new File(path);if (file.exists() && file.isFile()) {try {FileInputStream fis = new FileInputStream(file);response.sendStream(fis, fis.available());} catch (Exception e) {e.printStackTrace();} return;}response.code(404).send("Not found!");}
});

我们又监听了一个url为files/xxx.*,捕获到之后,拿到文件名,去SDCard找到该文件,返回文件流即可。

html端的代码为:

<script type="text/javascript">$(function() {var now = new Date();// 拿到video对象var $video = $("#videoplayer");var url = 'files' + '?' + now.getTime();$.getJSON(url, function(data) {for (var i = 0; i < data.length; i++) {var $li = $('<li>' + data[i].name + '</li>');$li.attr("path", data[i].path);$("#filelist").append($li);// 点击的时候,获取路径,设置给video的src属性$li.click(function() {var p = "/files/" + $(this).attr("path");$video.attr("src", "/files/" + $(this).attr("path"));$video[0].play();});}});});</script>

当然页面上body标签内部也多了一个video标签。

 <video id="videoplayer" controls="controls"></video>

到这里,所以的代码就介绍完了~~

小结

回头看,其实就是app中启动服务器,监听一些url,然后针对性的返回文本、json、文件流等。

当然了,可以做的时候也挺多的,甚至可以做个PC版本的文件浏览器。

可能有很多人对html,js不太熟悉,不过还是建议简单了解下,或者敲一下本例,因为本例代码很少,值得作为上手教程。

源码地址:https://github.com/suyimin/ShowPhoneMp4

搭建Android上的服务器相关推荐

  1. 搭建Android上的服务器 “实现隔空取物”

    最近...因为无聊...对,傲娇的我因为无聊去看了鸿神的博客https://blog.csdn.net/lmj623565791/article/details/79081656 这里贴出来安利一下. ...

  2. ubuntu11.04上搭建Android推送服务器

    来自:http://download.csdn.net/download/johnny901114/4410546 查阅了一些网上关于Android上实现推送的文章 , 常用的实现方法有: 1.使用a ...

  3. 快速搭建Android应用后台服务器

    一直没单独一个人搭建过后台,之前都是用的云服务后台,跟着帖子一步一步走,最终完美实现后台与移动端的数据沟通,顿时感觉棒棒哒,特此记录一下.很感谢下面帖子的博主得无私分享! 一.后台的搭建 1.自己动手 ...

  4. Linux服务器Android环境配置,基于BusyBox+LinuxDeploy+JuiceSSH搭建Android上的Linux服务器教程...

    一.首先准备一部具有root权限的安卓机 1.Busybox(apk) BusyBox就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 Android 系统的自带的shell ...

  5. nginx 访问图片上传服务器出现403错误解决方案

    近期在nginx+ftp搭建图片上传服务器的时候,在浏览器访问图片路径出现403错误,经搜集各位大神的回答,整理以下内容: 大家可以按下面的介绍,一一排除自己的问题,欢迎大家指正! 1.首先查看ngi ...

  6. android上的i-jetty (1)环境搭建

    android上的i-jetty (1)环境搭建 android ftp swiftp  http://code.google.com/p/swiftp/ 介绍下如果把android设备作为一个web ...

  7. 【Android RTMP】RTMP 直播推流阶段总结 ( 服务器端搭建 | Android 手机端编码推流 | 电脑端观看直播 | 服务器状态查看 )

    文章目录 安卓直播推流专栏博客总结 一. 服务器搭建 二. 手机端推流 三. 电脑端观看直播 四. RTMP 服务器端状态 安卓直播推流专栏博客总结 Android RTMP 直播推流技术专栏 : 0 ...

  8. Android 本地tomcat服务器接收处理手机上传的数据之案例演示

    上一篇:Android 本地tomcat服务器接收处理手机上传的数据之环境搭建     本篇基于上一篇搭建的服务器端环境,具体介绍Android真机上传数据到tomcat服务器的交互过程   场景:A ...

  9. 移动端上传大文件到服务器,android上传大文件到服务器地址

    android上传大文件到服务器地址 内容精选 换一换 安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器.例如QQ.exe.在本地主机和Windows云服务器 ...

最新文章

  1. Redis集群——利用Gearman在Lnmp架构中做MySQL的缓存服务器
  2. python小程序代码50 到100行-Python代码不到四十行简单暴力,微信跳一跳小程序轻松过万...
  3. RMAN无法删除归档日志
  4. Java图片文本识别工具Eye实现(不支持中文)
  5. log4js linux,如何在项目中使用log4.js的方法步骤
  6. uCOS中任务调度时的上下文切换
  7. 计算机中有关数及编码的知识,计算机中有关数及编码的知识
  8. 厉害了!90后奥运冠军被北大录取
  9. 别再用Else语句写代码了!
  10. 有关emoji表情以及utf-16编码
  11. 遇到一个gcc编译器版本导致的运行结果有差异的问题
  12. 环形线圈车辆检测器突破了LOOP-LOCK
  13. Excel如何将汉字转成拼音
  14. SpringBoot解决跨域请求的OPTIONS问题
  15. Gartner数据库魔力象限2022:阿里领先、腾讯再次进入、华为退出
  16. 如何重装服务器的系统教程,如何重装服务器系统教程
  17. 表格的背景图片怎么弄HTML,HTML中新建表格怎么加背景
  18. BZOJ 3875 Ahoi2014 骑士游戏 SPFA
  19. android智能手机编程考试答案,Android智能手机编程形考作业
  20. Unable to import required dependencies: pytz: No module named ‘pytz‘ ,dateutil: No module named【已解决】

热门文章

  1. vant-Weapp实现省市区三级联动顶部弹出列表
  2. 阻止浏览器默认行为事件
  3. 功能覆盖率与代码覆盖率区别
  4. WE WANT U ┃中天微 国防科技大学2017届硕士专场校园宣讲会
  5. python对市场营销-python数据分析:商品数据化运营(上)——知识点
  6. ArcPy之读取几何要素(shapefile)的坐标
  7. 程序中中文乱码问题的总结
  8. 遥信遥测遥控遥调四大概念介绍
  9. matlab function调用m文件,matlab下编写和调用函数(在同一个m文件中)
  10. 网易邮箱恢复服务器上删除邮件吗,网易企业邮箱普通邮箱删除邮件找回