ffmpeg-avio实战:打开本地文件或者网络直播流dome

embedded/2025/1/11 12:28:43/

        使用ffmpeg打开打开本地文件或者网络直播流的一个小dome。流程产靠ffmpeg4.x系列的解码流程-CSDN博客

        

#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>  
#include <libavformat/avio.h>
#include <libavutil/file.h>
#include <libavutil/dict.h>
#include <stdio.h>
#include <libavutil/error.h>int main()
{const char* url = "/home/yth/ffmpeg_text/videos/elon.mp4";int err = -1;//1.av_register_all();avformat_network_init(); //初始化网络相关的功能,用于处理网络的流媒体printf("hello ffmpeg\n");AVFormatContext* pFormatCtx = NULL; //用于存储媒体文件或流的信息AVInputFormat* piFmt = NULL; //指向输入格式的指针,用于指定打开文件时的格式    printf("helloc, avformat_alloc_context\n");if((pFormatCtx = avformat_alloc_context()) == NULL) //为pFormatCtx分配内存{printf("fail avformat_alloc_context()\n");goto avformat_alloc_context_err;}pFormatCtx->probesize = 5000000;pFormatCtx->max_analyze_duration  = 5000000;//2.printf("打开媒体流\n");//打开本地文件或网络流直播流//替换为实际的rtsp地址 或在文件路径//rtsp地址: rtsp://127.0.0.1:8554/rtsp1//本地文件: ./ymx.mp4err = avformat_open_input(&pFormatCtx, url,  NULL, NULL);if(err < 0){char errbuf[AV_ERROR_MAX_STRING_SIZE];av_strerror(err, errbuf, sizeof(errbuf));fprintf(stderr,"fail avformat_open_input:%s\n",errbuf );goto avformat_open_input_err;}else{printf("open stream success\n"); //成功打开}//3.err = avformat_find_stream_info(pFormatCtx, NULL); //获取流的信息,填充pFormatCtxif(err < 0 ){printf("fail avformat_find_stream_info\n");goto avformat_find_stream_info_err;}else{printf("open stream success\n"); //获取流信息成功printf("有n路流 = %d\n", pFormatCtx->nb_streams);}avformat_find_stream_info_err:avformat_close_input(&pFormatCtx); //关闭输入文件或流
avformat_open_input_err:avformat_network_deinit(); //取消网络流库的初始化
avformat_alloc_context_err:return err;}

        如果是本地文件没有使用 av_register_all(); 打开媒体文件失败,打印失败原因。比如,如果上面没有调用函数av_register_all,则会打印“XXX failed!:Invaliddata found when processing input”.   

        这是代码的实现,我们来执行一下,配合其他工具看看打开的视频流消息是不是对的。

        两路流是正确的。

 


http://www.ppmy.cn/embedded/153003.html

相关文章

算能AI计算服务器SE5设备树的二次修改实操

目录 1.大纲 2.实操 2.下载对应文件包 3.解包启动文件 4.修改对应的设备树 5.重启后 教程链接&#xff1a;https://github.com/sophgo/sophon-tools/tree/main/source/pmemory_edit 1.大纲 2.实操 2.1 选择串口&#xff0c;波特率115200&#xff0c;重启设备&#xff0…

MDX语言的网络编程

MDX语言的网络编程 引言 MDX&#xff08;Multidimensional Expressions&#xff09;是一种多维表达式语言&#xff0c;广泛应用于数据分析和数据挖掘环境中。虽然MDX的主要目的是进行多维数据的查询和分析&#xff0c;但它在网络编程中也有其独特的应用场景。本文将探讨MDX在…

Redis 三大问题:缓存穿透、缓存击穿、缓存雪崩

Redis 作为高性能的内存数据库&#xff0c;广泛应用于缓存场景。然而&#xff0c;在实际使用中&#xff0c;可能会遇到三大经典问题&#xff1a;缓存穿透、缓存击穿 和 缓存雪崩。这些问题如果不加以解决&#xff0c;可能会导致系统性能下降甚至崩溃。 1. 缓存穿透 问题描述 …

利用Java爬取1688商品详情API接口:技术与应用指南

引言 1688作为中国领先的B2B电子商务平台&#xff0c;拥有海量的商品信息。对于商家和市场研究人员来说&#xff0c;能够从1688获取商品详情信息&#xff0c;对于市场分析、竞品研究等具有重要价值。本文将详细介绍如何使用Java编写爬虫程序&#xff0c;以合法、高效的方式获取…

Mac Mini 最优雅的备份方式:使用极空间实现自动整机备份

Mac Mini 最优雅的备份方式&#xff1a;使用极空间实现自动整机备份 哈喽小伙伴们好&#xff0c;我是Stark-C~ 目前Mac mini M4到手已经一个多月&#xff0c;处理器性能大幅提升&#xff0c;内存也是破天荒的翻倍升级&#xff0c;再加上国补之后3500左右的价格&#xff0c;真…

Redis是单线程还是多线程?

大家好&#xff0c;我是锋哥。今天分享关于【Redis是单线程还是多线程&#xff1f;】面试题。希望对大家有帮助&#xff1b; Redis是单线程还是多线程&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Redis是 单线程 的。 尽管Redis的处理是单线程的&a…

(四)结合代码初步理解帧缓存(Frame Buffer)概念

帧缓存&#xff08;Framebuffer&#xff09;是图形渲染管线中的一个非常重要的概念&#xff0c;它用于存储渲染过程中产生的像素数据&#xff0c;并最终输出到显示器上。简单来说&#xff0c;帧缓存就是计算机图形中的“临时画布”&#xff0c;它储存渲染操作生成的图像数据&am…

SQL开窗函数相关的面试题和答案

基本排序与分组问题 题目&#xff1a;有学生成绩表tb_score&#xff0c;包含字段SNO&#xff08;学号&#xff09;、SCLASS&#xff08;班级&#xff09;、CHINESE&#xff08;语文成绩&#xff09;、ENGLISH&#xff08;英语成绩&#xff09;、ARITH&#xff08;数学成绩&…