Фокус в том, что его никогда и не было. Просто немного терпения при написании кода не имея опыта в этом и отправка заранее правильно подготовленных данных плюс пауза явились залогом успеха. Вся необходимая вводная информация была в постах авторов ищущих решение.
Поднял архив своего исследования вопроса, наступил на все грабли, чтобы все заработало как надо, стилизовал исходник, чтобы не совсем было стыдно, как новичку в этом деле и решил выложить все как есть всем желающим. Настройки аудио G.711ulaw. Под остальные кодеки иные алгоритмы работы и звук не воспроизводится, что естественно. Порадовал себя в прошлый раз консольным вариантов, порадовал и сейчас разбираясь с прошлыми решениями, а кому нужно что-то другое все карты раскрыты в виде рабочего примера.
Код: Выделить всё
/*
* Copyright(C) iTuneDVR www.iTineDVR.ru @iTuneDVR
* FileName: HSWP.cpp
* Description:
* Version: 1.0
* Author: iTuneDVR
* Create Date: 2018-10-22
* Modification History
* 2021-01-22 Share for http://ipcamtalk.com/threads/twoway-audio-problem.25351/#post-522957
*/
#include <stdio.h>
#include <fcntl.h>
#include <conio.h>
#include <sys/types.h>
#include <windows.h>
#include "HCNetSDK.h"
inline unsigned long int lof (FILE *file) {return (filelength (fileno (file)));}
void CALLBACK fVoiceDataCallBack(LONG lVoiceComHandle, char *pRecvDataBuffer, DWORD dwBufSize, BYTE byAudioFlag, void *pUser) {}
#define N 160
#define S 20
int main(int argc,char* argv[])
{
if (argc >= 6) {
NET_DVR_Init();
NET_DVR_DEVICEINFO_V30 struDeviceInfo;
LONG lUserID = NET_DVR_Login_V30(argv[1], atoi(argv[2]), argv[3], argv[4], &struDeviceInfo);
if (lUserID == -1 ) {
printf("Login error, %d\n", NET_DVR_GetLastError());
return -2;
}
LONG lVoiceHandle = NET_DVR_StartVoiceCom_MR_V30(lUserID, 1, fVoiceDataCallBack, NULL);
if (lVoiceHandle < 0) {
printf("NET_DVR_StartVoiceCom_MR_V30 fail %d\n", NET_DVR_GetLastError());
NET_DVR_Logout_V30(lUserID);
return -3;
}
FILE *fp1 = fopen(argv[5], "rb");
if (fp1 == NULL) {
fprintf(stderr, "Open sound file %s failed\n", argv[5]);
return -4;
}
int i = lof(fp1);
char *buffer = (char*)malloc(i + N);
memset(buffer, 0, i + N);
fread(buffer, 1, i, fp1);
// while (int j=0 <= i) {
for (int j=0; j<= i;) {
NET_DVR_VoiceComSendData(lVoiceHandle, buffer, N);
Sleep(S);
buffer+=N;
j+=N;
}
free(buffer);
fclose(fp1);
Sleep(S*50);
NET_DVR_StopVoiceCom(lVoiceHandle);
NET_DVR_Logout_V30(lUserID);
NET_DVR_Cleanup();
return 0;
}
printf("Hikvision soundwave player v1.0 (c)iTuneDVR 2018-10-22\nUsage: HSWP.exe 192.168.1.251 8000 admin admin12345 output.wav\n");
}
Версия рабочей и протестированной прошивки и необходимые настройки для камеры
Полный проект сборки с исходниками, библиотеками, скриптами сборки и пояснениями прилагается

#Hikvision #TwoWayAudio
ВНИМАНИЕ!!!
Добавлено 20210421
Сборка не содержит компилятор c++ и ffmpeg, поэтому будьте внимательны

Добавлено 20221128
Исправлена ошибка при верстке кода в цикле вывода.
Использовать архив
20221128_Hikvisin SOUND WAVE PLAYER_FIX01.zip