c++:FFmpeg拉流存本地,例子
时间: 2024-03-25 18:34:01 浏览: 223
FFMPEG C++封装
C++是一种通用的编程语言,泛应用于软件开发领域。它具有高效、灵活和可扩展的特性,被广泛用于开发各种类型的应用程序,包括嵌入式系统、桌面应用、游戏开发等。
FFmpeg是一个开源的跨平台音视频处理工具库,它提供了一组丰富的功能和接口,可以用于音视频的编解码、转码、流媒体处理等。在C++中使用FFmpeg进行拉流并存储到本地的例子如下:
```cpp
#include <iostream>
extern "C" {
#include <libavformat/avformat.h>
}
int main() {
av_register_all();
AVFormatContext* formatContext = nullptr;
AVPacket packet;
// 打开输入文件
if (avformat_open_input(&formatContext, "input_url", nullptr, nullptr) != 0) {
std::cout << "无法打开输入文件" << std::endl;
return -1;
}
// 查找流信息
if (avformat_find_stream_info(formatContext, nullptr) < 0) {
std::cout << "无法获取流信息" << std::endl;
return -1;
}
// 打开输出文件
FILE* outputFile = fopen("output_file", "wb");
if (!outputFile) {
std::cout << "无法打开输出文件" << std::endl;
return -1;
}
// 遍历所有流
for (int i = 0; i < formatContext->nb_streams; i++) {
if (formatContext->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
AVCodecParameters* codecParameters = formatContext->streams[i]->codecpar;
// 可以在这里进行视频流的处理
} else if (formatContext->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
AVCodecParameters* codecParameters = formatContext->streams[i]->codecpar;
// 可以在这里进行音频流的处理
}
}
// 读取数据包并写入输出文件
while (av_read_frame(formatContext, &packet) >= 0) {
fwrite(packet.data, 1, packet.size, outputFile);
av_packet_unref(&packet);
}
// 关闭文件和释放资源
fclose(outputFile);
avformat_close_input(&formatContext);
return 0;
}
```
这个例子演示了如何使用FFmpeg库进行拉流并将数据存储到本地文件中。你可以根据自己的需求对视频流和音频流进行处理。请注意,你需要先安装FFmpeg库,并在编译时链接相应的库文件。
阅读全文