ffmpeg使用:(ubuntu)获取rtsp源流(h264)解码为YUV420p,再重新编码为h264

本文介绍了如何在Ubuntu系统中利用ffmpeg获取rtsp源流,解码为YUV420p格式,然后重新编码回h264。内容包括ffmpeg的安装过程,特别指出ffmpeg需要单独安装x264编码库,并添加环境变量。正文提到了CMakeLists.txt文件的配置以及关键源文件,如rtspSource.cpp、h264decodeInit.cpp等,还提醒在编译时使用pkg-config解决编译问题。
摘要由CSDN通过智能技术生成

一 ffmpeg安装:
参考链接 https://blog.csdn.net/danfengw/article/details/62887997
注意:ffmpeg没有x264编码(带有x264解码)需要自己安装,上面链接提供安装的指令;
都安装完成后需要添加环境变量

sudo vim ~/.bashrc
在末尾添加
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/wping/ffmpeg_build/lib/
export PKG_CONFIG_PATH=/home/wping/ffmpeg_build/lib/pkgconfig/

二 正文

在这里插入图片描述
所有文件内容如上

  1. CMakeLists.txt文件

    这里有个坑刚开始怎么也编译不了最后用pkg-config编译
    在(ffmpeg_build/lib)中有个pkgconfig文件

CMAKE_MINIMUM_REQUIRED(VERSION 3.0)
project(demo)
set(CMAKE_C_COMPILER "g++")
add_definitions(`pkg-config --cflags --libs x264 libswscale libavformat libavutil libavcodec`)
include(FindPkgConfig)
pkg_check_modules(AVCODEC REQUIRED libavcodec)
pkg_check_modules(AVFORMAT REQUIRED libavformat)
pkg_check_modules(AVSCALE REQUIRED libswscale)
pkg_check_modules(AVDEV REQUIRED libavdevice)
pkg_check_modules(AVUTIL REQUIRED libavutil)
pkg_check_modules(AVX REQUIRED x264)
pkg_check_modules(AVPOST REQUIRED libpostproc)
set(INC_DIR /home/wping/ffmpeg_build/include/) //在这里注意路径问题
set(LINK_DIR /home/wping/ffmpeg_build/lib/pkgconfig)
include_directories(${INC_DIR} ./include)
link_directories(${AVX_LIBRARY_DIRS} ${AVSCALE_LIBRARY_DIRS} ${AVFORMAT_LIBRARY_DIRS} ${AVUTIL_LIBRARY_DIRS} ${AVCODEC_LIBRARY_DIRS})
aux_source_directory(src SOURCE_FILES)
set(SOURCE ${SOURCE_FILES})
add_executable(demo ${SOURCE})
target_link_libraries(demo ${AVX_LDFLAGS} ${AVSCALE_LDFLAGS} ${AVFORMAT_LDFLAGS} ${AVUTIL_LDFLAGS} ${AVCODEC_LDFLAGS} )
  1. main.cpp
#include<stdio.h>
#include"rtspSource.h"
int main(){
    char fileName[]= "rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov";//自己可以选择源流
    rtspSource(fileName);
}

3.rtspSource.cpp

void rtspSource(char* fileName){
    FILE *fpSaveH264;
    if((fpSaveH264= fopen("saveH264.h264", "ab"))== NULL) return;
    FILE *fpSaveYUV;
    if(( fpSaveYUV= fopen("saveYUV.yuv", "ab")) == NULL) return;
    ffmpegCommonSet *decodePro= new ffmpegCommonSet();
    ffmpegCommonSet *encodePro= new ffmpegCommonSet();
    h264decodeInit(decodePro, fileName);
    h264encodeInit(encodePro, decodePro->pCodecCtx, decodePro->pCodecCtx->width, decodePro->pCodecCtx->height);
    for(; ;){
        av_init_packet(&decodePro->packet);
        if(av_read_frame(decodePro->pFormatCtx, &decodePro->packet)>= 0){   
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值