to capture recording into a byte[] and write it to the output streams of all the connected sockets. the thing is that as soon as i capture the audio i need to write it to the sockets. I create client handler which is a thread that keeps writing to the respective socket. I tried capturing the audio from a separate thread and use the byte[] accross all the client handler threads but i can only hear shutter like noise. Although when i capture audio from the respective client thread it gives me clear audio but this won't be a feasible solution. So, my question is should i use a thread manager or I must be doing something wrong in the scenario i said above?
Seems to be a visibility issue, your reader threads see byte[] in stale/inconsistent state. There's really a lot to talk about, I can suggest the classics: "Java concurrency in practice" with trains on the cover. Worth reading, maybe the second "must read" for professional after Bloch's work. You can fix it by making it synchronized, by making sure that the shared state (all the byte[] array) is always accessed while holding a lock. For a scenario where there's one writer thread and many readers you can benefit in reducing lock contention by using ReentrantReadWriteLock.
And one more thing I'm also thinking about. Is this audio streaming (capture small piece, send to clients, capture another one, and so on)? Or two distinct phases of 1) fully read all stream, 2) send it to client ?
Обсуждают сегодня