将视频从Raspberry pi相机流式传输到Android应用

时间:2017-08-20 13:20:26

标签: android python camera raspberry-pi

我目前正在使用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。

在我看来,我有两种方式。

  1. 在python上使用不同的方式来传输视频输出。
  2. 以某种方式处理协议tcp / h264(可能使用套接字并独立解析流字节到视频)。有可能:https://github.com/ShawnBaker/RPiCameraViewer但我正在寻找更好(不是低级别)的解决方案。

1 个答案:

答案 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)

这将在另一个线程中启动它,因此它不会阻止你的程序/