python 视频流_Python实现mjpeg视频流
从摄像头获取图像,然后通过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 "
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("POST OK. Camera Set to
");
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 :'+ str(port) + '/1.mjpeg'
server.serve_forever()
except KeyboardInterrupt:
print '^C received, shutting down server'
server.socket.close()
if __name__ == '__main__':
main()
在浏览器中输入127.0.0.1:8080/1.mjpeg 访问
或用VLC播放器,输入http://:8080/1.mjpeg访问
说明:1.mjpeg可以换成任意字符.mjpeg,如aaa.mjpeg,都可以访问
python 视频流_Python实现mjpeg视频流相关推荐
- python画代码-Python教程_Python画Mandelbrot集 代码
Python教程_Python画Mandelbrot集 代码 作者:Comet 来源: 课课家 www.kokojia.com点击数:278发布时间:2015-06-19 11:17:19 曼德勃罗集 ...
- 【Android FFMPEG 开发】FFMPEG 获取 AVStream 音视频流 ( AVFormatContext 结构体 | 获取音视频流信息 | 获取音视频流个数 | 获取音视频流 )
文章目录 博客简介 . FFMPEG 音视频流 获取流程 I . FFMPEG 获取音视频流信息 ( AVFormatContext 结构体 ) II . FFMPEG 获取 音视频流 数量 III ...
- c语言实现爬虫功能,用C/C 扩展Python语言_python 调用c语言 python实现简单爬虫功能_python实现简单爬虫...
用C/C 扩展Python语言 Python是一门功能强大的脚本语言,它的强大不仅表现在功能上,还表现在其扩展性上.她提供大量的API以方便程序员利用C/C++对Python进行扩展.因为执行速度慢几 ...
- python编程语言_python编程语言的简要历史
python编程语言 The Python programming language is a general-purpose programming language that has carved ...
- 2019最新Python学习教程(Python视频教程_Python学习教程_Python学习路线):你心目中编程界的MVP是谁?
2019最新Python学习教程(Python视频教程_Python学习教程_Python学习路线):你心目中编程界的MVP是谁?编程界的王者是渐落寞的Java还是大火的Python? 是不是你们也喜 ...
- python播放视频代码_python实现实时视频流播放代码实例
这篇文章主要介绍了python实现实时视频流播放代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 @action(methods=['GET' ...
- python rtsp推流_python处理RSTP视频流过程解析
python处理RSTP视频流过程解析 这篇文章主要介绍了python处理RSTP视频流过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 py ...
- python视频拼接两个视频流合成一个视频流
import cv2 import numpy as np video = "http://admin:admin@192.168.137.124:8081"##选择摄像头 vid ...
- python读取海康摄像头视频流rtsp
需要安装相应的opencv库:anaconda中执行:pip install opencv-python 代码: import cv2 url = 'rtsp://admin:我的密码@我的摄像头IP ...
最新文章
- Ubuntu14.04上安装TensorRT 2.1操作步骤
- 验证曲线( validation curve)是什么?如何绘制验证曲线( validation curve)?验证曲线( validation curve)详解及实践
- 数据库除关系运算符执行过程详解
- PHP无刷新上传面向过程写法iframe
- HH SaaS电商系统的商城模块设计
- noi题库(noi.openjudge.cn) 1.8编程基础之多维数组T21——T25
- 39 MM配置-采购-采购订单-STO配置-定义工厂的装运数据
- oracle复杂密码,如何配置 Oracle 11g 复杂密码校验设置
- openlayers3 根据经纬度 自动画框_自动驾驶定位为什么少不了惯性导航?
- 人工智能芯片的前世与今生
- Aho-Corasick暂存第二篇
- 安装office相关组件出现错误1310
- 计算机再带word打不开怎么办,Word文档打不开怎么办 Word打开出错的解决办法
- 《代码大全》读书笔记之一
- 1、Canopen 轻松入门
- 【IPC通信】key_t键和ftok函数
- ubuntu 安装方法 wubi
- 批处理、分时、实时各个操作系统特点
- 计算机辅助遥感制图的基本过程,项目八-遥感专题图的制作
- 用 AXIOM 促进 XML 处理
热门文章
- 电磁波传播相位是否会变化_民众纷纷转向网上购物,却又担心包裹信件是否会传播病毒?!...
- Java Annotation(注解)使用教程
- 基于JAVA+SpringMVC+Mybatis+MYSQL的课堂考勤系统
- 基于JAVA+SpringMVC+MYSQL的自动排课系统
- 基于Asp.net MVC的系统架构
- BZOJ3230 相似子串 【后缀数组】
- synchronized 详解,偏向锁,轻量锁,重量锁
- 个人技术博客--团队Git规范(参考西瓜学长)
- 1.4.2 solr字段类型--(1.4.2.4)使用Dates(日期)
- JavaScript面向对象:类、方法、属性