ffmpeg play network streaming

本文介绍了如何使用FFmpeg将网络流保存为本地文件,包括注册组件、获取封装信息、打开解码器、创建输出流等步骤。还提到了时间戳转换和中断回调函数在过程中的作用。
摘要由CSDN通过智能技术生成

今天我们开始正式进入FFmpeg的篇章,FFmpeg作为著名的开源框架,可以生成用于处理多媒体框架的库和程序,是音视频界内的圣经,市面上直播开发99%都是基于FFmpeg来开发的,这足以证明FFmpeg的强大。关于FFmpeg的源码和官方文档可以去FFmpeg下载源码和编译好的库。
  闲话不多说,下面就开始今天的主要内容,FFmpeg保存网络流到本地
  直播不像点播,当我们看到想看的内容时,我们不能倒退回去,但是我们可以保存直播流为本地文件,这样我们想看随时都可以。

保存网络流的流程主要有以下步骤:
   第一步:注册所有的组件(编解码、滤镜特效处理库、封装格式处理库、工具库、音频采样数据格式转换库、视频像素数据格式转换等等...)
  第二步:获取视频流的封装信息,查找视频和音频流的位置
  第三步:查找视频和音频解码器id,根据解码器id打开解码器
  第四步:创建输出流并拷贝流上下文信息
  第五步:循环读取网络流,解码packet并写入本地
  第六步:关闭解码器释放内存

源码


#include "stdafx.h"
#include "pch.h"
#include <string>
#include <memory>
#include <thread>
#include <iostream>
using namespace std;

AVFormatContext *inputContext = nullptr;
AVFormatContext * outputContext;
int64_t lastReadPacktTime ;

static int interrupt_cb(void *ctx)
{
    int  timeout  = 3;
    if(av_gettime() - lastReadPacktTime > timeout *1000 *1000)
    {
        return -1;
    }
    return 0;
}
int OpenInput(string inputUrl)
{
    inputContext = avformat_alloc_context();    
    lastReadPacktTi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值