mirror of https://github.com/OpenIPC/wiki.git
				
				
				
			
		
			
				
	
	
		
			380 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Markdown
		
	
	
			
		
		
	
	
			380 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Markdown
		
	
	
| # OpenIPC Wiki
 | ||
| [Table of Content](../README.md)
 | ||
| 
 | ||
| Installation: how to make OpenIPC running on certain hardware
 | ||
| -------------------------------------------------------------
 | ||
| 
 | ||
| Supported hardware and installation procedures are given on [openipc.org](https://openipc.org/firmware/) site.
 | ||
| 
 | ||
| Please follow on site instructions for your CPU and video chip!
 | ||
| 
 | ||
| Here are some examples:
 | ||
| 
 | ||
| [Hi3516cv300 with IMX291](https://openwrt.org/docs/techref/hardware/soc/soc.hisilicon.hi35xx/ivg-hp203y-ay)
 | ||
| 
 | ||
| [[Hi3516Ev300-IMX335]]
 | ||
| 
 | ||
| ## How to upgrade OpenIPC
 | ||
| 
 | ||
| Currently, full automatic system upgrade like [sysupgrade][openwrtsysupgrade]
 | ||
| in OpenWRT is not supported. Use partial manual update instead.
 | ||
| 
 | ||
| ### Partial manual update
 | ||
| 
 | ||
| **NB!** _Partial upgrade of U-boot and kernel are recommended only in special cases and should be done with caution._
 | ||
| 
 | ||
| The process is described on the main site on [firmware page](https://openipc.org/firmware/#update-parts-of-the-firmware).
 | ||
| 
 | ||
| ## Frequently Asked Questions
 | ||
| 
 | ||
| * Can OpenIPC be installed on Raspberry Pi or other hardware?
 | ||
| 
 | ||
| No. Currently, only HiSilicon HI35xx SoC are supported. But theoretically it is
 | ||
| possible to support other architectures and boards. Though it will require a lot
 | ||
| of efforts, and thus it is not a near time focus of the project.
 | ||
| 
 | ||
| * Can I flash OpenIPC image without using UART console and TFTP?
 | ||
| 
 | ||
| No. Currently, it is not possible, though we are working on this.
 | ||
| 
 | ||
| * What the difference between OpenIPC based on BuildRoot and based on OpenWRT?
 | ||
| 
 | ||
| Buildroot is faster for initial development for new platforms as it is
 | ||
| minimalistic and has no dependencies. OpenWRT is convenient for users as a final
 | ||
| product, but there are a lot of complexities, dependencies, and there is no
 | ||
| point in developing without a community.
 | ||
| 
 | ||
| ### Other FAQs
 | ||
| 
 | ||
| * [OpenIPC Wiki (ru)](https://github.com/OpenIPC/camerasrnd/blob/master/docs/FAQ-ru.md)
 | ||
| 
 | ||
| 
 | ||
| ## Network related stuff
 | ||
| 
 | ||
| Common network configuration can be done in Luci GUI:
 | ||
| 
 | ||
| `http://<your camera IP>`
 | ||
| 
 | ||
| [[3G_modems]] USB modems support in hilink and ppp modes
 | ||
| 
 | ||
| ## Graphical User Interfaces
 | ||
| 
 | ||
| There are two branches of OpenIPC currently:
 | ||
| 
 | ||
| ### OpenWRT  based
 | ||
| 
 | ||
| GUI is based on Luci. There are menu sections for camera specific setup.
 | ||
| 
 | ||
| ### Buildroot based
 | ||
| 
 | ||
| There is a different interface planned... Still under development.
 | ||
| 
 | ||
| ## Hardware related recommendations
 | ||
| 
 | ||
| ### Power Over Internet PoE
 | ||
| 
 | ||
| It is advised to use 48V power adapters with RJ-45 connectors instead of 12V.
 | ||
| With 12V adapters the current will be 4 times higher. High current can burn
 | ||
| RJ-45 connectors and wires.
 | ||
| 
 | ||
| ## How to stream video to Internet
 | ||
| 
 | ||
| * __MiniHttp__ ➤ main audio/video streamer of the OpenIPC based system.
 | ||
| 
 | ||
| * __Мajestic__ ➤ new (in development)  audio/video streamer of the OpenIPC based system.
 | ||
| 
 | ||
| * __YouTube Streaming__
 | ||
| 
 | ||
| ### MiniHttp is the main streamer of the OpenIPC based system
 | ||
| 
 | ||
| It is important to tune configuration of MiniHttp by turning off unneeded
 | ||
| protocols and features for better security and performance.
 | ||
| 
 | ||
| Config file is located in `/etc/minihttp.ini`
 | ||
| 
 | ||
| ### Debug mode:
 | ||
| 
 | ||
| ```killall -sigint minihttp; sleep 1; export SENSOR=`ipctool --sensor_id`; minihttp```
 | ||
| 
 | ||
| ### Production mode:
 | ||
| 
 | ||
| ```killall -sigint minihttp; sleep 1; export SENSOR=`ipctool --sensor_id`; minihttp 2>&1 | logger -p daemon.info -t minihttp &```
 | ||
| 
 | ||
| 
 | ||
| ## Custom build tools used in OpenIPC OS
 | ||
| 
 | ||
| [Tools repository](https://github.com/OpenIPC/packages/tree/main/utils)
 | ||
| 
 | ||
| [ipctool](https://github.com/OpenIPC/ipctool) - gets information about hardware
 | ||
| and outputs it in common format. Can also be used to make backup and restore of
 | ||
| the camera software (still experimental feature).
 | ||
| 
 | ||
| ## Integration examples with Digital Video Recording systems
 | ||
| 
 | ||
| Recording stream locally with various utilities.
 | ||
| 
 | ||
| YouTube as DVR hack.
 | ||
| 
 | ||
| ## Tips and tricks on monitoring OpenIPC system
 | ||
| 
 | ||
| ### How to get temperature from chip's internal sensor (where supported):
 | ||
| 
 | ||
| `ipctool --temp`
 | ||
| 
 | ||
| other commands to [[monitor temperature]]
 | ||
| 
 | ||
| [[snmp]]
 | ||
| 
 | ||
| ### Prometheus monitoring
 | ||
| 
 | ||
| [[prometheus-node]]
 | ||
| 
 | ||
| ### Monitoring templates
 | ||
| 
 | ||
| * [[Zabbix monitoring templates]]
 | ||
| 
 | ||
| ## Prometheus node configuration
 | ||
| 
 | ||
| [Prometheus](https://prometheus.io/) is an open-source systems monitoring and
 | ||
| alerting toolkit.
 | ||
| 
 | ||
| OpenIPC has prometheus node exporter as a package. The result output can be
 | ||
| viewed as plain text on http://192.168.1.10:9100/metrics
 | ||
| 
 | ||
| Or visualized if you install [proemetheus server and graphana](https://prometheus.io/docs/visualization/grafana/):
 | ||
| 
 | ||
| [[images/preometheus_node_graphana_example.jpg]]
 | ||
| 
 | ||
| You can configure the node in `/etc/config/prometheus-node-exporter-lua`.
 | ||
| 
 | ||
| ### Meta package
 | ||
| 
 | ||
| <https://github.com/ZigFisher/Glutinium/tree/master/prometheus-node-exporter-lua>
 | ||
| 
 | ||
| ## Experiments with I2C on Hi3518EV200
 | ||
| 
 | ||
| ### Setting up i2c-x via device tree
 | ||
| 
 | ||
| The standard i2c-hisilicon driver does not give an option to set pins to i2c
 | ||
| mode if they were previously set to dts. To automatically set the required pins
 | ||
| to i2c mode you just need to add the following code to the beginning of
 | ||
| hi_i2c_hw_init (linux/drivers/i2c/busses/i2c-hisilicon.c)
 | ||
| 
 | ||
| ```
 | ||
| #ifdef CONFIG_ARCH_HI3518EV200 // Might be the same for other hardware devices
 | ||
| if(pinfo->mem->start = 0x200d0000 /* address i2c-0 */) {
 | ||
|     writel(0x2, 0x200f0040);
 | ||
|     writel(0x2, 0x200f0044);
 | ||
| }
 | ||
| if(pinfo->mem->start = 0x20240000 /* address i2c-1 */) {
 | ||
|     writel(0x1, 0x200f0050);
 | ||
|     writel(0x1, 0x200f0054);
 | ||
| }
 | ||
| if(pinfo->mem->start = 0x20250000 /* address i2c-2 */) {
 | ||
|     writel(0x1, 0x200f0060);
 | ||
|     writel(0x1, 0x200f0064);
 | ||
| }
 | ||
| #endif
 | ||
| ```
 | ||
| 
 | ||
| ## R&D related information
 | ||
| 
 | ||
| ### How to [[login inside]] original firmware
 | ||
| 
 | ||
| ### [[Majestic Log]] comments
 | ||
| 
 | ||
| ### [[DevTools]]
 | ||
| 
 | ||
| ### [[Docs on different IP cameras]]
 | ||
| 
 | ||
| ### Groups in Telegram related to development:
 | ||
| 
 | ||
| 
 | ||
| ## Tools used in Research and Development
 | ||
| 
 | ||
| [hisi-trace](https://github.com/OpenIPC/hisi-trace) --> tool to run Sofia inside
 | ||
| the OpenIPC. Allows porting stock Sofia functions to the target system without
 | ||
| loading in the original firmware.
 | ||
| 
 | ||
| [some tools for dissassembling](https://github.com/TekuConcept/ArmElfDisassembler)
 | ||
| 
 | ||
| ## Docs on currently unsupported SoC:
 | ||
| 
 | ||
| [Novatek NV98515 SoC](https://github.com/hn/reolink-camera)
 | ||
| 
 | ||
| Different hack & mod related to IP Cameras forums:
 | ||
| 
 | ||
| <https://www.goprawn.com/>
 | ||
| 
 | ||
| Below are some examples how to record video streams with various utilities.
 | ||
| 
 | ||
| ### gstreamer
 | ||
| 
 | ||
| * rtsp h264 stream:
 | ||
| 
 | ||
| `gst-launch-1.0 rtspsrc location=rtsp://192.168.1.10:554/stream=0 ! rtpjitterbuffer ! rtph264depay ! h264parse ! mp4mux ! filesink location=stream0_h264.mp4 -e`
 | ||
| 
 | ||
| * rtsp h265 stream:
 | ||
| 
 | ||
| `gst-launch-1.0 rtspsrc location=rtsp://192.168.1.10:554/stream=0 ! rtpjitterbuffer ! rtph265depay ! h265parse ! mp4mux ! filesink location=stream0_h265.mp4 -e`
 | ||
| 
 | ||
| ### ffmpeg
 | ||
| 
 | ||
| ### vlc
 | ||
| 
 | ||
| ## How to login inside original firmware
 | ||
| 
 | ||
| Information applicable only for XM-based camera firmware.
 | ||
| 
 | ||
| ### Enable telnet server
 | ||
| 
 | ||
| In U-Boot console:
 | ||
| 
 | ||
| ```
 | ||
| setenv telnetctrl 1; saveenv
 | ||
| ```
 | ||
| 
 | ||
| ### Connect with telnet
 | ||
| 
 | ||
| ```
 | ||
| LocalHost login: root
 | ||
| Password: xmhdipc
 | ||
| Welcome to HiLinux.
 | ||
| ```
 | ||
| 
 | ||
| Also, can try [other pairs](https://gist.github.com/gabonator/74cdd6ab4f733ff047356198c781f27d)
 | ||
| 
 | ||
| ### Optional: enable Linux kernel verbose boot (where armbenv exists)
 | ||
| 
 | ||
| ```
 | ||
| # armbenv -s xmuart 0
 | ||
| # reboot
 | ||
| ```
 | ||
| 
 | ||
| Or in case where XmEnv exists:
 | ||
| 
 | ||
| ```
 | ||
| # XmEnv -s xmuart 0
 | ||
| # reboot
 | ||
| ```
 | ||
| 
 | ||
| ### Enable telnet without even open your camera (remotely)
 | ||
| 
 | ||
| * Find proper zip with recent firmware update using [link](https://translate.google.com/translate?hl=en&sl=ru&tl=en&u=https%3A%2F%2Fwww.cctvsp.ru%2Farticles%2Fobnovlenie-proshivok-dlya-ip-kamer-ot-xiong-mai) and download it.
 | ||
| 
 | ||
| * Unzip it and choose proper `bin` file from several options.
 | ||
| 
 | ||
| * It's recommended update your camera using this stock firmware without
 | ||
|     modifying it. It will help understand possible issues. Use `General...` if
 | ||
|     not sure which option you want.
 | ||
| 
 | ||
| * Unzip `bin` file as it would be ordinary zip archive.
 | ||
| 
 | ||
| * Copy `add_xmuart.sh` from `utils` directory of the repository inside directory
 | ||
|     with unpacked files.
 | ||
| 
 | ||
| * Run `./add_xmaurt.sh` and then ensure that `u-boot.env.img` has
 | ||
|     `xmuart=1telnetctrl=1` near the end of file.
 | ||
| 
 | ||
| * Repack `bin` file adding changed `u-boot.env.img` there like this:
 | ||
|   `zip -u General_IPC_HI3516EV200_85H30AI_S38.Nat.dss.OnvifS.HIK_V5.00.R02.20200507_all.bin u-boot.env.img`
 | ||
| 
 | ||
| * Upgrade camera using new `bin` file.
 | ||
| 
 | ||
| Document origin is [here](https://github.com/OpenIPC/camerasrnd/blob/master/get_telnet.md)
 | ||
| 
 | ||
| ## Commands to measure chip temperature on various SoCs
 | ||
| 
 | ||
| `Hi3516CV200 / Hi3518EV200 / Hi3518EV201`
 | ||
| ```sh
 | ||
| devmem 0x20270110 32 0x60FA0000 ; devmem 0x20270114 8  | awk '{print "CPU temperature: " ((($1)*180)/256)-40}'
 | ||
| ```
 | ||
| 
 | ||
| `Hi3516CV300 / Hi3518EV100`
 | ||
| ```sh
 | ||
| devmem 0x1203009C 32 0x60FA0000 ; devmem 0x120300A4 16 | awk '{print "CPU temperature: " (((($1)-125.0)/806)*165)-40}'
 | ||
| ```
 | ||
| 
 | ||
| `Hi3516EV200 / Hi3516EV300`
 | ||
| ```sh
 | ||
| devmem 0x120280B4 32 0xC3200000 ; devmem 0x120280BC 16 | awk '{print "CPU temperature: " (((($1)-117)/798)*165)-40}'
 | ||
| ```
 | ||
| 
 | ||
| `Hi3536D`
 | ||
| ```sh
 | ||
| himm 0x0120E0110 0x60320000 > /dev/null; himm 0x120E0118 | awk '{print $4}' | dd skip=1 bs=7 2>/dev/null | awk '{print "0x"$1}' | awk '{print "CPU temperature: " (($1*180)/256)-40}'
 | ||
| ```
 | ||
| 
 | ||
| `Hi3536C`
 | ||
| ```sh
 | ||
| himm 0x0120E0110 0x60320000 > /dev/null; himm 0x120E0118 | awk '{print $4}' | dd skip=1 bs=7 2>/dev/null | awk '{print "0x"$1}' | awk '{print "CPU temperature: " (($1-125)/806)*165-40}'
 | ||
| ```
 | ||
| 
 | ||
| `HI3520DV200`
 | ||
| ```sh
 | ||
| devmem 20060020 32
 | ||
| ```
 | ||
| 
 | ||
| `Hi3516AV200`
 | ||
| ```sh
 | ||
| #PERI_PMC68 0x120a0110 (disable-->enable)
 | ||
| himm 0x120a0110 0 > /dev/null;
 | ||
| himm 0x120a0110 0x40000000 > /dev/null;
 | ||
| 
 | ||
| usleep 100000
 | ||
| #PERI_PMC70 0x120a0118 read temperature
 | ||
| DATA0=$(himm 0x120a0118 0 | grep 0x120a0118)
 | ||
| DATA1=$(printf "$DATA0" | sed 's/0x120a0118: //')
 | ||
| DATA2=$(printf "$DATA1" | sed 's/ --> 0x00000000//')
 | ||
| 
 | ||
| let "var=$DATA2&0x3ff"
 | ||
| if [ $var -ge 125 -a $var -le 931 ];then
 | ||
|     echo `awk -v x="$var" 'BEGIN{printf "chip temperature: %f\n",(x-125)*10000/806*165/10000-40}'`
 | ||
| else
 | ||
|     echo "$var ---> invalid. [125,931]"
 | ||
| fi
 | ||
| ```
 | ||
| 
 | ||
| ## Direct streaming to YouTube
 | ||
| 
 | ||
| YouTube offers not only LiveStreaming but also can record this stream.
 | ||
| 
 | ||
| Up to 12 hours of LiveStream can be recorded.
 | ||
| 
 | ||
| Direct streaming to YouTube is possible but not currently supported by OpenIPC.
 | ||
| 
 | ||
| ### Direct streaming can be done with MiniHttp
 | ||
| 
 | ||
| Direct streaming to YouTube could be done with the help of RTMP but there are
 | ||
| currently no plans add this protocol to the main streamer MiniHttp.
 | ||
| 
 | ||
| ### Direct streaming can be done with FFMPEG
 | ||
| 
 | ||
| There are two modes available: the old one, supporting H264 over RTMP,
 | ||
| and the new one, with H265 over HLS.
 | ||
| 
 | ||
| Both methods were not tested in production and still are in development mode.
 | ||
| See following links for details:
 | ||
| 
 | ||
| ### H264 over RTMP
 | ||
| 
 | ||
| Navigate to the compiled package [H264 over RTMP](https://github.com/ZigFisher/Glutinium/tree/master/hi35xx-ffmpeg/files)
 | ||
| 
 | ||
| Copy file `silence.aac` to `/usr/lib/` and file `ffmpeg` to `/usr/sbin/`
 | ||
| 
 | ||
| Also set execution permission:
 | ||
| 
 | ||
| `chmod +x /usr/sbin/ffmpeg`
 | ||
| 
 | ||
| Run `ffmpeg` with the following parameters:
 | ||
| 
 | ||
| `ffmpeg -stream_loop -1 -i /usr/lib/silence.aac -rtsp_transport udp -thread_queue_size 64 -i rtsp://127.0.0.1:554/stream=0 -c:v copy -c:a copy -f flv rtmp://a.rtmp.youtube.com/live2/<your key>`
 | ||
| 
 | ||
| [H265 over HLS](https://gist.github.com/widgetii/ec275524dd621cd55774c952bee4c622)
 | ||
| 
 | ||
| Some build instructions:
 | ||
| 
 | ||
| <https://github.com/ZigFisher/Glutinium/blob/master/hi35xx-ffmpeg/0_Build.sh>
 | ||
| 
 | ||
| [openwrtsysupgrade]: https://github.com/openwrt/openwrt/blob/master/package/base-files/files/sbin/sysupgrade
 |