前言
音视频系列博客:
音视频系列1:ffmpeg+rtmp拉流
音视频系列2:ffmpeg将H.264解码为RGB
音视频系列3:使用ffmpeg + nginx搭建本地转发服务器
音视频系列4:新手如何入门ffmpeg(以FLV解码H.264为例)
有兴趣的小伙伴们可以看看。
上节我们更新了ffmpeg拉流中过时的API,本节将对上节的代码进行封装,并引入ROS包,使得ffmpeg拉来的流可以通过ROS系统进行传输,伸手党可以直接拉到最下面,附github代码。
封装
原本只有一个main.cpp,现在我们定义一个Transdata类。
所以现在扩展成三个文件:
transdata.cpp
transdata.h
Trans_node.cpp
其中,transdata.cpp里写明类的函数的具体过程,transdata.h用于定义函数名,Trans_node.cpp用于实例化Transdata类,并调用其函数。
Trans_node.cpp
:
#include <iostream>
#include "transdata.h"
Transdata transdata;
using namespace std;
int main(int argc, char** argv)
{
if(transdata.Transdata_init() < 0)
{
cout <<"init error !" << endl;
return -1;
}
while(1)
{
transdata.Transdata_Recdata();
}
transdata.Transdata_free();
return 0;
}
transdata.cpp
里定义了几个重要的函数,分别是:
初始化:Transdata_init()
int Transdata::Transdata_init() {
//Register
av_register_all();
//Network
avformat_network_init();
//Input
if ((ret = avformat_open_input(&ifmt_ctx, in_filename, 0, 0)) < 0) {
printf