我目前正在使用Raspberry pi和mobile(Android)编写项目。 我有问题从Camera Rpi发送数据到Android App。
我在python上使用了Picamera库:https://picamera.readthedocs.io/en/release-1.13/recipes1.html#recording-to-a-network-stream。
我在Rpi上的实际代码看起来像这样:
import socket
import time
import picamera
camera = picamera.PiCamera()
camera.resolution = (640, 480)
camera.framerate = 24
server_socket = socket.socket()
server_socket.bind(('0.0.0.0', 8000))
server_socket.listen(0)
# Accept a single connection and make a file-like object out of it
connection = server_socket.accept()[0].makefile('wb')
try:
camera.start_recording(connection, format='h264')
camera.wait_recording(60)
camera.stop_recording()
finally:
connection.close()
server_socket.close()
要接收流,我们可以使用:tcp / h264://x.x.x.x:8000。当我使用vlc时,它可以在PC上运行。
在Android上我尝试使用VideoView或ExoPlayer,但问题在于URI,因为android无法解析tcp / h264协议。
当我尝试使用vlc进行流式传输时:
raspivid -o - -t 99999 |cvlc -vvv stream:///dev/stdin --sout '#standard{access=http,mux=ts,dst=:8000}' :demux=h264
如果我使用前缀http://传递url但是不是来自我在python上的程序,它适用于Android。
在我看来,我有两种方式。
答案 0 :(得分:0)
您可以轻松地从python中流式传输,只需使用
import subprocess
subprocess.Popen("raspivid -o - -t 99999 |cvlc -vvv stream:///dev/stdin --sout '#standard{access=http,mux=ts,dst=:8000}' :demux=h264", shell=True)
这将在另一个线程中启动它,因此它不会阻止你的程序/