A load balancing method for video decoding in a video surveillance system which is configured to carry out a plurality of video decoding processes each corresponding to a stream of video data from one of a plurality of video cameras, the system comprising resources for hardware and software decoding, wherein the resources for hardware decoding comprise a plurality of GPUs including a first type and a second type different from the first type and the resources for software decoding comprise a video codec program module executable by at least one CPU core, the method comprising the steps of: monitoring loads of the GPUs, wherein the monitoring the loads of each of the GPUs is carried out by a continuously running utilization thread for each type of GPU; for a new decoding process, carrying out load balancing comprising the steps of: determining which GPUs are suitable GPUs for the new decoding process based on an implementation request for the decoding process, wherein the implementation request specifies which type of GPU the process can run on, and the step of determining which GPUs are suitable for the decoding process comprises checking the implementation request and determining suitable GPUs of the type according to the implementation request; determining a current load of each of the suitable GPUs; determining the suitable GPU as a potential GPU, if the current load of the GPU is less than a threshold and determining the GPU as an overloaded GPU, if the current load of the GPU is greater than or equal to the threshold; if there are no suitable GPUs, then carrying out the new decoding process by software decoding using the video codec program module executed by the at least one CPU core; if there is only one potential GPU, then carrying out the new decoding process on the GPU; if there are more than one potential GPU, then determining how many decoding processes are currently running on each potential GPU and carrying out the new decoding process on the potential GPU having the fewest decoding processes. monitoring loads of the GPUs, wherein the monitoring the loads of each of the GPUs is carried out by a continuously running utilization thread for each type of GPU; for a new decoding process, carrying out load balancing comprising the steps of: determining which GPUs are suitable GPUs for the new decoding process based on an implementation request for the decoding process, wherein the implementation request specifies which type of GPU the process can run on, and the step of determining which GPUs are suitable for the decoding process comprises checking the implementation request and determining suitable GPUs of the type according to the implementation request; determining a current load of each of the suitable GPUs; determining the suitable GPU as a potential GPU, if the current load of the GPU is less than a threshold and determining the GPU as an overloaded GPU, if the current load of the GPU is greater than or equal to the threshold; if there are no suitable GPUs, then carrying out the new decoding process by software decoding using the video codec program module executed by the at least one CPU core; if there is only one potential GPU, then carrying out the new decoding process on the GPU; if there are more than one potential GPU, then determining how many decoding processes are currently running on each potential GPU and carrying out the new decoding process on the potential GPU having the fewest decoding processes. determining which GPUs are suitable GPUs for the new decoding process based on an implementation request for the decoding process, wherein the implementation request specifies which type of GPU the process can run on, and the step of determining which GPUs are suitable for the decoding process comprises checking the implementation request and determining suitable GPUs of the type according to the implementation request; determining a current load of each of the suitable GPUs; determining the suitable GPU as a potential GPU, if the current load of the GPU is less than a threshold and determining the GPU as an overloaded GPU, if the current load of the GPU is greater than or equal to the threshold; if there are no suitable GPUs, then carrying out the new decoding process by software decoding using the video codec program module executed by the at least one CPU core; if there is only one potential GPU, then carrying out the new decoding process on the GPU; if there are more than one potential GPU, then determining how many decoding processes are currently running on each potential GPU and carrying out the new decoding process on the potential GPU having the fewest decoding processes.