2019独角兽企业重金招聘Python工程师标准>>>

功能:让本机的视频在其他设备上播放。

demo 学习中

关键词: cling

demo from: DROID DLNA

关于投屏的原理,协议相关的知识已经在上一篇中说明。

关于设备搜索,查找等不在此处说明。

投屏系统中分: 设备 服务 控制点。

当需要把A 设备中的视频 投屏到 B 设备。

重点是:如何生成本地视频的URL, 这样才能通过 控制点 设置play url 到 播放端。

跟踪demo 代码发现,播放的这个本地视频,返回的是一个xml 数据。节点中提供了这些视频的 thumb , url 。

ContentDirectoryService

这个类中的browse 方法,实现了数据查询和生成方法。

中间的代码写的非常复杂,在

MethodActionExecutor

中用了反射最终调用到这里。 其中的两个service(Local & remote 都不是真正的service)

本地文件的信息在初始化的时候就被全部扫描并添加进来:

ContentTree
addNode

并且生成了 每个节点的url;

这是demo 中生成的 video item 节点

<item id="video-item-27559" parentID="1" restricted="0"><dc:title>SVID_20170929_115451</dc:title><dc:creator>&lt;unknown&gt;</dc:creator><upnp:class>object.item.videoItem</upnp:class><upnp:albumArtURI>http://10.4.58.82:8192/storage/emulated/0/msi/.videothumb/video_thumb_video-item-27559.png</upnp:albumArtURI><dc:description/><res protocolInfo="http-get:*:video/mp4:*" size="123202814" duration="0:3:1" resolution="1280x720">http://10.4.58.82:8192/video-item-27559</res></item>

这是demo 中生成单个播放ship video Item 的方法:

DevicesActivity
String id = ContentTree.VIDEO_PREFIX+ cursor.getInt(cursor.getColumnIndex(MediaStore.Video.Media._ID));String title = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.TITLE));String creator = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.ARTIST));String filePath = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA));String mimeType = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.MIME_TYPE));long size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE));long duration = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION));String resolution = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.RESOLUTION));String description = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DESCRIPTION));Res res = new Res(new MimeType(mimeType.substring(0,mimeType.indexOf('/')), mimeType.substring(mimeType.indexOf('/') + 1)), size, "http://"+ mediaServer.getAddress() + "/" + id);res.setDuration(duration / (1000 * 60 * 60) + ":"+ (duration % (1000 * 60 * 60)) / (1000 * 60) + ":"+ (duration % (1000 * 60)) / 1000);res.setResolution(resolution);VideoItem videoItem = new VideoItem(id, ContentTree.VIDEO_ID,title, creator, res);// add video thumb PropertyString videoSavePath = ImageUtil.getSaveVideoFilePath(filePath,id);DIDLObject.Property albumArtURI = new DIDLObject.Property.UPNP.ALBUM_ART_URI(URI.create("http://" + mediaServer.getAddress()+ videoSavePath));Property[] properties = { albumArtURI };videoItem.addProperties(properties);videoItem.setDescription(description);videoContainer.addItem(videoItem);videoContainer.setChildCount(videoContainer.getChildCount() + 1);ContentTree.addNode(id,new ContentNode(id, videoItem, filePath));

HTTP 视频播放服务:

电视会通过之前手机生成的 视频节点信息中的Uri ,到手机端 请求视频。

处理部分: HttpServer,这个文件是自己实现的,而不是cling 提供的。

String itemId = uri.replaceFirst("/", "");itemId = URLDecoder.decode(itemId);String newUri = null;if( ContentTree.hasNode(itemId) ) {ContentNode node = ContentTree.getNode(itemId);if (node.isItem()) {newUri = node.getFullPath();}}

一些其他的关键词:

DMS:Digital Media Server 数字媒体服务器

DMP:Digital Meidal Player : 播放器

DMC : Controller 控制器

DMR: Renderer  渲染器

转载于:https://my.oschina.net/u/592116/blog/1555630

