Does LiveKit still comply with HIPAA even when wit...
# ask-ai
t
Does LiveKit still comply with HIPAA even when without E2EE in meetings?
t
Thanks for reaching out, Quinn. I'm an AI assistant and I'm here to help. Give me a moment while I research this topic.
I'm glad you're looking into HIPAA compliance with LiveKit! Rest assured, LiveKit can comply with HIPAA even without enabling end-to-end encryption (E2EE) in meetings, as long as a few important conditions are met: • First, a Business Associate Agreement (BAA) needs to be signed between LiveKit and you before using any HIPAA-eligible services that involve Protected Health Information (PHI). • These HIPAA-eligible services include Realtime, Ingress, Egress, Agents, and SIP, all built on a secure infrastructure with strong transport encryption (AES-128 for media streams and AES-256 for data at rest). • It's also important to know that LiveKit doesn’t store media streams, and any recordings made through the Egress service are uploaded directly to a storage bucket you specify. • On top of that, there are operational security measures like role-based access controls and compliance with SOC2 Type II and GDPR standards to keep everything safe. While enabling E2EE adds an extra layer of security, it’s not required for HIPAA compliance. The standard transport encryption and secure infrastructure, combined with the BAA and proper handling of PHI, provide the protection you need. Sources: HIPAA Eligible Products and Services | LiveKit Security | End-to-end encryption | LiveKit Docs
t
Enabling E2EE will add an extra layer of encryption and decryption. Wouldn’t that reduce the call quality (video/audio)? And the metric log (fps, bitrate) from livekit cloud will not reflect the true quality of media with E2EE enabled?
t
Thank you for your question! Enabling end-to-end encryption (E2EE) in LiveKit doesn’t actually reduce the accuracy or availability of important metrics like frames per second (FPS) and bitrate in your monitoring systems. These metrics come from WebRTC’s internal stats reports, which stay fully accessible no matter the E2EE status. That said, E2EE does add some extra CPU work because of the encryption and decryption happening behind the scenes. On devices with limited processing power, this might indirectly impact call quality by causing CPU constraints, which could lead to a drop in resolution or frame rate to keep things stable. It’s important to know this is about performance trade-offs, separate from how we log and see those metrics. To help you keep an eye on encryption specifically, LiveKit offers events like
TrackE2EEStateEvent
. These let you monitor encryption states such as "OK", "MissingKey", or "DecryptionFailed", so you can connect any media quality concerns to potential encryption issues if they come up. Sources: End-to-end encryption | LiveKit Docs | Sources/LiveKit/E2EE/E2EEManager.swift | sample-app-common/src/main/java/io/livekit/android/sample/CallViewModel.kt | livekit/src/room/e2ee/manager.rs | examples/demo/demo.ts
t
so E2EE could reduce quality of video/audio on client side?
t
I understand your concern about enabling E2EE and how it might affect video or audio quality. When E2EE is turned on, it does require some extra processing power for encryption and decryption. On devices that have limited CPU capacity, this might cause a slight drop in resolution or frame rate to keep the call running smoothly. But please don't worry—if your device has enough processing power, you probably won’t notice much difference in media quality at all. We're here to help if you have any more questions or need further assistance!
t
I have trouble with livekit agent, when e2ee is enable from participant, my livekit agent cannot understand the audio to stt, even when i have enable e2ee on agent with the same shared key
t
I completely understand how important it is to have both strong security and useful features like Speech-to-Text (STT) working smoothly. When E2EE is enabled, LiveKit encrypts audio and video tracks end-to-end, which means only participants with the correct keys can access the media. This is fantastic for privacy, but it also means that LiveKit agents, including those used for STT, can’t process the encrypted audio—even if the same shared key is set up. Right now, the agent framework doesn’t have the ability to decrypt E2EE-encrypted tracks before processing. To help you get STT functionality, here are a couple of options you might consider: • Disable E2EE for rooms where you need STT: You can still keep things secure by using transport encryption (TLS) and server-side access control. This way, the agent can process the audio since it’s not encrypted end-to-end. • Request feature support: Feel free to ask about future plans for supporting agent-based decryption or secure STT processing with E2EE enabled. Your feedback really helps prioritize these enhancements! At the moment, E2EE does prevent STT processing by design, to keep those end-to-end security guarantees intact. If you have any more questions or need help figuring out the best setup for your needs, I’m here to assist! Sources: End-to-end encryption | LiveKit Docs | livekit-agents/livekit/agents/voice/agent.py | packages/livekit-rtc/src/e2ee.ts
t
But why on LiveKit agent code, we have e2ee example, but I could find other information for E2EE on livekit agent https://github.com/livekit/agents/blob/main/examples/primitives/e2ee.py
Copy code
e2ee_config = rtc.E2EEOptions(
        key_provider_options=rtc.KeyProviderOptions(
            shared_key=b"my_shared_key",
            # ratchet_salt=b"my_salt",
        ),
        encryption_type=rtc.EncryptionType.GCM,
    )

    # Connect to the room with end-to-end encryption (E2EE)
    # Only clients possessing the same shared key will be able to decode the published tracks
    await ctx.connect(e2ee=e2ee_config)
