美文网首页我爱编程
Python实现mjpeg视频流

Python实现mjpeg视频流

作者: Craftor | 来源:发表于2018-05-27 21:55 被阅读0次
  1. 从摄像头获取图像,然后通过mjpeg stream方式显示。
# -*- coding: utf-8 -*-

#MJPEG Server for the webcam

import string,cgi,time
from os import curdir, sep
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
from SocketServer import ThreadingMixIn
import cv2.cv as cv
import re
import sys
import imutils
import socket

capture = cv.CaptureFromCAM(0)
img1 = cv.QueryFrame(capture)

if img1 == None :
    print "No WebCam Found!"
    sys.exit()

if len(sys.argv) < 2 :
    print "Usage : webcamserver <quality> <port>"
    cameraQuality = 100
    port = 8080
else:
    cameraQuality = sys.argv[1]
    port = int(sys.argv[2])

class MyHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        global cameraQuality
        try:
            self.path=re.sub('[^.a-zA-Z0-9]', "",str(self.path))
            if self.path=="" or self.path==None or self.path[:1]==".":
                return
            if self.path.endswith(".html"):
                f = open(curdir + sep + self.path)
                self.send_response(200)
                self.send_header('Content-type',    'text/html')
                self.end_headers()
                self.wfile.write(f.read())
                f.close()
                return
            if self.path.endswith(".mjpeg"):
                self.send_response(200)
                self.wfile.write("Content-Type: multipart/x-mixed-replace; boundary=--aaboundary")
                self.wfile.write("\r\n\r\n")
                while 1:
                    img1 = cv.QueryFrame(capture)

                    cv2mat1 = cv.EncodeImage(".jpeg", img1, (cv.CV_IMWRITE_JPEG_QUALITY, cameraQuality))

                    JpegData1 = cv2mat1.tostring()
                    self.wfile.write("--aaboundary\r\n")
                    self.wfile.write("Content-Type: image/jpeg\r\n")
                    self.wfile.write("Content-length: "+str(len(JpegData1))+"\r\n\r\n" )
                    self.wfile.write(JpegData1)
                    self.wfile.write("\r\n\r\n\r\n")
                    time.sleep(0.02)
                return
            if self.path.endswith(".jpeg"):
                f = open(curdir + sep + self.path)
                self.send_response(200)
                self.send_header('Content-type','image/jpeg')
                self.end_headers()
                self.wfile.write(f.read())
                f.close()
                return
            return
        except IOError:
            self.send_error(404,'File Not Found: %s' % self.path)
    def do_POST(self):
        global rootnode, cameraQuality
        try:
            ctype, pdict = cgi.parse_header(self.headers.getheader('content-type'))
            if ctype == 'multipart/form-data':
                query=cgi.parse_multipart(self.rfile, pdict)
            self.send_response(301)

            self.end_headers()
            upfilecontent = query.get('upfile')
            print "filecontent", upfilecontent[0]
            value=int(upfilecontent[0])
            cameraQuality=max(2, min(99, value))
            self.wfile.write("<HTML>POST OK. Camera Set to<BR><BR>");
            self.wfile.write(str(cameraQuality));

        except :
            pass

class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
#class ThreadedHTTPServer(HTTPServer):
    """Handle requests in a separate thread."""

myname = socket.getfqdn(socket.gethostname())
myaddr = socket.gethostbyname(myname)

def main():
    while 1:
        try:
            server = ThreadedHTTPServer(('0.0.0.0', port), MyHandler)
            print 'Starting httpServer...'
            print 'See <Local IP>:'+ str(port) + '/1.mjpeg'
            server.serve_forever()
        except KeyboardInterrupt:
            print '^C received, shutting down server'
            server.socket.close()

if __name__ == '__main__':
    main()
  1. 在浏览器中输入127.0.0.1:8080/1.mjpeg 访问

  2. 或用VLC播放器,输入http://<本机IP>:8080/1.mjpeg访问

  3. 说明:1.mjpeg可以换成任意字符.mjpeg,如aaa.mjpeg,都可以访问

相关文章

  • Python实现mjpeg视频流

    从摄像头获取图像,然后通过mjpeg stream方式显示。 在浏览器中输入127.0.0.1:8080/1.mj...

  • Mjpeg视频流加载

    由于Mjpeg流是通过一帧一帧的图片发送来达到视频显示的效果,所以我们用类似网络加载图片方式加载,但是由于这个流是...

  • 6.4 人脸识别

    6.4.1 输入 mjpeg视频流 6.4.2 输出 脸部图片 6.4.3 功能描述 6.4.3.1 识别根据固定...

  • python+opencv+mjpeg

    实现了从硬件udp推送照片到服务器,其他设备访问http://127.0.0.1:8080/1.mjpeg 查看图...

  • python是如何利用多线进程优化视频应用到的? 原来是这样的

    前言 如果要用Python播放视频,或者打开摄像头获取视频流,我们可以用OpenCV Python。但是在视频帧获...

  • 视频推流实现

    视频推流就是将客户端录制的视频资源发送到服务器上。 本节主要研究的是如何录制视频并进行转码以rtmp协议推送到服务...

  • 视频拉流实现

    从上一篇我们知道了视频拉流就是播放从服务器拉取资源进行资源播放。这篇文章就是讲解如何播放视频。 看了好多文章,普遍...

  • 用flash实现视频流/video 视频流

    video部分 flash部分 恒远国创 .headerbar{ transfo...

  • 图片生成视频

    首先安装python的opencv。 在opencv中可以将图片读取,并构造视频流。视频流可以设置帧率等参数。 代...

  • Demo

    IOS视频直播 + 推流实现 采用开源框架ijkplayer 以及LFLiveKit实现推流,主要完善关注,分享和登录

网友评论

    本文标题:Python实现mjpeg视频流

    本文链接:https://www.haomeiwen.com/subject/gxmijftx.html