Capabilities Reference : VideoStream NO Video Codec and Audio Codec Information

Hi SmartThings Team,
When I refer the document : Capabilities Reference | SmartThings Developers
, and I want to use the capability of VideoStream, I did not see any information about video codec and audio codec.
I want to know :
Q1. Does smartThings support the rtsp streaming?
Q2. What kind of video codec and audio codec support in here ?
Q3. Does any example about the videostream capability?

Thanks a lot.

Welcome to the SmartThings Community, @VSaaS_Tutk!

Can you share more details about your integration, please? For example, the capabilities supported by the device, the purpose of the integration, etc.

Hi Nayelyz,
Thanks for your reply.
I want to use a witness spotlight cam from leedarson to connect to smarthThings.
This device’s capabilities is as follows:

  1. 2K QHD
  2. 2-Way Audio
  3. 400lm Spotlight
  4. Alarm Alert
  5. Human Detection
  6. SpotlightNight Vision
  7. 2T2R
  8. IP65
  9. Smoke/CO Alarm and Sound Detection
    10.Glass Break Detection

Ok, up to now, the video plugin works for the capabilities of VideoStream and MotionSensor combined through:

  • The already published device profiles, which are:
    • c1ca6938-e152-4a21-a349-d89df268f126 for RSTP
    • d1fddebd-137b-47fa-a05a-6e8329de19e0 for webRTC
  • You can use different integrations, like:
    • ST Schema > for cloud to cloud connections
    • Edge drivers > for Hub-connected devices (Zigbee, Z-Wave and LAN). Here, you would need to include the same metadata (VID and manufacturerName)

To start the stream you need to define the startStream command to send an event with the following information:

live_video = {
     "InHomeURL": "STREAMING_URL",
     "OutHomeURL": "STREAMING_URL"

//Command used in ST Schema
addState('main', 'st.videoStream', 'stream', live_video)

To stop the stream you need to define the stopStream command to send an event with the following:

live_video = {
      "InHomeURL": "",
      "OutHomeURL": ""

//Command used in ST Schema
addState('main', 'st.videoStream', 'stream', live_video)

This is how the Detail View of the Device would look like:


Hi Nayelyz,
Thanks your replay.
How can I get the document about the both of information from smartThings?

  • The already published device profiles, which are:
    • c1ca6938-e152-4a21-a349-d89df268f126 for RSTP
    • d1fddebd-137b-47fa-a05a-6e8329de19e0 for webRTC

Do you mean the details of the device profiles?

You can use the CLI or the API’s endpoint of deviceprofiles. Eg. Using the CLI:

smartthings deviceprofiles id [-j or -y]

This way, you can see which capabilities it uses and its metadata.

I have a few questions:

How is the motion detection working here? Does the plugin itself detect it based on video movement or is it expecting (onvif?) notifications from the camera?

what is the ‘addState’ command in Edge?

Can you explain the “InHomeURL” vs “OutHomeURL” ? In my case I would always be getting a stream IN from a video camera;so would I only use InHomeURL then?

is using this fixed device profile the only way to get video to work? Can I not define my own device just using the videoStream capability? (My first attempt yielded no video window)

As this capability is only listed in the device profile, you should send the capability event but I’m not sure how you would receive the event in the driver…I’ll talk to the engineering team about that

That command comes from the ST Schema SDK to send this new value to the capability in ST. In Edge, it would be device:emit_event.

Let me confirm this with the team.

Did you use the metadata in your profile and it still didn’t work?

If you only include the videoStream capability without the proper metadata, the plugin won’t be displayed

@TAustin which are you using, webRTC or RTSP?

If I use the meta then yes, I get the expected presentation. However, I’m passing my RTSP URL in both the in and out elements but not getting anything: (I assume you’ve been meaning to say ‘RTSP’, rather than ‘RSTP’)

example: rtsp://

Maybe I should strip out the ‘rtsp://’ prefix??

FYI, if I load just the ‘out’ URL, I eventually get an error message: “There was a problem streaming the video. Tap the refresh button.”. If I just load the ‘in’ URL, or both, it spins forever with no error.

I just realized something - most RTSP commands to an IP camera (DESCRIBE, SETUP, PLAY, TEARDOWN) are going to require authorization, yet there’s no way you described to even provide a user and password. So I’m not sure how this could even work??

OK, thanks for the info. I found this syntax for the URL, I don’t know if all the commands can use the “base” where the user and password are included:


I need to gather more information from the team, the integration of videocamaras is not very common and the current ones from official partners are using Schema Connector.

THAT WORKED!! You’re awesome, thank-you :grin:

:hushed: :partying_face: :partying_face:
So, you don’t have issues starting/closing the streaming anymore?
What about the motion event?

It’s not 100% - I’m only getting video for a couple of my cameras, but it’s something. I’ve figured out that the OUT URL seems to be the right one to use. I can leave the IN URL empty.

No issue with starting/stopping the stream for some cameras - for others it’s just spinning indefinitely and I’m not getting any video.

I have the motion events working: that requires setting up event notifications with each camera according to ONVIF spec, which is all working (even if video is not).

@nayelyz I’ve run up against some pretty significant issues trying to implement an Edge video driver:

  1. using the SmartThings-smartthings-c2c-ring-camera VID doesn’t appear to be a viable alternative, as it doesn’t allow me to have any device Settings. It’s probably because that VID was designed for a cloud-to-cloud implementation in mind. For Edge, I need device Settings defined to be able to have the user configure userID and password, and other configuration settings.

  2. I’ve been able to make another approach work, which is to NOT use that VID and instead rely on creating a camera group. That allows me to get video streaming to work, however it doesn’t seem to be very reliable. But, the big issue here is SECURITY. When my driver provides the rtsp streaming URL to SmartThings when requested, it has to include the camera’s UserID and Password. This gets passed in the clear on the network, but even worse, it gets displayed in history!

So given these two issues, I am asking:

  1. We need a more versatile video presentation that is more suited for Edge drivers. Would it be possible for someone to create a new presentation like SmartThings-smartthings-c2c-ring-camera, but that doesn’t preclude device Settings? Nirvana would be the ability to also add other capabilities in the presentation, but I can live with the fixed format if only Settings were supported.

  2. We need a more secure way to provide authentication info with the stream URL. Developers also need more control over what gets displayed in history, like a flag parameter added to emit_event to exclude the state change from history. (I’ve pointed out the need for something like this previously in a separate topic)

I’m open to other ideas!

Hi, @TAustin.

It is true that the official integrations like the Ring camera are using a C2C connection and “settings” are not a “thing” there but still, I don’t know why the VID is preventing you to show settings.
This option was a workaround, not an official solution, sorry if I wasn’t clear about that part before.
I will create a feature request about the ability/options to integrate camera devices using your comments. However, it can take some time to be analyzed and implemented (if it gets approved). It depends on the team’s workload.
For now, that’s all the information I have, sorry.

Thanks for quick reply.

This really does need immediate attention, it is a major security flaw.

What about the videoCamera capability? What exactly does that do? Is it only for camera controls, or does it include a video display element? I’ve not been able to get it to work, presumably because I don’t know what it requires to initialize. Is there any documentation or examples for the attribute called “settings”?

Name        Description                           Type

settings    The current state of the settings     object