Hikvision setup

I understand that.

I guess my initial question should have been, can HASS display video streams in realtime

I don’t think so.

@Coolie1101 HASS can absolutely display a realtime video stream, but there are some caveats. You can only do it in the pop-up window (main page display is limited to a 10 second refresh) and you need to configure it as a “mjpeg” camera type, not generic.

For a hikvision camera I use a URL syntax like below:

camera:
  platform: mjpeg
  mjpeg_url: http://X.X.X.X/Streaming/Channels/2/preview
  username: user
  password: pass

You then need to make sure you have the substream set to “MJPEG” in your camera settings like the in the snapshot below.

2 Likes

That’s exactly what I’m getting now with it configured as Generic, and the sub-stream set to H.264.

In the pop-up window it refreshes every second which is not really real-time.

I’ll try your recommendation and report back.

That worked.

Any reason why it can’t be configured to use the H.264 stream?

Is this configuration info available somewhere?

My cameras have built in mic, any way to get the audio stream as well?

1 Like

HASS and most browsers only have native support for displaying mjpeg streams. H.264 gets trickier in universal support.

No audio support as far as i’m aware on any of the camera platforms. There may be something in FFMpeg if you want to look through those docs.

Thanks, will do.

I’m getting the following since I added the camera as you suggested, any ideas?

17-04-27 01:10:03 WARNING (Thread-3) [requests.packages.urllib3.connectionpool] Failed to parse headers (url=http://192.168.200.54:80/Streaming/Channels/2/preview): [StartBoundaryNotFoundDefect(), MultipartInvariantViolationDefect()], unparsed data: ‘’
Traceback (most recent call last):
File “/srv/homeassistant/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py”, line 398, in _make_request
assert_header_parsing(httplib_response.msg)
File “/srv/homeassistant/lib/python3.4/site-packages/requests/packages/urllib3/util/response.py”, line 66, in assert_header_parsing
raise HeaderParsingError(defects=defects, unparsed_data=unparsed_data)
requests.packages.urllib3.exceptions.HeaderParsingError: [StartBoundaryNotFoundDefect(), MultipartInvariantViolationDefect()], unparsed data: ‘’
17-04-27 01:10:13 WARNING (Thread-8) [requests.packages.urllib3.connectionpool] Failed to parse headers (url=http://192.168.200.54:80/Streaming/Channels/2/preview): [StartBoundaryNotFoundDefect(), MultipartInvariantViolationDefect()], unparsed data: ‘’
Traceback (most recent call last):
File “/srv/homeassistant/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py”, line 398, in _make_request
assert_header_parsing(httplib_response.msg)
File “/srv/homeassistant/lib/python3.4/site-packages/requests/packages/urllib3/util/response.py”, line 66, in assert_header_parsing
raise HeaderParsingError(defects=defects, unparsed_data=unparsed_data)
requests.packages.urllib3.exceptions.HeaderParsingError: [StartBoundaryNotFoundDefect(), MultipartInvariantViolationDefect()], unparsed data: ‘’
17-04-27 01:10:23 WARNING (Thread-9) [requests.packages.urllib3.connectionpool] Failed to parse headers (url=http://192.168.200.54:80/Streaming/Channels/2/preview): [StartBoundaryNotFoundDefect(), MultipartInvariantViolationDefect()], unparsed data: ‘’
Traceback (most recent call last):
File “/srv/homeassistant/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py”, line 398, in _make_request
assert_header_parsing(httplib_response.msg)
File “/srv/homeassistant/lib/python3.4/site-packages/requests/packages/urllib3/util/response.py”, line 66, in assert_header_parsing
raise HeaderParsingError(defects=defects, unparsed_data=unparsed_data)
requests.packages.urllib3.exceptions.HeaderParsingError: [StartBoundaryNotFoundDefect(), MultipartInvariantViolationDefect()], unparsed data: ‘’

That’s a known bug in the urllib3 library. You can suppress the log messages (they are harmless) by adding this line under your logger/logs section in your configuration.yaml.

requests.packages.urllib3: critical

I got my camera working with the above config - works a treat :smiley:

Is it possible to manually trigger recording? I am using Hikvision cameras with Synology Surveillance Station (SS). Neat thing about SS is that it can automatically pre-record a few seconds (can be configured) before the actual trigger.

There is a post here that triggers manual recording, but it will be nice to get something integrated in the pyhik library.

@arsaboo Unfortunately, there are no hikvision API commands to trigger recording so there isn’t anything I can add to pyHik. I’ve seen some people have success with a workaround involving hardware alarm triggers which can be flipped via the api. If your cameras have support for that option it may be worth looking into.

I just do everything within the cameras (options are actually fairly robust) and point the recording location to mounted images on my unraid server so everything is stored in one place.

Is 480p the maximum resolution for MJPEG?
Could I set to 720p at least?

I think it’s camera specific, but I’ve only ever seen 480p as an option. The mjpeg format isn’t as efficient as something like rtsp so I don’t know if it can handle higher resolutions well.

Oh yeah, substream only has 480 maximum resolution.
Could I get live streaming on HASS if I use rtsp instead?

I believe you can use RTSP streams with the ffmpeg component.

Other than getting the rtsp link from my hikvision cameras
How do I properly add it to HASS with ffmpeg component? Is there a guide I can refer to?
Nevermind, I think I found it here

https://community.home-assistant.io/t/rtsp-support/2306/22

Better question is, would I get smooth 720p or 1080p streaming on HASS?

I have the Hikvision DS-2CD2332-I and couldn’t come close to live streaming 1080p with Hassbian on Raspberry Pi 3. So I am using the secondary stream set to 640x480 and H.264 with a low framerate:

I initialise the ffmpeg component in configuration.yaml:

ffmpeg:
  ffmpeg_bin: /usr/bin/ffmpeg

And finally have the following in my cameras.yaml:

- platform: ffmpeg
  name: Camera Name
  input: rtsp://username:password@cam_ip:554/Streaming/Channels/2
  extra_arguments: -vf scale=640:360

For some unknown reason the my Hikvision substream does not provide a 16:9 resolution option so I need to have ffmpeg rescale the image aspect ratio so that it doesn’t look “tall and thin”. Let me know if you find a better solution.

2 Likes

Thanks Pete, it’s probably gonna consume too much resource for the HD streaming
Are you able to get the hikvision motion detection working with HASS?
Or do you just rely on the email/notification alert from the ivms app?

Also, is 2 fps enough? Is there a certain limit (like 15-20fps) for streaming on HASS before it gets bogged down?