linux 下scrcpy 手机投屏到电脑,QT+ffmpeg 获取视频流,处理等等

2024-01-29 09:04

本文主要是介绍linux 下scrcpy 手机投屏到电脑,QT+ffmpeg 获取视频流,处理等等,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

linux 下scrcpy 手机投屏到电脑,QT+ffmpeg 获取视频流,处理

1 安装 scrcpy

地址 https://github.com/Genymobile/scrcpy
转到 relese 下载
我这里下载的是linux系统 v2.3.1 版本 scrcpy-2.3.1.tar.gz
下载 scrcpy-server v2.3.1 版本 scrcpy-server-v2.3.1

解压scrcpy-2.3.1.tar.gz 到目录 scrcpy-2.3.1 安装:

./install_release.sh

打印 scrcpy 安装目录是 /usr/local/bin/scrcpy
scrcpy-server安装目录是 /usr/local/share/scrcpy/scrcpy-server

2 安装scrcpy-server

把 scrcpy-server-v2.3.1 复制到 路径 /usr/local/share/scrcpy/scrcpy-server

mv scrcpy-server-v2.3.1 /usr/local/share/scrcpy/scrcpy-server

3 手机打开wifi debug ,通过无线连接,保证电脑和手机在同一个局域网

连接方式有很多,可以通过有线方式,这里用无线方式举例
我的是华为手机,查看这篇文章 ADB无线调试——华为篇——鸿蒙系统 https://blog.csdn.net/ai_qh77/article/details/123383801

其它品牌手机自行查找方法

4 scrcpy 连接手机测试

wmx@wmx-ubuntu:~$ adb devices 
List of devices attached192.168.2.105:5555	device

说明我的手机已经 adb无线调试模式 连接到电脑
然后输入命令:

wmx@wmx-ubuntu:~$ scrcpy
scrcpy 2.3.1 <https://github.com/Genymobile/scrcpy>
INFO: ADB device found:
INFO:     --> (tcpip)  192.168.2.105:5555              device  NOH_AN01
/usr/local/share/scrcpy/scrcpy-server: 1 file pushed. 0.6 MB/s (66007 bytes in 0.098s)
[server] INFO: Device: [HUAWEI] HUAWEI NOH-AN01 (Android 12)
INFO: Renderer: opengl
INFO: OpenGL version: 4.6.0 NVIDIA 535.86.10
INFO: Trilinear filtering enabled
INFO: Texture: 1152x2376

可以看到手机已经投屏到ubuntu 电脑
在这里插入图片描述

这种方式 scrcpy 默认使用SDL渲染界面,如果我们想自己处理每一帧手机投屏的图像,接下来步骤5

5 通过 v4l2 方式,连接到linux电脑,然后Qt +ffmpeg 读取视频帧处理

参考 文章 https://github.com/Genymobile/scrcpy/blob/master/doc/v4l2.md

安装模块

sudo apt install v4l2loopback-dkms

查看设备

wmx@wmx-ubuntu:~$ v4l2-ctl --list-devices
aoni webcam A20: aoni webcam A2 (usb-0000:00:14.0-10.2):/dev/video0/dev/video1/dev/media0

创建v4l2设备

sudo modprobe v4l2loopback

再查看设备:

wmx@wmx-ubuntu:~$ v4l2-ctl --list-devices
Dummy video device (0x0000) (platform:v4l2loopback-000):/dev/video2aoni webcam A20: aoni webcam A2 (usb-0000:00:14.0-10.2):/dev/video0/dev/video1/dev/media0

看到多一个 /dev/video2 ,这个就是我们通过代码读取的设备

scrcpy 通过 v4l2方式启动,关联/dev/video2

scrcpy --v4l2-sink=/dev/video2

6 QT +ffmpeg 读取设备 /dev/video2

我这已经提前安装好ffmpeg,配置好 linux 下 pkg-config

testVideo3.pro