DLNA 在自己的APP 中添加投屏功能相关推荐

  1. android dlna uri,DLNA 在自己的APP 中添加投屏功能

    功能:让本机的视频在其他设备上播放. demo 学习中 关键词: cling demo from: DROID DLNA 关于投屏的原理,协议相关的知识已经在上一篇中说明. 关于设备搜索,查找等不在此 ...

  2. 如何在eclipse制作的APP中添加背景图

    如何在eclipse制作的APP中添加背景图 1.首先把图片拉入drawable-hdpi中,a1.jpg(注:图片名不可为中文) 2.在.xml文件中加入android:background=&qu ...

  3. 如何在app应用中添加支付宝支付功能

    推广排名q.q①⑨⑨⑦〇⑦④⑥*如何在app应用中添加支付宝支付功能 作为一枚普通的商户,或者 App 的开发人员,如何在对支付完全不了解的情况下,让 App 成功接入支付功能呢? 1)App 想接入 ...

  4. 如何在App中实现朋友圈功能之四在朋友圈中添加发送图片功能——箭扣科技Arrownock

    如何在App中实现朋友圈功能 之四 在朋友圈中添加发送图片功能 实现概念: 当用户在界面点击发送按钮的时候,如果已经有选择好的图片,我们的做法是先上传图片到服务器,再将图片Id作为Post的属性上传. ...

  5. mx播放器有没有投屏功能_芝杜DLNA投屏功能

    DLNA投屏是一个非常高效实用的功能,也是众多高端家用播放器必备功能之一. 简而言之,便是把手机或平板电脑(同时支持苹果与安卓)中的界面,比如在线视频.音乐软件,直接通过播放器投射在电视机大屏幕上. ...

  6. ADB投屏_手机投屏大师app下载-手机投屏大师app安卓版下载v20201026

    手机投屏大师APP提供多种投屏资源,手机安装软件之后就能够快速将手机中的内容投放到电视或者电脑中,无论是视频.音频.图片都可以进行投屏,无需蓝牙和USB连接就可以轻松实现,用户可以在工作会议时使用,也 ...

  7. 如何在App中实现朋友圈功能之二快速实现用户信息的自定义——箭扣科技Arrownock...

    如何在App中实现朋友圈功能 之二 快速实现用户信息的自定义 自我关联社交元素: anSocial中很多的社交元素API,如帖子(Post).相册(Album).文件(File)等,这些API的可选参 ...

  8. 如何在App中实现朋友圈功能之三快速实现双向好友功能——箭扣科技Arrownock

    如何在App中实现朋友圈功能 之三 快速实现双向好友功能 在社交APP的使用中,用户相互添加好友是一个必要的场景,本期技术分享在这里给大家介绍如何利用AnSocial的Friend来实现微博粉丝和微信 ...

  9. 富文本中添加字体选项功能_扑中的字体功能

    富文本中添加字体选项功能 A little extra help for styling your text 样式设置方面的一些额外帮助 I recently learned about a litt ...

最新文章

  1. freeimage例子资料整理
  2. 前端进阶之路 0.1+0.2 !== 0.3?
  3. 关于年终奖励的扣税算法BUG
  4. hive sql 学习笔记
  5. java中runnable_Java:在Runnable中处理RuntimeException
  6. [转]非极大值抑制(Non-Maximum Suppression)
  7. web 网站抢购并发
  8. JVM学习04-垃圾回收概念与算法
  9. 乘法口诀表 java_利用java 实现一个九九乘法口诀表
  10. addEventListener:为单个事件注册多个事件事件处理程序
  11. php随机产生六位数密码
  12. java for 下标_java中foreach语句如何获取数组下标
  13. 中铁建工集团安装公司基于BIM物资施工运维系统由橄榄山软件研发完成
  14. MapReduce之求各个部门工资的总和
  15. java 八皇后问题以及N皇后问题
  16. (附源码)基于java的校园二手书籍交易平台 毕业设计131558
  17. word文档可以打开但显示乱码的完全解决攻略
  18. 阿里云服务器不能发邮件的解决方法
  19. Unity3d vector3.forward和transform.forward的区别!
  20. 对tensorflow.constant()的理解

热门文章

  1. python编程方块_趣味Python编程之经典俄罗斯方块
  2. 公司官网建站笔记(五):域名工信部备案完整流程并解析公网访问
  3. 免费生信课程|多组学数据整合分析之转录组和蛋白质组分析
  4. 学校开展计算机教学的简报,教学工作简报(2019年第5期)
  5. 网易数据分析高级总监:10年数据分析老司机的深度思考!
  6. 微型计算机输出设备 写出六种,2017计算机一级考试强化训练
  7. 黑盒测试——测试准备阶段
  8. 一个26岁没文凭,想去努力自学编程,有机会成为程序员吗?
  9. 移动最小二乘实现点云插值(上采样 | 增采样)详细讲解❤️❤️❤️
  10. 兔子与兔子 字符串hash