flask【1】: 局域网传输PC端opencv读取视频,手机端显示

  • Post author:
  • Post category:其他




利用python的flask包进行本地局域网连接。 实现PC端利用opencv-python读取摄像头,手机端接收视频。



目前只能做到一对一,下一步研究局域网一对多传输

******(顺便记录几个可用的直播测试源(与本文无关):

  1. rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov
  2. rtmp://live.hkstv.hk.lxdns.com/live/hks1
  3. rtmp://live.hkstv.hk.lxdns.com/live/hks2
  4. rtmp://202.69.69.180:443/webcast/bshdlive-pc

    )******



环境需要:

sudo pip install flask
sudo pip install opencv-python


手机端接收的视频截图



在这里插入图片描述


1. pc端读取usb摄像头数据

camera=cv2.VideoCapture(1) 


2. 进行每帧图像的编码

imgencode=cv2.imencode('.jpg',im)[1]


参考


cv2.imdecode()函数从指定的内存缓存中读取数据,并把数据转换(解码)成图像格式;主要用于从网络传输数据中恢复出图像。

cv2.imencode()函数是将图片格式转换(编码)成流数据,赋值到内存缓存中;主要用于图像数据格式的压缩,方便网络传输。

**

3. 图像格式的转换

stringData=imgencode.tostring()


4. yield返回生成器

        yield (b'--frame\r\n'
            b'Content-Type: text/plain\r\n\r\n'+stringData+b'\r\n')


5. 调用flask包

app = Flask(__name__)
@app.route('/')
def index():
    return render_template('index.html')
    @app.route('/calc')
def calc():
     return Response(get_frame(),mimetype='multipart/x-mixed-replace; boundary=frame')


6. 局域网设置

**

	HOST = '0.0.0.0'     #而localhost只能在本机运行
	app.run(host=HOST, port=9000)

然后手机输入你程序所在的的ip,加上端口

如格式:192.168.1.2:900


另外还需要编辑一个 html文件:

<html>
  <head>
    <title>局域网:Video Streaming Test</title>
  </head>
  <body>
    <h1>局域网测试:一对一</h1>
    <img src="{{ url_for('calc') }}">
  	<!-- <h1>{{ url_for('calc') }}</h1> -->
  </body>
</html>


参考1



版权声明:本文为qq_32768679原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。