QT       += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0SOURCES += \ffmpegvideo.cpp \main.cpp \mainwindow.cppHEADERS += \ffmpegvideo.h \mainwindow.hFORMS += \mainwindow.uimessage("use system ffmpeg")
!android {unix:!macx {message(linux ffmpeg !!! )CONFIG += link_pkgconfig# PKGCONFIG += 库的pc文件名PKGCONFIG += libavcodec libavfilter libavformat libswscale libavutil libswresample  libavdevice  libpostproc}
}# Default rules for deployment.
DESTDIR = $$PWD/app

ffmpegvideo.h

#ifndef FFMPEGVIDEO_H
#define FFMPEGVIDEO_H#include <QImage>
#include <QWidget>
#include <QPaintEvent>
#include <QThread>
#include <QPainter>
#include <QDebug>#include <string>extern "C"{
#include <libavcodec/avcodec.h>
#include <libavdevice/avdevice.h>
#include <libavutil/channel_layout.h>
#include <libavutil/common.h>
#include <libavutil/frame.h>
#include <libavutil/samplefmt.h>
#include <libavutil/opt.h>
#include <libavutil/imgutils.h>
#include <libavutil/parseutils.h>
#include <libavutil/mem.h>#include <libswscale/swscale.h>#include <libavformat/avformat.h>
}using namespace std;class FFmpegVideo : public QThread
{Q_OBJECT
public:explicit FFmpegVideo();~FFmpegVideo();void setUrl(QString url);bool open_input_file();protected:void run();signals:void sendQImage(QImage);private:AVFormatContext *fmtCtx       =NULL;const AVCodec         *videoCodec   =NULL;AVCodecContext  *videoCodecCtx=NULL;AVPacket        *pkt          = NULL;AVFrame         *yuvFrame     = NULL;AVFrame         *rgbFrame     = NULL;struct SwsContext *img_ctx=NULL;unsigned char *out_buffer=nullptr;int videoStreamIndex =-1;int numBytes = -1;QString _url;
};class FFmpegWidget : public QWidget
{Q_OBJECT
public:explicit FFmpegWidget(QWidget *parent = nullptr);~FFmpegWidget(

这篇关于linux 下scrcpy 手机投屏到电脑,QT+ffmpeg 获取视频流,处理等等的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/656402

相关文章

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

使用Python实现全能手机虚拟键盘的示例代码

《使用Python实现全能手机虚拟键盘的示例代码》在数字化办公时代,你是否遇到过这样的场景:会议室投影电脑突然键盘失灵、躺在沙发上想远程控制书房电脑、或者需要给长辈远程协助操作?今天我要分享的Pyth... 目录一、项目概述:不止于键盘的远程控制方案1.1 创新价值1.2 技术栈全景二、需求实现步骤一、需求

Qt spdlog日志模块的使用详解

《Qtspdlog日志模块的使用详解》在Qt应用程序开发中,良好的日志系统至关重要,本文将介绍如何使用spdlog1.5.0创建满足以下要求的日志系统,感兴趣的朋友一起看看吧... 目录版本摘要例子logmanager.cpp文件main.cpp文件版本spdlog版本:1.5.0采用1.5.0版本主要

Linux ls命令操作详解

《Linuxls命令操作详解》通过ls命令,我们可以查看指定目录下的文件和子目录,并结合不同的选项获取详细的文件信息,如权限、大小、修改时间等,:本文主要介绍Linuxls命令详解,需要的朋友可... 目录1. 命令简介2. 命令的基本语法和用法2.1 语法格式2.2 使用示例2.2.1 列出当前目录下的文

resultMap如何处理复杂映射问题

《resultMap如何处理复杂映射问题》:本文主要介绍resultMap如何处理复杂映射问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录resultMap复杂映射问题Ⅰ 多对一查询:学生——老师Ⅱ 一对多查询:老师——学生总结resultMap复杂映射问题

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下:

golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法

《golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法》:本文主要介绍golang获取当前时间、时间戳和时间字符串及它们之间的相互转换,本文通过实例代码给大家介绍的非常详细,感兴趣... 目录1、获取当前时间2、获取当前时间戳3、获取当前时间的字符串格式4、它们之间的相互转化上篇文章给大家介

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片