1、功能说明
手机app对接直连设备播放视频功能
2、接口说明
2.1 Android设备查找接口
-
说明: 打开查找对象
原型:long SDOpenSearch()
返回值:0表示失败,其它为成功
备注: -
说明:获取查找结果
原型:int SDGetSearchResult(long lSearchHandle, byte[] szDevInfo, int nLength)
参数:lSearchHandle: SDOpenSearch的返回值
szDevInfo: DevIDNO:NetType(0=Wifi, 1=Net):IP:DevType:chn
返回值:0表示成功,其它为失败 -
说明:开始查找
原型:int SDStartSearch(long lSearchHandle)
参数:lSearchHandle: SDOpenSearch的返回值
返回值:0表示成功,其它为失败 -
说明:停止查找
原型:int SDStopSearch(long lSearchHandle)
参数:lSearchHandle: SDOpenSearch的返回值
返回值:0表示成功,其它为失败 -
说明:关闭搜索
原型:int SDCloseSearch (long lSearchHandle)
参数:lSearchHandle: SDOpenSearch的返回值
返回值:0表示成功,其它为失败
示例:
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); //默认端口为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]);
//设备局域网IP地址,直连播放视频时使用
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设备查找接口
-
说明:打开查找对象
原型:NETMEDIA_API int API_CALL NETMEDIA_SDOpenSearch(long lpSearchHandle);
参数:long lpSearchHandle 输出,搜索对象
返回值:0表示成功,其它为失败 -
说明:打开查找对象
原型:NETMEDIA_API int API_CALL NETMEDIA_SDOpenSearch(long lpSearchHandle);
参数:long lpSearchHandle 输出,搜索对象
返回值:0表示成功,其它为失败
(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;
}
}
}