Video fingerprinting using watermarks is described herein. A watermark
encoder embeds a watermark into an input video to produce a watermarked
video. The watermark encoder can choose particular regions of the video
that are sufficiently complex for watermarking. Spatial and temporal
complexity analyses can be performed on a per-pixel basis to locate
suitable regions of the video. The watermarks can be embedded using a
unique codeword associated with a given user. A watermark decoder can
receive the watermarked video. In some instances, the watermarked video
may have been attacked in some way after being output by the watermark
encoder. In these instances, the watermark decoder can extract the
watermark from the watermarked video. In turn, the watermark decoder can
extract the codeword from the watermark, and compare the extracted
codeword to a plurality of known codewords associated with respective
users.