[asterisk-dev] Regarding realtime audio streaming from mixmonitor

Dennis Guse hallo at dennisguse.de
Mon Jul 9 15:56:18 CDT 2018


Hi Mani,

just out of curiosity: what is your actual goal?
Do you need to create the transcriptions live or afterwards?

Best,
Dennis

On Fri, 2018-07-06 at 13:28 +0530, Mani Kanta Gadde wrote:
> Hi, 
> We are trying to stream audio coming from calls to an NLP engine to get the text transcription, for this we created a socket in app_mixmonitor.c and we are writing audio frames to socket descriptor.
> We have tried with TCP(SOCK_STREAM) and UDP(SOCK_DGRAM) protocols to send the audio frames to the socket server. 
> 
> We are using latest asterisk complied from GitHub source code (asterisk repo).
> 
> Here are some of the suggestions I found on asterisk forums 
> http://forums.asterisk.org/viewtopic.php?f=13&t=89365#p196720
> on this thread, it was suggested to use CHANSPY, but we have edited mixmonitor code to both record and stream in realtime, which has sufficed our needs.
> 
> Here is the socket code we used inside the mixmonitor_thread function in app_mixmonitor.c file.
> 
> +
> + int sockfd;
> + char buffer[1024];
> + char *hello = "Hello from client";
> + struct sockaddr_in servaddr;
> +
> + // Creating socket file descriptor
> + if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) {
> + ast_log(LOG_NOTICE, "socket creation failed");
> +// exit(EXIT_FAILURE);
> + }
> +
> + memset(&servaddr, 0, sizeof(servaddr));
> +
> + // Filling server information
> + servaddr.sin_family = AF_INET;
> + servaddr.sin_port = htons(8080);
> + servaddr.sin_addr.s_addr = INADDR_ANY;
> +
> + if (connect(sockfd,(struct sockaddr *) &servaddr,sizeof(servaddr)) < 0)
> + ast_log(LOG_ERROR, "ERROR connecting\n");
> + ast_log(LOG_NOTICE, "socket connected with server \n");
> +
> + //socket code ends here
> 
> and here is the code of writing audio frames to the socket.
> 
> for (cur = fr; cur; cur = AST_LIST_NEXT(cur, frame_list)) {
>  					ast_writestream(*fs, cur);
> +					// writing to socket
> +					write(sockfd, cur->data.ptr, cur->datalen);
> }
> 
> 
> And we were able to see the frames on the other side of the socket. 
> 
> We want to ask you if there is any other better approach to stream audio in real time.
> 
> Thanks & Regards 
> Manikanta
> Zemoso Technologies
> 
-- 
Dennis Guse



More information about the asterisk-dev mailing list