优化投屏服务的建议标准:DLNA代理
天下| 知乎| 2025-07-14
【流媒体网】摘要:DLNA扩展标准实现"投应用"新体验,优化传统投屏操作流程。

  这是一个建议的DLNA扩展标准,是在之前思路基础上的进一步完善,目的是用“投应用”的方式优化“投屏”体验。用户投屏后,在大屏端操作快应用,而不是操作媒体流。

  手机端在搜索可用投屏设备时,获得支持超级投屏的设备(服务)列表,同时也得到传统DLNA投屏设备列表,用户可以选择投到哪个服务上。直接上DLNA的XML定义代码吧。

  1)服务列表

<root xmlns="urn:schemas-upnp-org:device-1-0">
<specVersion>
<major>1</major>
<minor>0</minor>
</specVersion>
<device>
<deviceType>urn:schemas-upnp-org:device:QuickTVApp:1</deviceType>
<friendlyName>设备(53d)</friendlyName>
<manufacturer>某某电视厂商</manufacturer>
<modelDescription>该设备支持超级投屏协议</modelDescription>
<modelName>QuickTVApp</modelName>
<modelNumber>1</modelNumber>
<UDN>uuid:615e4aa359eb40ddb3d56b66c4e3053d</UDN>
<serviceList>
<service>
!-- 自定义服务名称 -->
<serviceType>urn:schemas-upnp-org:service:QuickTVApp:1</serviceType>
<serviceId>urn:upnp-org:serviceId:QuickTVApp</serviceId>
<SCPDURL>/upnp/dev/615e4aa359eb40ddb3d56b66c4e3053d/svc/upnp-org/QuickTVApp/desc</SCPDURL>
<controlURL>/upnp/dev/615e4aa359eb40ddb3d56b66c4e3053d/svc/upnp-org/QuickTVApp/action</controlURL>
<eventSubURL>/upnp/dev/615e4aa359eb40ddb3d56b66c4e3053d/svc/upnp-org/QuickTVApp/event</eventSubURL>
</service>
</serviceList>
</device>
</root>

  2)服务定义

<scpd xmlns="urn:schemas-upnp-org:service-1-0">
<specVersion>
<major>1</major>
<minor>0</minor>
</specVersion>
<actionList>
<action>
<name>RunApp</name>
<argumentList>
<argument>
<name>Data</name>
<direction>in</direction>
<relatedStateVariable>Data</relatedStateVariable>
</argument>
</argumentList>
</action>
</actionList>
<serviceStateTable>
<stateVariable sendEvents="no">
<name>Data</name>
<dataType>string</dataType>
</stateVariable>
</serviceStateTable>
</scpd>

  3)接收端协议配置。

public interface QuickTVAppConfiguration {
/**
* 日志输出级别, 默认为 {@link java.util.logging.Level#ALL}
* @return {@link java.util.logging.Level }
*/
 Level getLogLevel();
/**
* 获取该平台使用的底座包名
* @return 底座包名,如果没有安装,会调用 {@link #requestInstallApp(String)} 方法
*/
String getRuntimeAppPackageName(String wantPackageName);
/**
* 获取该平台对应的视听应用包名
* @return 包名,如果没有安装,会调用 {@link #requestInstallApp(String)} 方法
*/
String getNativeAppPackageName(String wantPackageName);
/**
* 请求安装应用
* @param packageName 底座包名
*/
void requestInstallApp(String packageName);
}

  4)客户端调用示例

// 启动快应用
QuickIntent intent = new QuickIntent();
intent.setRunAppType(Action.RunAppType.QUICK_APP);
// 希望拉起的底座包名
intent.setPackage("com.extscreen.runtime");
intent.setData((uri.parse( uriString: "esapp://es.skill.weather.tv?from=cmd"));
// 转换json并发送
action.setInput("Data", QuickTVAppHelper.toJson(intent));
// 启动原生应用(以B站为例)
QuickIntent intent = new QuickIntent();
intent.setRunAppType(Action.RunAppType.NATIVE_APP);
intent.setPackage("com.xiaodianshi.tv.yst");
intent.setClassName("com.xiaodianshi.tv.yst", "com.xiaodianshi.tv.yst.ui.transition.TransitionActivity");
intent.putExtra("type", "3");
JSONObject value = new JSONObject();
try {
value.put("isBangumi", "1");
 value.put("seasonId", "24583");
value.put("epId", "232280");
 value.put("progress", "0");
} catch (JSONException ignore) {
}
intent.putExtra("value", value.toString());
intent.putExtra("from", "appName");
intent.putExtra("resource", "2");
// 转换json并发送
action.setInput("Data", QuickTVAppHelper.toJson(intent));

责任编辑:凌美

分享到:
版权声明:凡注明来源“流媒体网”的文章,版权均属流媒体网所有,转载需注明出处。非本站出处的文章为转载,观点供业内参考,不代表本站观点。文中图片均来源于网络收集整理,仅供学习交流,版权归原作者所有。如涉及侵权,请及时联系我们删除!