【树莓派-摄像头】利用TCP协议将拍摄内容保存至本地

拍摄是树莓派比较基础的应用

网上已经有很多成熟的应用实现了视频流的处理

利用这些应用,可以轻松在浏览器中查看实时监控,MJPG即是其中之一

但是MJPG有一个局限,就是只能在树莓派运行的同一个局域网中访问

如果想要实现类似远程监控的能力,那么首先就是要将拍摄内容转发出来,然后在程序中处理之后再转发

树莓派自带的raspivid命令刚好具备这样的录制转发能力(第一次的转发)

关于raspivid详细的介绍可以参考官方文档:

https://www.raspberrypi.org/documentation/raspbian/applications/camera.md

 

在树莓派上执行

raspivid --help

可以看到关于关于起输出的描述如下:

-o, --output	: Output filename <filename> (to write to stdout, use '-o -').
		  Connect to a remote IPv4 host (e.g. tcp://192.168.1.2:1234, udp://192.168.1.2:1234)
		  To listen on a TCP port (IPv4) and wait for an incoming connection use -l
		  (e.g. raspivid -l -o tcp://0.0.0.0:3333 -> bind to all network interfaces, raspivid -l -o tcp://192.168.1.1:3333 -> bind to a certain local IPv4)

也就是说raspivid可以将视频流通过TCP或者UDP转发到一个IP地址上

然后也就可以利用socket编程,处理这个视频流

 

一个简单的raspivid命令如下:

raspivid -w 640 -h 480 -t 5000 -o tcp://192.168.1.101:3333

该命令将录制 格式640*480, 时长 5 S的视频并已TCP协议发送到192.168.1.101的3333端口

如果想要录制一直持续,则将 -t 的参数设置为 0,即执行:

raspivid -w 640 -h 480 -t 0 -o tcp://192.168.1.101:3333

 

接下来就可以利用程序接收和处理这段视频流

我这里用Java的一个实现demo如下,该程序执行之后,然后启动上面的raspivid命令就可以将视频保存在test.h264文件中

(.h264文件可以用应用VLC打开)

也可以将视频保存为普通的.mp4文件(对这个视频流的二次转发在之后的文章中介绍)

public void saveVideoStream() throws IOException {
        ServerSocket cameraSS = new ServerSocket(3333);

        Socket cameraSocket;

        while (true) {
            cameraSocket = cameraSS.accept();

            File file = new File(System.getProperty("user.dir") + "/test.h264");

            InputStream cameraStream = cameraSocket.getInputStream();
            FileOutputStream outputStream = new FileOutputStream(file);
            int content = cameraStream.read();
            while (content != -1) {
                outputStream.write(content);
                content = cameraStream.read();
                outputStream.flush();
            }
        }
    }

 

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值