go2rtc icon indicating copy to clipboard operation
go2rtc copied to clipboard

DVRip two-way video support for ICSee camera

Open jericjan opened this issue 1 month ago • 2 comments

I notice that the README only mentions two-way audio but not two-way video. I have this ICSee camera that can receive video+audio or solely audio from the ICSee app. I've long forgotten the model name, but it looks just like this one. I've verified that it uses the DVRIP port for this, and it isn't something proprietary outside of DVRIP. Two-way audio works fine under the OPTalk command, but there appears to be a newer one called AVTalk which I'm not finding any hits via a search through this repo. Heck, you can't even google "avtalk" "dvrip".

The TCP packet looks like this. The user sends:

{"Name":"AVTalk","AVTalk":{"Action":"Claim","Channel":0,"ProType":0,"Video":{"Enc":"H265","W":240,"H":320,"FPS":10},"Audio":{"Enc":"g711a","SB":16,"SR":8000}},"SessionID":"0x0000000002"}

The camera responds with:

{ "Name" : "AVTalk", "Ret" : 100, "SessionID" : "0x00000002" }

Afterwards, the user sends video and audio packets all in the same stream. The camera doesn't send back video data, so it technically can't be called two-way like OPTalk is, but the app basically opens a TCP stream for receiving video and a separate stream for sending video. Another thing I should note is that it classifies data into 3 magic bytes: 00 00 01 FA (audio), 00 00 01 FC (i-frames), and 00 00 01 FD (p-frames)

If you guys need the packet capture, do let me know, although I'm not sure if that also means my account credentials get shared along with it. It does appear to be encrypted I think.

Extras

Here's my config

streams:
  LivingRoom:
    - dvrip://{user}:{pass}@192.168.101.3:34567
    - dvrip://{user}:{pass}@192.168.101.3:34567?backchannel=1

Probe looks like this

  "producers": [
    {
      "id": 37,
      "format_name": "dvrip",
      "protocol": "tcp",
      "remote_addr": "192.168.101.3:34567",
      "medias": [
        "video, recvonly, H265",
        "audio, recvonly, PCMA/8000"
      ],
      "receivers": [
        {
          "id": 38,
          "codec": {
            "codec_name": "hevc",
            "codec_type": "video"
          },
          "childs": [
            40
          ]
        },
        {
          "id": 39,
          "codec": {
            "codec_name": "pcm_alaw",
            "codec_type": "audio",
            "sample_rate": 8000
          },
          "childs": [
            42
          ]
        }
      ]
    },
    {
      "id": 41,
      "format_name": "dvrip",
      "protocol": "tcp",
      "remote_addr": "192.168.101.3:34567",
      "medias": [
        "audio, sendonly, PCMA/8000"
      ],
      "senders": [
        {
          "id": 44,
          "codec": {
            "codec_name": "ANY",
            "codec_type": ""
          },
          "parent": 43
        }
      ]
    },
    {
      "url": "internal"
    }
  ],

jericjan avatar Dec 13 '25 14:12 jericjan

Your link doesn't work. I don't see the point in supporting two-way video right now.

AlexxIT avatar Dec 18 '25 13:12 AlexxIT

Image

That shop link might be region-specific, I guess. Hopefully this gets picked up in the future. I get that it's way more niche and not exactly useful, but it does appear to essentially be the reverse of pkg/dvrip/producer.go, although I couldn't get the camera to play back anything through a bare-bones Python implementation.

For convenience, I've found that the CMD IDs are 1417 for the claim, and 1419 for the data.

jericjan avatar Dec 18 '25 22:12 jericjan