在我开源的APP 弹弹play 概念版 中实现了局域网视频播放的功能,所以将相关功能抽离出来写了个Demo,并写了这篇介绍相关内容的文章。

Demo地址:https://github.com/xyoye/SmbPlayHelper](https://github.com/xyoye/SmbPlayHelper

一、简述

1. 需要实现局域网内视频播放,首要条件是能从局域网文件中拿到InputStream(A),这里局域网内文件浏览的库推荐使用jcifs-ng或smbj,介绍中Demo使用的是jcifs-ng。

2. 由于普通播放器一般不能直接设置InputStream(A)作为播放源,但是播放器大都是能播放http链接的视频,所以转换一下思路,通过创建本地服务端接收播放器的http请求,将InputStream(A)内数据写回播放器,以此实现播放。

二、功能实现

一、创建ServerSocke

1. 获取本地可用的网络接口从中拿到IP。

2. 设置端口,创建ServerSocket。

3. 所以在接收到请求后,会得到一个Socket,在新线程中处理该Sockt。

二、处理Socket

1. 通过从Socket中拿到InputStream(B),将其转换为BufferedInputStream。

2. 从BufferedInputStream中读出请求头信息,主要是读取其中的Range信息,Range的作用是在创建返回体Resonpse时确定返回数据具体的位置。(一般只需要处理"n-"、"-n"、"n-m"这三种格式就可以了)

三、返回Response

1. 拿到Range后需要做相关检验,比如range范围是否超出文件等。

2. 返回Response响应头

3. 将局域网文件的InputStream(A)调整至range开始的位置,再从InputStream按块读取数据,将数据通过Socket的OutputStream写回播放器。

OutputStream outputStream = httpSocket.getOutputStream();
//响应头
outputStream.write(response.getResponseHeader().getBytes());
//必须返回!!!
outputStream.write("\r\n".getBytes());
...
InputStream inputStream = response.getContentInputStream();
//跳转至contentOffset
inputStream.skip(contentOffset);
...
//读数据
int readLen = inputStream.read(readBuffer, 0, (int) readSize);
while (readLen > 0 && readTotalSize < contentLength) {//写回数据outputStream.write(readBuffer, 0, readLen);outputStream.flush();...
}
outputStream.flush();

关于实现局域网内视频播放相关推荐

  1. android局域网播放视频播放器,手机播放器播放局域网内电脑本地的视频

    与手机相比电脑具有功能强.储存大的优点,但我们越来越依赖手机等移动设备,电脑很少开机了.能否把电脑利用起来,为手机等移动设备服务呢?通过设置电脑文件夹共享,同网络中,手机设备可以自由读取电脑硬盘内的文 ...

  2. 教你用直播大师在局域网内发布组播节目

    在很多应用场景中,我们往往需要在局域网内发布组播节目,这样做的好处如下: 1.      节省骨干网带宽资源 Internet上产生的许多新的应用,特别是高带宽的多媒体应用,带来了带宽的急剧消耗和网络 ...

  3. 如何在局域网内开一家电影院

    在局域网内通过搭建服务集群,让你的设备轻轻松松访问电脑中的视频,无需流量,不受网速干扰.本篇主要讲述如何自行搭建该服务. 项目地址:https://github.com/CasterWx/videoC ...

  4. C#_Socket网络编程实现的简单局域网内即时聊天,发送文件,抖动窗口。

    C#_Socket网络编程实现的简单局域网内即时聊天,发送文件,抖动窗口. 最近接触了C#Socket网络编程,试着做了试试(*^__^*) 实现多个客户端和服务端互相发送消息 发送文件 抖动窗口功能 ...

  5. #实现互联网聊天_局域网内两台电脑如何实时语音聊天通话

    有的人想实现局域网内实时语音通话的功能,如果电脑可以连接互联网的话,可安装QQ,电脑版微信等进行实时语音聊天,如果电脑只连接了内网,并未连接因特网,该怎么实现呢?其实不难,只需要通过局域网声音传输软件 ...

  6. win7网络中能看到计算机但无法连接,win7局域网内可以看到对方计算机但无法连接怎么办...

    ‍‍ 平常我们在使用局域网的过程中有难免也出现问题,最近有些雨林木风win7用户在局域网中可以搜索到局域网内其他计算机,但是却无法连接,遇到这种情况该怎么办呢?我们可以根据以下几个步骤进行排查,下面由 ...

  7. 单网卡部署WEB+Mail+FTP+ISA服务器之四:局域网内部署FTP和winwebmail服务器

    一.目的:构建简单FTP和MAIL服务器为下一步发布到互连网做准备.另外如果你觉得Exchange很麻烦,就用winwebmail吧,绝对的简单方便,安全性也不错. 二.网络环境: 三.局域网发布FT ...

  8. 一条批处理语句ping局域网内的所有机器

    执行语句: FOR /L %I in (1,1,255) DO PING 10.0.0.%I -n 1 -w 100 >> pung.txt 说明: FOR /L %I in (1,1,2 ...

  9. 【解决方案】Windows10局域网内配置文件夹共享(附网络中没有找到的情况解决方案)

    第一步,找到对应的文件夹 选择"特定的用户" 这里不好截图,我就不展示图片了. 这里选择下拉框!!! 如果在这里发现有EveryOne的话,就直接点 |||| |||| |||| ...

最新文章

  1. 一文读懂Https的安全性原理、数字证书、单项认证、双项认证等
  2. 查看主机内各组件参数——Cpu、内存、显卡、主板、硬盘(不拆主机方式)
  3. 解决VirtualBox里Ubuntu的共享文件夹无法访问(终极解决方案)
  4. matlab 多径 时变 信道 冲击响应,无线信道—时变冲激响应
  5. 一加6怎么刷android p6,一加6秒速跟进安卓P 教你尝鲜速成开发者
  6. Kali安装Nessus
  7. unity测量模型尺寸
  8. Java多线程,并发核心知识体系总结
  9. Gradle下载与安装
  10. 思科ccie和华为hcie中交换机环路的产生原因和解决方法
  11. Vue3+TypeScript从入门到进阶(六)——TypeScript知识点——附沿途学习案例及项目实战代码
  12. 大数据平台回归SQL
  13. 互联网公司为何杀死中年人?三年醇,五年陈,十年滚!
  14. 一文读懂法拉第未来赴美上市:合并PSAC,能否“卷土重来”?
  15. maven出现lastupdated文件原因与分析
  16. wpf 语音通话_WPF---语音合成与语音识别
  17. Proe Creo 二次开发之模型装配--获得装配约束
  18. 【分享】高精度RTK定位解决方案
  19. MessageSolution 邮件归档系统EEA 信息泄露漏洞 CNVD-2021-10543复现
  20. 计算机操作计划,计算机操作基础教学计划.doc

热门文章

  1. 在 Heroku 部署 PHP,在Heroku上部署PHP项目
  2. 桁架工业机器人编程_桁架机器人规划设计,工业软件开发
  3. 标准地图哪里找?这里的地图为底图,审图无需提供资质
  4. 人脸识别(一)调用face++实现人脸检测。
  5. 软件工程——猫狗大战
  6. windows安装net4.5.2
  7. 16条Macbook苹果电脑保养方法手册
  8. Java System.currentTimeMillis()
  9. 网络安全CTF之Web基础
  10. pip install xlrd报 no matching distribution found for xlrd异常