dlna 投屏软件源代码
时间: 2023-10-05 12:04:39 浏览: 104
DLNA(Digital Living Network Alliance)是一种无线传输技术,可用于在不同设备之间共享音频、视频和图像等媒体内容。在DLNA技术的支持下,用户可以使用一个设备将多媒体内容共享到另一个设备上,例如将手机上的视频投放到电视或音响上播放。下面是一个简单的DLNA投屏软件的源代码示例:
```java
import org.teleal.cling.controlpoint.ActionCallback;
import org.teleal.cling.controlpoint.ControlPoint;
import org.teleal.cling.model.action.ActionInvocation;
import org.teleal.cling.model.meta.RemoteDevice;
import org.teleal.cling.model.meta.RemoteService;
import org.teleal.cling.model.types.ServiceType;
import org.teleal.cling.registry.Registry;
import org.teleal.cling.registry.RegistryListener;
import org.teleal.cling.support.avtransport.callback.SetAVTransportURI;
import org.teleal.cling.support.avtransport.lastchange.AVTransportVariable;
import org.teleal.cling.support.avtransport.lastchange.AVTransportVariable.TransportState;
import org.teleal.cling.support.connectionmanager.callback.GetProtocolInfo;
import org.teleal.cling.support.model.ProtocolInfos;
import org.teleal.cling.support.model.TransportState;
import org.teleal.cling.support.model.TransportStatus;
import org.teleal.cling.support.renderingcontrol.callback.GetVolume;
import org.teleal.cling.support.renderingcontrol.callback.SetVolume;
import java.util.logging.Logger;
public class DLNAThrower implements RegistryListener {
private static final Logger log = Logger.getLogger(DLNAThrower.class.getName());
private ControlPoint controlPoint;
public DLNAThrower(ControlPoint controlPoint) {
this.controlPoint = controlPoint;
}
public void throwTo(String url, RemoteDevice renderer) {
log.info("Throwing: " + url + " to " + renderer.getDetails().getFriendlyName());
// Get the A/V transport service
RemoteService avTransportService = renderer.findService(new ServiceType("schemas-upnp-org", "AVTransport"));
// Set the transport URI
SetAVTransportURI setAVTransportURI = new SetAVTransportURI(avTransportService, url) {
@Override
public void success(ActionInvocation invocation) {
// Start playing
ActionCallback play = new ActionCallback(avTransportService.getAction("Play"));
controlPoint.execute(play);
}
@Override
public void failure(ActionInvocation invocation, UpnpResponse operation, String defaultMsg) {
log.warning("AVTransport failed: " + defaultMsg);
}
};
controlPoint.execute(setAVTransportURI);
}
public void stop(RemoteDevice renderer) {
log.info("Stopping: " + renderer.getDetails().getFriendlyName());
// Get the A/V transport service
RemoteService avTransportService = renderer.findService(new ServiceType("schemas-upnp-org", "AVTransport"));
// Stop playback
ActionCallback stop = new ActionCallback(avTransportService.getAction("Stop"));
controlPoint.execute(stop);
}
public void setVolume(RemoteDevice renderer, int volume) {
log.info("Setting volume of: " + renderer.getDetails().getFriendlyName() + " to " + volume);
// Get the rendering control service
RemoteService renderingControlService = renderer.findService(new ServiceType("schemas-upnp-org", "RenderingControl"));
// Set the volume
SetVolume setVolume = new SetVolume(renderingControlService, volume) {
@Override
public void failure(ActionInvocation invocation, UpnpResponse operation, String defaultMsg) {
log.warning("SetVolume failed: " + defaultMsg);
}
};
controlPoint.execute(setVolume);
}
public int getVolume(RemoteDevice renderer) {
log.info("Getting volume of: " + renderer.getDetails().getFriendlyName());
// Get the rendering control service
RemoteService renderingControlService = renderer.findService(new ServiceType("schemas-upnp-org", "RenderingControl"));
// Get the current volume
GetVolume getVolume = new GetVolume(renderingControlService) {
@Override
public void received(ActionInvocation actionInvocation, int currentVolume) {
log.info("Volume is: " + currentVolume);
}
@Override
public void failure(ActionInvocation invocation, UpnpResponse operation, String defaultMsg) {
log.warning("GetVolume failed: " + defaultMsg);
}
};
controlPoint.execute(getVolume);
return 0;
}
public void showProtocolInfo(RemoteDevice renderer) {
log.info("Getting protocol info of: " + renderer.getDetails().getFriendlyName());
// Get the connection manager service
RemoteService connectionManagerService = renderer.findService(new ServiceType("schemas-upnp-org", "ConnectionManager"));
// Get the protocol info
GetProtocolInfo getProtocolInfo = new GetProtocolInfo(connectionManagerService) {
@Override
public void received(ActionInvocation actionInvocation, ProtocolInfos source, ProtocolInfos sink) {
log.info("Protocol info received: " + source + ", " + sink);
}
@Override
public void failure(ActionInvocation invocation, UpnpResponse operation, String defaultMsg) {
log.warning("GetProtocolInfo failed: " + defaultMsg);
}
};
controlPoint.execute(getProtocolInfo);
}
@Override
public void remoteDeviceDiscoveryStarted(Registry registry, RemoteDevice device) {
log.info("Remote device discovery started: " + device.getDetails().getFriendlyName());
}
@Override
public void remoteDeviceDiscoveryFailed(Registry registry, RemoteDevice device, Exception ex) {
log.warning("Remote device discovery failed: " + device.getDetails().getFriendlyName() + " - " + ex);
}
@Override
public void remoteDeviceAdded(Registry registry, RemoteDevice device) {
log.info("Remote device added: " + device.getDetails().getFriendlyName());
}
@Override
public void remoteDeviceUpdated(Registry registry, RemoteDevice device) {
log.info("Remote device updated: " + device.getDetails().getFriendlyName());
}
@Override
public void remoteDeviceRemoved(Registry registry, RemoteDevice device) {
log.info("Remote device removed: " + device.getDetails().getFriendlyName());
}
@Override
public void localDeviceAdded(Registry registry, LocalDevice device) {
log.info("Local device added: " + device.getDetails().getFriendlyName());
}
@Override
public void localDeviceRemoved(Registry registry, LocalDevice device) {
log.info("Local device removed: " + device.getDetails().getFriendlyName());
}
@Override
public void beforeShutdown(Registry registry) {
log.info("Before shutdown");
}
@Override
public void afterShutdown() {
log.info("After shutdown");
}
}
```
需要注意的是,这只是一个简单的示例代码,并不完整,如果要使用该代码,请根据自己的需求进行适当修改和完善。同时,该代码使用了UPnP协议,如果您需要使用其他协议,需要修改代码以适应其他协议的要求。
相关推荐
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)