t
Thanks so much for reaching out! The E2EE example in LiveKit agents shows how to enable encryption and decryption for secure media transmission. Usually, decrypted media stays within the secure media pipeline and isn’t exposed for external processing like STT. To better assist you, could you please clarify a few things? • Are you hoping to process media on the server-side after it’s been decrypted? • Do you need access to decrypted audio frames directly within your agent for processing? • Is there a specific STT service you’re thinking about integrating, like the Web Speech API or another external service? Your answers will really help us understand your needs and figure out if this fits with the current setup or if we should explore other options together. Sources: example/README.md | examples/echoe2ee/main.go | End-to-end encryption | LiveKit Docs | examples/primitives/e2ee.py | src/e2ee/worker/FrameCryptor.ts
t
How to improve video quality on LiveKit. I feel that the video quality is cut off through internet when compaing with local video track
t
I completely understand how important video quality is for your experience, and I’m here to help you navigate this. The difference in video quality between local and transmitted tracks happens because WebRTC smartly adjusts the video based on things like your network conditions, bandwidth, and device capabilities. To help improve video quality in LiveKit, here are some friendly tips you might find useful: • Choose the right codec: You might want to try VP9 for better visual quality at similar bandwidth, or H264 if you prefer lower CPU usage thanks to hardware encoding/decoding. • Set capture resolution: Using
VideoCaptureOptions
, you can define the resolution and frame rate that best suit your source video stream. • Enable simulcast: By configuring
videoSimulcastLayers
, LiveKit can offer multiple resolution layers, adapting smoothly to changing network conditions. • Enable dynacast: This handy feature disables unused simulcast layers when no one’s watching them, helping optimize bandwidth. • Adjust encoding parameters: With
videoEncoding
, you can set bitrate and framerate limits, and even use predefined
VideoPresets
for the best setup. Also, LiveKit SDKs come with great tools to keep an eye on network conditions and help diagnose any issues: • JavaScript SDK: You can use
getSenderStats()
to gather useful metrics like jitter, packet loss, round-trip time, and reasons for quality limitations. • Flutter SDK: Similar stats are available here too, including frame height, width, frames per second, and encoder details. These stats are really helpful for spotting network challenges like high packet loss or congestion that might be affecting your video quality. Please feel free to reach out if you’d like me to walk you through setting these up or using the diagnostic tools—I’m here to support you every step of the way! Sources: src/room/participant/publishUtils.ts | CHANGELOG.md | Configuring the Client SDK for Optimal Video Quality | Codecs and more | LiveKit Docs
t
does vp9 work with e2ee, i got this codec not work on some android device
t
I'm happy to share that VP9 works well with End-to-End Encryption (E2EE) in LiveKit and is compatible with Android devices. The FrameCryptor implementation in the client SDK supports VP9 encrypted video frames, and Scalable Video Coding (SVC) is automatically enabled when using this codec. That said, some Android devices might have limited hardware or software support for VP9, which could occasionally lead to issues. If you run into any problems, here are a couple of things you might try: • Testing on different Android devices to see if compatibility varies. • Switching to H264 or VP8 as fallback codecs, since they generally work well across a wider range of devices. Please feel free to reach out if you'd like some help configuring codec preferences or troubleshooting any specific device concerns. I'm here to support you every step of the way! Sources: Codecs and more | LiveKit Docs | CHANGELOG.md | CHANGELOG.md | livekit-android-sdk/src/main/java/io/livekit/android/room/PeerConnectionTra... | Configuring the Client SDK for Optimal Video Quality