1. function description
Mobile phone app docking directly connected devices play video function
2. Interface description
2.1 Android Device Lookup Interface
-
Description: Open Find Object
Prototype: long SDOpenSearch()
Return value: 0 indicates failure, others are success.
Remarks: -
Description: Get Find Results
Prototype: int SDGetSearchResult(long lSearchHandle, byte[] szDevInfo, int nLength)
Parameters: lSearchHandle: SDOpenSearch return value
szDevInfo: DevIDNO:NetType(0=Wifi, 1=Net):IP:DevType:chn
Return value: 0 indicates success, others indicate failure. -
Description: Start Finding
prototype: int SDStartSearch(long lSearchHandle)
Parameters: lSearchHandle: SDOpenSearch return value
Return value: 0 indicates success, others indicate failure. -
Description: Stop Find
prototype: int SDStopSearch(long lSearchHandle)
Parameters: lSearchHandle: SDOpenSearch return value
Return value: 0 indicates success, others indicate failure. -
Description: Close search
prototype: int SDCloseSearch (long lSearchHandle)
Parameters: lSearchHandle: SDOpenSearch return value
Return value: 0 indicates success, others indicate failure.
Example:
private long mSearchHandle = 0;
private Handler mHandler = new Handler();
private SearchRunnable mSearchRunnable = new SearchRunnable();
protected void startSearch() {
if (0 == mSearchHandle) {
mSearchHandle = NetClient.SDOpenSearch();
mSearchList.clear();
NetClient.SDStartSearch(mSearchHandle, NetClient.SEARCH_ DEFAULT_PORT); // Default port is 6688
mHandler.postDelayed(mSearchRunnable, 200);
}
}
protected void stopSearch() {
if (0! = mSearchHandle) {
NetClient.SDStopSearch(mSearchHandle);
NetClient.SDCloseSearch(mSearchHandle);
mHandler.removeCallbacks(mSearchRunnable);
mSearchHandle = 0;
}
}
final class SearchRunnable implements Runnable {
public void run() {
boolean isFinished = false;
if (0! = mSearchHandle) {
while (true) {
byte[] result = new byte[1024];
java.util.Arrays.fill(result, (byte)0);
int ret = NetClient.SDGetSearchResult(mSearchHandle, result, 1024);
if (ret == NetClient.NET_SUCCESS) {
int I = 0;
for (I = 0; I <result.length; I) {
if (result[ I] == 0) {
break;
}
}
byte[] temp = new byte[ I];
System.arraycopy(result, 0, temp, 0, I);
// szDevInfo DevIDNO:NetType(0=3G, 1 = Wifi, 2 = Net):NetName:IP:DevType:chn
String devInfo = new String(temp);
String[] info = devInfo.split(":");
DeviceSearch search = new DeviceSearch();
search.setDevIdno(info[0]);
search.setNetType(Integer.parseInt(info[1]));
search.setNetName(info[2]);
// LAN IP address of the device, which is used for direct video playback
search.setIpAddr(info[3]);
search.setDevType(Integer.parseInt(info[4]));
search.setChannel(Integer.parseInt(info[5]));
mSearchList.add(search);
continue;
}
else if (ret == NetClient.SEARCH_FINISHED) {
isFinished = true;
if (mSearchList.size() > 0) {
mAdapter.setData(mSearchList);
onListLoadSuccess(false);
} else {
setListNullTip(R.string.cam_search_null);
onListLoadSuccess(true);
}
}
break;
}
}
if (! isFinished) {
mHandler.postDelayed(mSearchRunnable, 200);
}
}
}
2.2 IOS Device Discovery Interface
-
Description: Open Find Object
Prototype: NETMEDIA_API int API_CALL NETMEDIA_SDOpenSearch(long lpSearchHandle);
Parameters: long lpSearchHandle output, search object
Return value: 0 indicates success, others indicate failure. -
Description: Open Find Object
Prototype: NETMEDIA_API int API_CALL NETMEDIA_SDOpenSearch(long lpSearchHandle);
Parameters: long lpSearchHandle output, search object
Return value: 0 indicates success, others indicate failure.
(void)startSearch {
if (0 == mSearchHandle) {
//mHubLoading = [[MBProgressHUD showHUDAddedTo:self.view animated:YES] retain];
//mHubLoading.labelText = NSLocalizedString(@"cam_search_tip", @"");
//mHubLoading.delegate = self;
if ([mLstDevice count] > 0) {
[mLstDevice removeAllObjects];
[_mListCamera reloadData];
}
_mLbLoadTip.text = NSLocalizedString(@"cam_search_tip", @"");
_mLbLoadTip.hidden = NO;
NETMEDIA_SDOpenSearch(&mSearchHandle);
//mSearchList.clear();
NETMEDIA_SDStartSearch(mSearchHandle, SEARCH_DEFAULT_PORT);
mTimerSearch = [NSTimer scheduledTimerWithTimeInterval:0.04 target:self selector:@selector(onTimerSearch) userInfo:nil repeats:YES ];
}
}
(void)stopSearch {
if (0! = mSearchHandle) {
NETMEDIA_SDStopSearch(mSearchHandle);
NETMEDIA_SDCloseSearch(mSearchHandle);
mSearchHandle = 0;
_mLbLoadTip.text = @"";
if( mTimerSearch! = nil) {
[mTimerSearch invalidate ];
mTimerSearch= nil;
}
}
}
(void) onTimerSearch {
char result[1024] = {0};
int ret = NETMEDIA_SDGetSearchResult(mSearchHandle, result, 1024);
if (ret == NETMEDIA_ OK) {
NSString *str = [NSString stringWithCString:result encoding:NSUTF8StringEncoding];
// szDevInfo DevIDNO:NetType(0=3G, 1 = Wifi, 2 = Net):NetName:IP:DevType:chn
NSArray *aArray = [str componentsSeparatedByString:@":"];
TTXDeviceSearch* search = [[TTXDeviceSearch alloc] init];
search.devIdno = aArray[0];
search.netType = [aArray[1] intValue];
search.netName = aArray[2];
search.ipAddr = aArray[3];
search.devType = [aArray[4] intValue];
search.channel = [aArray[5] intValue];
[mLstDevice addObject:search];
[search release];
} else if (ret == NETMEDIA_SEARCH_FINISHED) {
if (mHubLoading! = nil) {
[mHubLoading hide:YES];
}
[self stopSearch];
if ([mLstDevice count] > 0) {
[_mListCamera reloadData];
} else {
[_mImgLoadTip setImage:[UIImage imageNamed:@"images/camlist_nodata.png"]];
_mImgLoadTip.hidden = NO;
_mLbLoadTip.text = NSLocalizedString(@"cam_search_null", @"");
_mLbLoadTip.hidden = NO;
}
}
}