-
Notifications
You must be signed in to change notification settings - Fork 145
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add RTP AC3 streaming support #89
base: master
Are you sure you want to change the base?
Conversation
Thanks, I'll build it sometime tomorrow. I had build RTP support in the past - it's in the "rtp" branch. Supports only PCM uncompressed stereo. The main problem with RTP is that receivers expect a continous stream, but Scream only sends data when an application plays audio. To fully support it, the Scream driver would need its own timer, which would be a major rework of the architecture. So, a preliminary question: AC3 is fine, but do you really need RTP? |
Yes, i saw that you have a branch for RTP. This is where i took the RtpHeader from. Unfortunately, i am not experienced with Visual Studio (building a windows driver) and i had several issues/questions:
Please also note, that my impl currently only supports 48 kHz, 16 bit, Stereo. Thanks for testing. |
Concerning RTP: I think I tried mpv and vlc as RTP receivers, and both have algorithms that try to smoothe out jitter and packet loss. They add a lot of latency, and start to stutter when the stream stops and start. That is probably fine for playing continuous music, but for system sounds or games, it sucks. Concerning driver development: In theory, you can compile whatever you like. But the code running in interrupt handlers and kernel workers is subject to numerous limitations. Linking in code written for userspace is likely to cause an instant bluescreen. Although a raw AC3 encoder might be OK if it does not need to do I/O. |
Add TestSender
RTP: Ok, they shouldn't behave like this. They should respect the timestamp when to present the appropriate sample/frame. But on the other side: currently, for scream you need proprietary receivers anyway. So, why not go for proprietary receivers which handle RTP packets according to your needs? I just updated some stuff regarding my PR: some fixes and i also committed a TestSender (written in Qt). Hope, that is of help. Please, tell me what you think. Thanks :) |
Add TestSender
Hi, Btw, is it possible to add custom audio driver ui elements? (like setting bitrate, etc) |
cpiped https://github.com/b-fitzpatrick/cpiped does silence detection/buffering from an alsa input to a unix FIFO combined with scream receiver, this worked really well for audio quality but I'm not sure about latency. a receiver/virtual sound card should handle the silence detection and synchronization. Wishlist: SMPTE 2110 https://en.wikipedia.org/wiki/SMPTE_2110 and/or Dante/Audinate protocol. I don't know if there's a spec for Dante but could probably get a capture from a digital mixer or PA system. |
https://github.com/Haivision/srt |
Hi,
I created this PR in order to support RTP streaming using an AC3 (aka Dolby Digital) encoder.
When using scream, i consider the network load too high (especially in WiFi environments). So, i wanted to use a compressed stream using AC3 at 256 kbps, which results in 1/6 of bandwidth and is also much more stable (less dropouts) than using raw PCM samples.
Unfortunately, i could not fully debug this change, because i could not make the project compile and install the driver. The streaming part is tested with a test app and should work. So, it would be great, if you could test it and give me feedback.
This is a preliminary version for this change. So, please let me know, if this is of interest and i will continue working on it.
Thanks a lot!
:)