linux下利用ffmpeg进行截屏传输

本文档介绍了如何在Linux系统中配置并使用ffmpeg进行屏幕截图,并通过socket进行传输。首先,详细讲述了ffmpeg的下载安装过程以及.pro文件的配置。接着,创建socket为截屏传输做准备。在截屏传输部分,主要讨论了初始化步骤,采用x11grab设备获取图像,以及在单独线程中调用截屏的实现。此方法适用于Linux桌面截屏编码的客户端应用,目前仅实现了基本功能,后续有待优化。
摘要由CSDN通过智能技术生成

1 配置ffmpeg

1.1 下载安装ffmpeg

下载ffmpeg-2.7.7.tar.gz

tar -xvzf ffmpeg-2.7.7.tar.gz
cd ffmpeg-2.7.7
./configure --prefix=/usr/local/ffmpeg --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-pthreads  --enable-libmp3lame --enable-libtheora --enable-libx264 --enable-libxvid --enable-x11grab --enable-libvorbis
make
sudo make install

1.2 配置.pro文件

## FFMPEG 2.7.7
FFMPEG_DIRS = /usr/local/ffmpeg
OPENCV_DIRS = /usr/local/include

##FFMPEG
INCLUDEPATH += $${FFMPEG_DIRS}/include

LIBS += -L$${FFMPEG_DIRS}/lib/ -lavcodec -lavdevice -lavfilter -lavformat -lavutil  -lswresample -lswscale -lpostproc

##OPENCV
INCLUDEPATH += $${OPENCV_DIRS}/opencv \
               $${OPENCV_DIRS}/opencv2
LIBS += $${OPENCV_DIRS}/../lib/libopencv_*.so

LIBS += -lpthread

2 创建socket

//  client.cpp

#include "include/client.h"

const int SER_PORT = 12580;    // 服务器接收的端口号
static const char * SER_IP = "192.168.43.1";  // 服务器的IP地址,

int initTcpClient()
{
    int cli_socket = socket(AF_INET, SOCK_STREAM, 0);  // cli_socket为返回的套接字描述符
    if (cli_socket == -1)
    {
        cout << "invalid socket!";
        return 0;
    }

    sockaddr_in seraddr;
    seraddr.sin_family = AF_INET;
    seraddr.sin_port = htons(SER_PORT);    // htons()将输入端口号转换成大端字节序存储,本来就是大端的不变
    inet_pton(AF_INET, SER_IP, &seraddr.sin_addr);  // 将字符串表示的IP地址转换为用数值表示,并存储在seraddr.sin_addr中

    cout << "connecting..." << endl;
    if (connect(cli_socket, (const sockaddr*)&seraddr, sizeof (seraddr)) == -1) // connect()成功返回0, 出错返回-1
    {
        cout << "connect error!"<< endl;
        close(cli_socket);
        return 0;
    }
    cout << "connection successful!" << endl;

//    // 测试
//    char a[10] = "abcd";
//    send(cli_socket, (const char*)a, sizeof(char)*4, 0);

    return cli_socket;  // 返回套接字描述符
}

3 截屏传输

3.1 初始化

注意

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值