При работе с ptz камерой через hcNetSDK пытаюсь получить видеопоток. Функции ptz для камеры работают, то есть двигать её получается. Но стрим не выводится на панель, хотя в логах ошибок не выводит. По логам видно, что удаётся получить указатель на панель. Но вывод не идёт. Ниже один из примеров кода, который отвечает за реализацию данного функционала. (Ubuntu 18.04 x86_64)
public class Main {
public static void main(String... args){
Login login = new Login();
login.LoginActionPerformed();
login.ptz();
}
}
public class Login {
private JFrame frame;
private JPanel parent;
public Panel panelPlay;
public HCNetSDK.NET_DVR_PREVIEWINFO strPreviewInfoGlobal;
public NativeLong lUserIDGlobal;
public static int c=0; // counter to callback
String ip;
static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
HCNetSDK.NET_DVR_USER_LOGIN_INFO struLoginInfo ;
HCNetSDK.NET_DVR_DEVICEINFO_V40 struDeviceInfo;
static HashMap<String, DeviceInfo> m_hashDeviceInfo = new HashMap<>(); // login info
static NativeLong m_lPreviewHandle;// preview handle
public Login() {
parent = new JPanel();
frame = new JFrame("Main Window");
frame.setLayout(new GridLayout(0,2));
frame.setBounds(0, 0, 800, 800);
frame.setBackground(Color.WHITE);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(parent);
parent.setLayout(new GridLayout(3,0));
frame.setVisible(true);
JButton buttonUp = new JButton("Up");
buttonUp.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent mouseEvent) {
mousePressedP(HCNetSDK.TILT_UP);
}
@Override
public void mouseReleased(MouseEvent mouseEvent) {
mousePressedR(HCNetSDK.TILT_UP);
}
});
JButton buttonDown = new JButton("Down");
buttonDown.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent mouseEvent) {
super.mousePressed(mouseEvent);
mousePressedP(HCNetSDK.TILT_DOWN);
}
@Override
public void mouseReleased(MouseEvent mouseEvent) {
super.mouseReleased(mouseEvent);
mousePressedR(HCNetSDK.TILT_DOWN);
}
});
parent.add(buttonUp);
parent.add(buttonDown);
panelPlay = new Panel();
panelPlay.setBackground(Color.LIGHT_GRAY);
parent.add(panelPlay);
}
public void LoginActionPerformed(){
boolean init = hCNetSDK.NET_DVR_Init();
System.out.println("init: " + init);
hCNetSDK.NET_DVR_SetLogToFile(true, "/home/user/ptz_log", true);
String sDeviceIP = "192.168.240.100";
String passwordFieldPwd = "admin123";
String textFieldUserName = "admin";
int iPort = 8000;
struLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();
struDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();
Pointer PointerstruDeviceInfoV40 = struDeviceInfo.getPointer();
Pointer PointerstruLoginInfo = struLoginInfo.getPointer();
for(int i=0; i < sDeviceIP.length(); i++) {
struLoginInfo.sDeviceAddress[i] = (byte)sDeviceIP.charAt(i);
}
for(int i=0; i < passwordFieldPwd.length(); i++) {
struLoginInfo.sPassword[i] = (byte)passwordFieldPwd.charAt(i);
}
for(int i=0; i < textFieldUserName.length(); i++) {
struLoginInfo.sUserName[i] = (byte)textFieldUserName.charAt(i);
}
struLoginInfo.wPort = (short)iPort;
struLoginInfo.write();
System.out.println("NET_DVR_Login_V40 before");
NativeLong nlUserID = hCNetSDK.NET_DVR_Login_V40(PointerstruLoginInfo, PointerstruDeviceInfoV40);
System.out.println("NET_DVR_Login_V40 after");
System.out.println("nlUserID: " + nlUserID);
System.out.println("nlUserID.longValue(): " + nlUserID.longValue());
System.out.println("hCNetSDK.NET_DVR_GetLastError(): " + hCNetSDK.NET_DVR_GetLastError());
System.out.println();
struDeviceInfo.read();
DeviceInfo deviceInfo=new DeviceInfo(sDeviceIP, (short)iPort, textFieldUserName, passwordFieldPwd, struDeviceInfo.struDeviceV30, nlUserID);
createDevice(sDeviceIP, deviceInfo);
System.out.println("byChanNum: " + struDeviceInfo.struDeviceV30.byChanNum);
HCNetSDK.NET_DVR_IPPARACFG strIpparaCfg = new HCNetSDK.NET_DVR_IPPARACFG();
Pointer lpIpParaConfig = strIpparaCfg.getPointer();
IntByReference ibrBytesReturned = new IntByReference(0);// get ip param
boolean bRet = hCNetSDK.NET_DVR_GetDVRConfig(nlUserID, HCNetSDK.NET_DVR_GET_DEVICECFG, new NativeLong(1), lpIpParaConfig, strIpparaCfg.size(), ibrBytesReturned);
System.out.println("bRet: " + bRet);
System.out.println("hCNetSDK.NET_DVR_GetLastError(): " + hCNetSDK.NET_DVR_GetLastError());}
public void ptz(){
NativeLong lUserID = m_hashDeviceInfo.get(ip).GetNUserID();
HCNetSDK.NET_DVR_PREVIEWINFO strPreviewInfo = new HCNetSDK.NET_DVR_PREVIEWINFO();
strPreviewInfo.lChannel = new NativeLong(1);
strPreviewInfoGlobal = strPreviewInfo;
lUserIDGlobal = lUserID;
W32API.HWND hwnd = new W32API.HWND(Native.getComponentPointer(panelPlay)); // get preview handle
System.out.println("Native.getComponentPointer(panelPlay): " + Native.getComponentPointer(panelPlay));
panelPlay.setBackground(Color.BLACK);
strPreviewInfoGlobal.hPlayWnd = hwnd;
strPreviewInfo.hPlayWnd = hwnd;
strPreviewInfo.bBlocked = true;
strPreviewInfo.dwStreamType = 3;
HCNetSDK.FRealDataCallBack_V30 callback = new HCNetSDK.FRealDataCallBack_V30() {
@Override
public void invoke(NativeLong lRealHandle, int dwDataType, ByteByReference pBuffer, int dwBufSize, Pointer pUser) {
System.out.println("----------------");
System.out.println("dwDataType: " + dwDataType);
System.out.println("dwBufSize: " + dwBufSize);
System.out.println("----------------");
System.out.println("callback invocation: " + c++);
}
};
m_lPreviewHandle = hCNetSDK.NET_DVR_RealPlay_V40(lUserID, strPreviewInfo, callback, null);
System.out.println(m_lPreviewHandle);
System.out.println("hCNetSDK.NET_DVR_GetLastError(): " + hCNetSDK.NET_DVR_GetLastError());
}
}
Лог:
OpenJDK 64-Bit Server VM warning: You have loaded library /tmp/jna3700073160137903379.tmp which might have disabled stack guard. The VM will try to fix the stack guard now.
It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'.
init: true
[2018-12-26 11:35:05.984][INF] The COM:Core ver is 5.3.5.2, 2017_11_24. Async:1.
[2018-12-26 11:35:05.984][INF] This hcnetsdk ver is 5.3.5.2 Ver 2017_11_24.
NET_DVR_Login_V40 before
[2018-12-26 11:35:06.006][INF] login dev 192.168.240.100:8000.
[2018-12-26 11:35:06.399][INF] Private connect 192.168.240.100:8000 sock=80 this=0x5c647174 cmd=0x10000 port=53052
[2018-12-26 11:35:06.399][INF] LogonDev1 in[192.168.240.100:8000]
NET_DVR_Login_V40 after
nlUserID: 0
nlUserID.longValue(): 0
hCNetSDK.NET_DVR_GetLastError(): 0
byChanNum: 1
[2018-12-26 11:35:06.467][INF] AbilityAnalyze---Init-- start
bRet: true
hCNetSDK.NET_DVR_GetLastError(): 0
Native.getComponentPointer(panelPlay): native@0x4400024
[2018-12-26 11:35:06.652][DBG] AbilityAnalyze---Init-- over, DeviceList path [/usr/lib/LocalXml/DeviceList.xml], load result[0]
[2018-12-26 11:35:06.652][INF] The COM:VoiceTalk ver is 5.3.5.2, 2017_11_24.
[2018-12-26 11:35:06.652][INF] The COM:HCGeneralCfgMgr ver is 5.3.5.2, 2017_11_24.
[2018-12-26 11:35:06.652][INF] The COM:HCPlayback ver is 5.3.5.2, 2017_11_24.
[2018-12-26 11:35:06.653][INF] The COM:HCIndustry ver is 5.3.5.2, 2017_11_24.
[2018-12-26 11:35:06.653][INF] The COM:HCDisplay ver is 5.3.5.2, 2017_11_24.
[2018-12-26 11:35:06.653][INF] The COM:Preview ver is 5.3.5.2, 2017_11_24.
[2018-12-26 11:35:06.653][INF] The COM:HCAlarm ver is 5.3.5.2, 2017_11_24.
[2018-12-26 11:35:06.654][INF] Private connect 192.168.240.100:8000 sock=80 this=0x5c647174 cmd=0x20000 port=53054
[2018-12-26 11:35:06.660][INF] ID-IP-CHAN[0-192.168.240.100-1] [CPreviewSession::AdjustProtoType] StreamMode[0], StreamProtocol[0xffff]
0
hCNetSDK.NET_DVR_GetLastError(): 0
good
[2018-12-26 11:35:06.844][INF] Private connect 192.168.240.100:8000 sock=83 this=0x5c647174 cmd=0x30001 port=53056
[2018-12-26 11:35:06.847][INF] Private connect 192.168.240.100:8332 sock=84 this=0x5c647708 cmd=0x30001 port=53262
[2018-12-26 11:35:06.847][DBG] ID-IP-CHAN[0-192.168.240.100-1] [CGetUDPStream::RecPlayData] preview UDP Link port[8332] success pLink[5c647708]
[2018-12-26 11:35:06.847][DBG] ID-IP-CHAN[0-192.168.240.100-1] [CGetUDPStream::Start] SUC
[2018-12-26 11:35:06.848][INF] GlobalCtrl load [.//HCNetSDKCom/libSystemTransform.so] with sdk path success and get handle[0x5c6f49a0]
[2018-12-26 11:35:06.848][INF] CStreamConvert::LoadConvertLib Load Succ, m_iInitCount = 1
[2018-12-26 11:35:06.848][DBG] ID-IP-CHAN[0-192.168.240.100-1] RTP Format
[2018-12-26 11:35:06.848][DBG] ID-IP-CHAN[0-192.168.240.100-1] [CPreviewSession::Start] SUCC
----------------
dwDataType: 1
dwBufSize: 40
----------------
callback invocation: 0
----------------
dwDataType: 2
dwBufSize: 116
----------------
callback invocation: 1
----------------
dwDataType: 2
dwBufSize: 64
----------------
callback invocation: 2
----------------
dwDataType: 2
dwBufSize: 20
----------------
callback invocation: 3
----------------
dwDataType: 2
dwBufSize: 5120
----------------
callback invocation: 4
----------------
dwDataType: 2
dwBufSize: 5120
----------------
callback invocation: 5
----------------
dwDataType: 2
dwBufSize: 5120
----------------
callback invocation: 6
----------------
dwDataType: 2
dwBufSize: 5120
----------------
callback invocation: 7
----------------
dwDataType: 2
dwBufSize: 5120
----------------
callback invocation: 8
----------------
dwDataType: 2
dwBufSize: 5120
----------------
callback invocation: 9
----------------
dwDataType: 2
dwBufSize: 5120
----------------
callback invocation: 10
----------------
dwDataType: 2
dwBufSize: 5120
----------------
callback invocation: 11
----------------
dwDataType: 2
dwBufSize: 5120
----------------
callback invocation: 12
----------------
dwDataType: 2
dwBufSize: 5120
----------------
callback invocation: 13
----------------
dwDataType: 2
dwBufSize: 5120
----------------
callback invocation: 14
----------------
dwDataType: 2
dwBufSize: 5120
----------------
callback invocation: 15
----------------
dwDataType: 2
dwBufSize: 5120
----------------
callback invocation: 16
----------------
dwDataType: 2
dwBufSize: 5120
----------------
callback invocation: 17
----------------
dwDataType: 2
dwBufSize: 5120
----------------
callback invocation: 18
----------------
dwDataType: 2
dwBufSize: 5120
----------------
callback invocation: 19
----------------
dwDataType: 2
dwBufSize: 5120
----------------
callback invocation: 20
----------------
dwDataType: 2
dwBufSize: 5120
----------------
callback invocation: 21
----------------
dwDataType: 2
dwBufSize: 5120
----------------
callback invocation: 22
----------------
dwDataType: 2
dwBufSize: 5120
----------------
callback invocation: 23
----------------
dwDataType: 2
dwBufSize: 5120
----------------
callback invocation: 24
----------------
dwDataType: 2
dwBufSize: 5120
----------------
callback invocation: 25
Callback выдает 25 итераций с набором байтов, в которых непонятно что приходит, но сомневаюсь, что это видеопоток.
Ссылка на документацию
http://ftp.hikvision.ru/09.%20%D0%A3%D1%82%D0%B8%D0%BB%D0%B8%D1%82%D1%8B/9.%20SDK/Device%20Network%20SDK%20Programming%20Manual%28IPC%29.pdf
А чем может быть проблема? Куда копать?
callback invocation: 16
﨓 " 賬 磖 Ƚ 垅 ⋙ ḿ 挥 窪 궤 햸 ꫶ 鰬 ㆞ 傖 ? 範 㘾 멐 낱 䶩 ᕶ 圫 펩 뎮 劉 팱 ﱇ 鋦 ⶔ 瑦 䐩 鼵 뀘 訃 ◘ 㫘 ல 岖 Ỉ 귂 啪 턪 ? 폳 醤 樿 㸵 좠 Ὀ 儏 ᕼ 羡 ᥔ 㾥 褠 ֥ ⅇ 콖 ꡙ 騒 꽢 闙 亻 Ǡ ᙱ 貅 嗈 窦 푎 뽫 䕶 ⓽ 逧 Ẑ 㻟 㚜 佽 㽻 ▨ 抠 ✏ 㫫 ᒣ ᛨ ꝸ 㧸 椼 䂣 킇 ꞁ 煙 歧 珌 쭾 鹷 易 ꚝ 㴯 ﲅ 萦 織 얇 爜 홪 砀 ᘨ 쪦 夻 ᝤ 떴 罂 곿 㯙 텻 섬 龢 ᵸ 섞 ? 坭 痃 炓 d ꤾ 螉 苴 㜳 瀢 Ꮐ 껳 ꙯ 츒 ᴇ 㤊 ﶫ 㠑 ? 赫 랼 鸎 쫚 댺 帻 㸎 㺟 匍 ᪧ ? ﹩ 뢧 ⚦ 寡 ? 볖 噵 쬆 鹤 氠 ≈ ƒ ℒ 륞 쨋 ᖩ 囦 澲 莹 䃌 ◑ 龣 ? 綌 뚿 䕜 亦 ┐ ꀤ 퀭 퉝 伡 﨏 䎽 䂔 ꣭ ⶩ 鴊 路 匓 ꌍ 볾 럮 㶹 ච 㦳 槥 翑 䑾 ⏾ ꗊ 㸦 쿾 ? Հ ሎ 咁 ꈥ 훢 ၁ 뉤 傮 䉗 ❀ 쬑 ꜏ ኤ ࠧ ࡛ 堌 쟱 ጛ 裗 ꝟ ᓬ 䋎 蚹 ڶ 猬 昼 釘 ㆫ 忽 ⾋ 䁀 袺 垓 遯 ⨆ 䃄 蘅 䏖 Ɲ ¸ 摗 㾥 䡖 拏 쳢 驗 ꁑ ﶢ 啹 測 ? 励 煁 鯸 뵦 ? 蔌 Ƌ 黭 ꥭ 䨔 讄 樨 ꕋ 務 㓝 로 ꡎ ? 灱 앃 ⤑ 쨑 爑 碗 ᮵ 䈥 ⨫ 痼 筣 薮 벞 譸 㕆 ᥞ ꌴ ⩜ 뤃 䥜 ︄ 僺 ~ 仭 ꈉ 㠧 욯 觕 ࠓ 轶 ꡠ ᰘ ৽ ᅵ 룫 荾 ⚐ 灀 粅 愕 쎧 ㍿ ⁺ 쮥 聠 ⤾ 詤 뉦 べ ᩦ 殭 뾮 绪 盦 潖 鷄 磰 ↈ 춈 욃 伩 ˀ 䧬 톳 ວ 略 ? 헰 阜 ꃫ 䰰 㹭 鿹 ﱄ 磦 ড় 椲 辥 킙 通 㝝 Ყ 뚭 ^ ؾ ✏ 믙 豇 ⻗ 礖 Å 쉺 䅉 Ɦ 絋 ⨁ 섩 顿 ᪩ 夡 炒 믣 դ 鑶 催 ࡞ ễ ♪ 勸 崩 滃 뒙 ? 냉 嗶 凗 펜 棜 潱 ጟ 롦 ꩰ 篤 꾏 鷉 恦 㩈 ᄢ 잵 ꊓ 䱕 鮲 䨠 픃 箶 饮 ⓟ ╧ 䳵 듘 ℇ ꊹ 㑇 鏰 ㋯ 뾅 좡 駸 錿 䩥 糤 떛 쐅 썠 ᖕ 駸 ␙ 㴦 쀕 ❁ ꇫ 霷 즬 淚 镰 臧 핈 䒄 Ἄ 瘙 롏 ⴱ 针 ⧘ ǚ 㱙 ꔇ ╌ ‴ ᦻ ٭ ♁ 乷 ፞ ꀨ 筓 酑 畔 湤 䈿 织 ䷁ 耟 ? ᤛ ? 籔 㽘 ⭩ ꍽ 㜙 礸 힡 㬥 퐖 祎 䅈 儜 ⒠ 㐹 촴 澎 뿻 꺽 ឭ 邨 뜥 牖 酫 萇 ኜ 巣 ⑪ 鉕 憄 ﵈ 绞 볹 ⺄ 禭 ᐄ 嶽 ﯁ ꆠ 㟄 퍻 貐 鉁 쇱 ⾼ 栾 踾 倀 ࣖ ᎏ 꺥 덾 喀 宸 욂 漐 ᯨ 웧 햄 摒 ᤑ ꇸ 썁 瞧 헔 ⊑ 恑 პ 坭 ꡤ ꩵ 忿 嗛 ࣹ ̱ 躨 ? 㲺 쿠 ﰣ 鯸 씝 윑 嵛 疾 룗 髭 扵 ᗀ 䀂 夂 酐 첨 荎 㑏 븅 틚 罌 鳡 碐 ㋿ 㱅 碯 㢱 翛 塦 뼺 蔓 嗹 盩 腦 ? 怉 짳 䈪 ⛅ ⸅ 邳 ྗ 慍 ᑨ 乖 蔦 ﰘ 恏 嶦 ꔇ 뻁 ಀ 밍 ? 禄 馈 躈 缘 ໟ 暺 뮥 ₂ 뵼 䈯 뛧 홻 歙 ꮐ ꞕ 뻐 ḹ 롭 漷 ᥳ 媵 㔉 鰦 ퟖ 樟 츮 視 鸉 氕 걯 禥 졝 啂 ᐼ 憀 ⧕ 졊 氘 돴 腱 ꤫ 껳 壋 ॵ ꛛ 㳫 维 ឫ 쭠 鸑 ✌ 끚 챾 ൈ 涤 럗 郆 ⥐ 隇 核 ? 懕 菠 ? 聣 磗 灒 ܲ ㏜ ꐹ ☲ 퐘 ϓ ꠊ 젩 㓶 궚 ? ̒ 묥 媨 ⡫ 㠇 ̱ ◉ 㩑 숐 ճ ᚶ 恾 춷 ? 庼 ㌀ 獝 㹲 䰴 ⳦ 旡 琏 垵 嫆 焰 跽 浺 瘙 ↖ 茇 爱 諫 㟁 ඪ z 崬 貚 鳮 醦 誂 嘑 遽 떥 偔 ᘔ 讲 ⻉ 駴 缳 ⦊ 杖 촋 ꩧ ꚞ 쌸 宮 桧 鍭 ⎾ 쪼 倊 鴉 ᕂ 욚 ᢵ ⡌ ? 鮺 浪 氧 ി 힘 蹡 ⏇ ꩆ ♁ 憀 蒹 ሧ 䔍 싪 ઘ 亄 掾 蜡 靠 탑 띙 춵 嘇 뇗 㒟 姴 㹓 푎 ꕿ ᚨ ᪭ ⎫ 鬶 」 얇 s 賗 ﵼ ಚ 굓 썽 힒 碾 㻬 쉃 ⾪ 歺 仹 룕 ㋇ 뢠 㓄 䑷 镉 㘳 䠽 當 霜 궅 ȧ 翍 ? 了 讖 숮 ꊳ 李 쌉 乷 㖼 듅 䍞 䍅 ㍙ ⡍ 괖 ⏵ 푋 ? 掏 ጲ 鬔 ଋ 볓 䏒 松 ࢻ ꛪ 叟 ꍫ ﱇ 쁖 瓃 露 垍 㭳 ? 鷉 弲 ₭ 쬲 鉣 ﵿ ᥠ ያ 굇 砐 쁞 ᇫ 罾 ⃐ ᶇ 䩰 鯇 ㋲ ? 摳 請 ㍐ 薻 壚 ? 軑 놑 䒅 巙 ᮞ 墿 轷 र 腓 ﻲ 樣 氒 ➱ 苩 綺 燋 ⍮ 䪢 筈 ⎇ 潋 ﱛ 樓 覛 ̥ 柪 鞭 嚺 ↗ 엹 䗴 촾 磶 犈 Τ ᐎ ? 勹 꼉 ⤡ ꘀ ꮌ 蚌 ﳜ 呌 拭 ⩫ 狌 櫶 锡 襬 귩 攛 ࠽ ⭙ 葎 菑 遟 균 䟨 鵺 딯 衛 釕 䄵 贝 ꝳ ල 訹 햪 뤱 鲉 숤 毑 鴼 圴 ퟠ 깆 貈 관 䫫 跪 䙧 碪 뼝 仍 ∮ 輮 ? 摬 Ẅ 餢 轒 㣱 ? 츕 뭾 꿺 㟭 韲 웜 缗 釔 䣡 焚 ぞ 첉 ꔺ 䞶 俉 这 흎 ⎷ ꉝ 躹 ? 杄 ✈ 䢙 愄 鈖 鑶 ꅫ 䴢 焿 而 薄 䆰 铍 뎷 䝀 䐝 ㅕ 李 緑 隙 ㊖ 뵿 㞝 豼 眰 ? 腁 璲 腧 ? 筦 쬄 귷 ࣺ 퍭 ꨱ 懥 ῆ 䍄 娷 죅 涪 䭳 効 ソ ⦓ 쏼 呝 ? 졓 ﲟ 䕰 띲 㯸 ѽ 鏘 捚 꺼 䃁 ゖ 樧 뿁 扽 赻 쥶 ᶎ 邟 臁 摂 ㄹ 䒅 穖 ⲽ 쩪 覣 त ⡏ ꒬ 㭩 秡 栠 翞 꾏 邒 頶 ᧁ 랧 ꫤ 婃 ? 㠡 栜 葻 埪 砘 ꑼ 訩 정 볃 ߁ ⶃ ᚦ 챀 금 羙 ↷ 㢻 灹 삋 ಡ 覐 䠯 橃 䔙 玈 㨇 ɚ 塩 贝 蜢 㺭 茾 擁 ⋭ ? 縊 ਜ ᔴ 痫 뇽 ȿ ℀ ꗒ 蝡 ̾ 鼻 肎 䍪 ƞ 籸 禿 真 瘎 殦 ? ䷬ 쇲 쾑 ଥ T 䀀 翠 Ѽ ⯠ 翠 ꀈ 翠 늀 翠 䀀 翠 ֠ ⯠ 翠 ꀈ 翠 님 翠 댰 翠 뎈 翠 돠 翠 됸 翠 뒐 翠 듨 翠 땀 翠 떘 翠 뗰 翠 뙈 翠 뚠 翠 뛸 翠 띐 翠 램 翠 렀 翠 롘 翠 뢰 翠 뤈 翠 률 翠 릸 翠 먐 翠 멨 翠 뫀 翠 묘 翠 뭰 翠 믈 翠 밠 翠 뱸 翠 쀕 翠 䞴 翟 ---------------- dwDataType: 2
Разовый пример буфера на одной из итераций
Виртуальный выделенный сервер (VDS) становится отличным выбором
почему не запускается второй цикл который складывает элементы между нулями
Что бы test test1 test2 выводились и генерились и <a href="link"><entry></a> так выводились?
Есть 2 раздела: верхний и нижний, которые содержат подразделы,которые содеражат еще свои разделы,которые в внутри содержат элементы таблицы