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