【FFMPEG】学习笔记(1)rtmp推流+远程编译调试

本文介绍了如何在Raspberry Pi和Ubuntu上搭建FFmpeg开发环境,包括编译FFmpeg源代码、配置Nginx RTMP服务、远程调试及使用Clion进行源代码学习。通过在Raspberry Pi上推流到Ubuntu上的Nginx服务器,验证了环境的正确性。
摘要由CSDN通过智能技术生成

ffmpeg除了提供了一些跨平台的开发库,还提供了三个开源的命令行工具:

  • ffmpeg:是一种非常快速的视频和音频转换器,源数据也可以从实时音频/视频源中获取。它还可以在任意采样率之间转换,并使用高质量的多相滤波器即时调整视频大小。
  • FFplay:是使用FFmpeg库和SDL库实现的一个简单且可移植的媒体播放器。它主要用作各种FFmpeg API的测试平台。
  • ffprobe:从多媒体流中收集信息,并以人类和机器可读的方式进行显示的工具。

用FFMPEG有一段时间了,但还没有仔细学习过FFMPEG工具(ffmpeg、ffplay)的代码。在分析代码之前,还是需要搭建一个合适的开发环境。大致的环境如下图所示:

Raspberry Pi端:

  1. 我选用的硬件是树莓派4b 8G版本,准备SD卡并烧录官方系统:https://www.raspberrypi.org/software/operating-systems/#raspberry-pi-os-32-bit
  2. 在树莓派系统中下载ffmpeg 4.3.1的源代码并编译(这部分就不细说了,CSDN有很多很好的资料),编译时指定编译目录,目录结构如下
    _build---
                 |-- bin
                 |-- include
                 |-- lib
                 |-- share
  3. 创建一个代码的工作目录(如:/home/pi/Documents/rasp/demo),并安装gdbserver:sudo apt-get install gdbserver,用于远程调试

Ubuntu 端

  1. 安装nginx和http-flv模块,nginx 1.18.0nginx-http-flv-module 1.2.7
    sudo apt-get install gcc
    sudo apt-get install libpcre3 libpcre3-dev
    sudo apt-get install zlib1g zlib1g-dev
    # Ubuntu14.04的仓库中没有发现openssl-dev,由下面openssl和libssl-dev替代
    #apt-get install openssl openssl-dev
    sudo apt-get install openssl 
    sudo apt-get install libssl-dev
    
    sudo ./configure \
    --prefix=/opt/nginx/ \
    --with-http_ssl_module \
    --add-module=/opt/nginx-http-flv-module-1.2.7 
  2. 配置nginx的RTMP服务(生成一个ssl的证书配置https)
    #user  nobody;
    worker_processes  1;
    
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    
    #pid        logs/nginx.pid;
    
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
        #                  '$status $body_bytes_sent "$http_referer" '
        #                  '"$http_user_agent" "$http_x_forwarded_for"';
    
        #access_log  logs/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        #keepalive_timeout  0;
        keepalive_timeout  65;
    
        #gzip  on;
    
        server {
            listen       80;
            server_name  localhost;
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location / {
                root   html;
                index  index.html index.htm;
            }
    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    
    
        # HTTPS server
        #
        server {
            listen       443 ssl;
            server_name  localhost;
    
            ssl_certificate      cert.pem;
            ssl_certificate_key  cert.key;
    
            ssl_session_cache    shared:SSL:1m;
            ssl_session_timeout  5m;
    
            ssl_ciphers  HIGH:!aNULL:!MD5;
            ssl_prefer_server_ciphers  on;
    
            location / {
                root   /home/wangwxl/Documents/html;
                index  index.html index.htm;
            }
    
            location /live {
                flv_live on;
            }
        }
    }
    rtmp {
        server {
            listen 1985; #not default port 1935
    
            application myapp {
                live on;
                gop_cache on;
            }
        }
    }

 

测试ffmpeg和rmtp推流

  1. 在树莓派端的ffmpeg/bin目录下运行指令:(Bird.mp4是一个测试视频可以随意指定)
    ffmpeg -re -i /home/pi/Birds.mp4 -c copy -f flv rtmp://<IP of Ubuntu Server>:1985/myapp/demo
  2. 在MacOS上可以通过VLC播放视频:rtmp://<IP of Ubuntu Server>:1985/myapp/demo

MacOS端

  1. 安装jetbrains的C/C++开发工具Clion:https://www.jetbrains.com/clion/
  2. 准备ffmpeg(命令行工具的代码):可以从我的github上直接下载:https://github.com/edimy-wxl/learning_ffmpeg.git
  3. 用Clion打开代码目录
  4. 打开 Preference --> Build, Execution, Deployment --> Deployment,配置连接树莓派
  5. 同一个配置界面配置Mac端和树莓派端的代码同步目录
  6. 打开 Preference --> Build, Execution, Deployment --> Toolchains,这里配置的toolchain是树莓派端的
  7. 打开 Preference --> Build, Execution, Deployment --> CMake,配置一个Debug的profile
  8. 添加一个Debug配置
  9. 运行后Clion控制台显示cmake编译成功的信息,并在树莓派的同步目录中查看编译后的可执行程序:

  10. 用之前的推流指令测试编译后的可执行程序
  11. 通过gdbserver启动ffmpeg,并指定端口,在clion程序入口添加断点,点击Debug按钮,测试远程调试
    gdbserver :1234 ./ffmpeg -re -i /home/pi/Birds.mp4 -c copy -f flv rtmp://<IP of Ubuntu Server>:1985/myapp/demo

到此开发环境以及搭建完成,后续将详细学习ffmpeg、ffplay、ffprob的源代码

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值