先介绍一下什么叫 MJPG。

Motion JPEG (M-JPEG 或者 MJPEG) 算法其实就是对于视频序列采用 JPEG 压缩算法,从而生成一个序列的 JPEG 图像视频帧,通过这种方式,来实现视频压缩的方法。这个方法大量存在于一些视频非线性编辑器、摄像头设备上。

这种方式只有帧内预测而没有帧间预测,虽然需要大量的存储空间和带宽,但是也有一些优点:

  1. 相比于 H.264 这些,只需要很少的计算量就可以进行压缩,算法简单,因此在一些低端设备里,可采用此类方法来生成视频序列。
  2. 对画面里的剧烈运动内容不敏感,即剧烈运动的时候,也不会导致图像太模糊。相比之下,对于 H.264 这些有帧间压缩的算法,对于剧烈运动的场景,在码率并没有提高的情况下,视频的质量肯定会变差。
  3. 因为各个帧都是独立存在的,所以可以很方便地对视频进行编辑操作,计算量很小。

缺点:

  1. 打包 M-JPEG 的容器标准并不统一,也没有一个标准,所以比较混乱;
  2. 因为采用 JPEG 压缩算法,所以很费带宽,甚至效果还不如 JPEG2000 算法来得高效。

MJPG-streamer 是一个可以从本地摄像头读取视频数据,然后生成 MJPG 序列的应用程序,生成的 MJPG 可以给大多数浏览器或是播放器使用。