DLNA投影到局域網設備

public class MainActivity extends Activity implements ServiceListener {

	InetAddress deviceAddress = null;
	private ServiceInfo info = null;
	AirPlayClientService clientService = null;
	private JmDNS jmdns;
	private URL url;
	private Button button;
	private TextView device;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		button = (Button) findViewById(R.id.button_DLNA);
		button.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);
		button.setText("初始化設備信息");
		device = (TextView) findViewById(R.id.text_divice);
		new Thread(new Runnable() {
			public void run() {
				if (deviceAddress == null) {
					deviceAddress = getWifiInetAddress();
				}
				if (null == jmdns) {
					try {
						jmdns = JmDNS.create(deviceAddress);
						jmdns.addServiceListener("_airplay._tcp.local.",
								MainActivity.this);
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		}).start();
		button.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				if (info != null
						&& !TextUtils.isEmpty(device.getText().toString())) {
					if (clientService != null) {
						clientService.shutdown();
						clientService = null;
					}
					clientService = new AirPlayClientService(airCall);
					try {
						url = new URL(//地址失效請自行更換
								"http://1.82.221.118/183/45/43/letv-uts/14/ver_00_22-1031466708-avc-413503-aac-32000-5974083-339598191-a4db8810f80db2515f340a178a4450ef-1457769569201.m3u8?crypt=32aa7f2e330&b=454&nlh=4096&nlt=60&bf=58&p2p=1&video_type=mp4&termid=0&tss=ios&platid=3&splatid=322&its=0&qos=3&fcheck=0&amltag=0&mltag=0&proxy=1965175626,3683667991,1778917250&uid=2883415977.rp&keyitem=GOw_33YJAAbXYE-cnQwpfLlv_b2zAkYctFVqe5bsXQpaGNn3T1-vhw..&ntm=1484564400&nkey=ba3bb74d63c86517b7c839e5136acd5b&nkey2=9b31c6a596c80658fdc5149e412a6ccc&geo=CN-23-323-1&mmsid=47652365&tm=1484546287&key=b07f25f327c417fc49e5e69ddc80fca5&playid=0&vtype=13&cvid=1381041890757&payff=0&sign=mb&dname=mobile&tag=mobile&errc=0&gn=1229&vrtmcd=107&buss=0&cips=171.221.111.169");
						clientService.playVideo(url, info);
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					if (jmdns != null) {
						try {
							jmdns.removeServiceListener("_airplay._tcp.local.",
									MainActivity.this);
							jmdns.close();
							jmdns = null;
						} catch (Exception e) {
							// TODO: handle exception
						} finally {
							Toast.makeText(MainActivity.this, "推送到DLNA成功",
									Toast.LENGTH_LONG).show();
						}
					}
				} else {
					Toast.makeText(MainActivity.this, "正在初始化設備信息",
							Toast.LENGTH_LONG).show();
					new Thread(new Runnable() {
						public void run() {
							if (deviceAddress == null) {
								deviceAddress = getWifiInetAddress();
							}
							if (null == jmdns) {
								try {
									jmdns = JmDNS.create(deviceAddress);
									jmdns.addServiceListener(
											"_airplay._tcp.local.",
											MainActivity.this);
								} catch (IOException e) {
									// TODO Auto-generated catch block
									e.printStackTrace();
								}
							}
						}
					}).start();
				}
			}
		});
	}

	Handler handler = new Handler();

	@Override
	public void serviceAdded(final ServiceEvent event) {
		// TODO Auto-generated method stub
		Log.e("name = " + event.getName(), "info = "
				+ event.getInfo().toString());
		info = event.getInfo();
		handler.post(new Runnable() {

			@Override
			public void run() {
				// TODO Auto-generated method stub
				jmdns.requestServiceInfo(event.getType(), event.getName(), 1000);
			}
		});
	}

	@Override
	public void serviceRemoved(ServiceEvent event) {
		// TODO Auto-generated method stub
	}

	@Override
	public void serviceResolved(ServiceEvent event) {
		// TODO Auto-generated method stub
		info = event.getInfo();
		Log.e("name2 = " + event.getName(), "info = "
				+ event.getInfo().toString());
		handler.post(new Runnable() {

			@Override
			public void run() {
				// TODO Auto-generated method stub
				button.getPaint().setFlags(0);
				button.setText("投屏到DLNA");
				device.setText("Name:" + info.getName() + "\n" + "URL:"
						+ info.getURL());
			}
		});
	}

	private InetAddress getWifiInetAddress() {
		try {
			for (Enumeration en = NetworkInterface
					.getNetworkInterfaces(); en.hasMoreElements();) {
				NetworkInterface intf = en.nextElement();
				for (Enumeration enumIpAddr = intf
						.getInetAddresses(); enumIpAddr.hasMoreElements();) {
					InetAddress inetAddress = enumIpAddr.nextElement();
					if (!inetAddress.isLoopbackAddress()
							&& inetAddress instanceof Inet4Address) {
						return (inetAddress);
					}
				}
			}
		} catch (Exception e) {
			return (null);
		}
		return (null);
	}

	AirPlayClientCallback airCall = new AirPlayClientCallback() {

		@Override
		public void onStopVideoSuccess() {
			// TODO Auto-generated method stub
			Toast.makeText(MainActivity.this, "onStopVideoSuccess", Toast.LENGTH_LONG).show();
		}

		@Override
		public void onStopVideoError(String message) {
			// TODO Auto-generated method stub
			Toast.makeText(MainActivity.this, "onStopVideoError", Toast.LENGTH_LONG).show();
		}

		@Override
		public void onPutImageSuccess(File file) {
			// TODO Auto-generated method stub
			Toast.makeText(MainActivity.this, "onPutImageSuccess", Toast.LENGTH_LONG).show();
		}

		@Override
		public void onPutImageError(File file, String message) {
			// TODO Auto-generated method stub
			Toast.makeText(MainActivity.this, "onPutImageError", Toast.LENGTH_LONG).show();
		}

		@Override
		public void onPlayVideoSuccess(URL location) {
			// TODO Auto-generated method stub
			Toast.makeText(MainActivity.this, "onPlayVideoSuccess", Toast.LENGTH_LONG).show();
		}

		@Override
		public void onPlayVideoError(URL location, String message) {
			// TODO Auto-generated method stub
			Toast.makeText(MainActivity.this, "onPlayVideoError", Toast.LENGTH_LONG).show();
		}
	};
}


demo下載地址:http://download.csdn.net/detail/qq_24179679/9738934

發佈了38 篇原創文章 · 獲贊 7 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章