• 大小: 66.29MB
    文件类型: .zip
    金币: 2
    下载: 0 次
    发布日期: 2023-12-28
  • 语言: 其他
  • 标签:

资源简介

本例子实现了推送本地视频至流媒体服务器(以RTMP为例)。 是使用FFmpeg进行直播功能 包含2个项目: simplest_ffmpeg_streamer: 将本地视频文件推送至流媒体服务器。 simplest_ffmpeg_receiver: 将流媒体数据保存成本地文件。 相应的视频文件为dakongtou.mp4 , 演示实验时分两个窗口打开相应项目文件,实现视频数据实时收,发功能

资源截图

代码片段和文件信息


#include 

#define __STDC_CONSTANT_MACROS

#ifdef _WIN32
//Windows
extern “C“
{
#include “libavformat/avformat.h“
#include “libavutil/mathematics.h“
#include “libavutil/time.h“
};
#else
//Linux...
#ifdef __cplusplus
extern “C“
{
#endif
#include 
#include 
#include 
#ifdef __cplusplus
};
#endif
#endif

//‘1‘: Use H.264 Bitstream Filter 
#define USE_H264BSF 0

int main(int argc char* argv[])
{
AVOutputFormat *ofmt = NULL;
//Input AVFormatContext and Output AVFormatContext
AVFormatContext *ifmt_ctx = NULL *ofmt_ctx = NULL;
AVPacket pkt;
const char *in_filename *out_filename;
int ret i;
int videoindex=-1;
int frame_index=0;
in_filename  = “rtmp://localhost:80/test/livestream live=1“;
//in_filename  = “rtp://233.233.233.233:6666“;
//out_filename = “receive.ts“;
//out_filename = “receive.mkv“;
out_filename = “receive.mp4“;

av_register_all();
//Network
avformat_network_init();
//Input
if ((ret = avformat_open_input(&ifmt_ctx in_filename 0 0)) < 0) {
printf( “Could not open input file.“);
goto end;
}
if ((ret = avformat_find_stream_info(ifmt_ctx 0)) < 0) {
printf( “Failed to retrieve input stream information“);
goto end;
}

for(i=0; inb_streams; i++) 
if(ifmt_ctx->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO){
videoindex=i;
break;
}

av_dump_format(ifmt_ctx 0 in_filename 0);

//Output
avformat_alloc_output_context2(&ofmt_ctx NULL NULL out_filename); //RTMP

if (!ofmt_ctx) {
printf( “Could not create output context\n“);
ret = AVERROR_UNKNOWN;
goto end;
}
ofmt = ofmt_ctx->oformat;
for (i = 0; i < ifmt_ctx->nb_streams; i++) {
//Create output AVStream according to input AVStream
AVStream *in_stream = ifmt_ctx->streams[i];
AVStream *out_stream = avformat_new_stream(ofmt_ctx in_stream->codec->codec);
if (!out_stream) {
printf( “Failed allocating output stream\n“);
ret = AVERROR_UNKNOWN;
goto end;
}
//Copy the settings of AVCodecContext
ret = avcodec_copy_context(out_stream->codec in_stream->codec);
if (ret < 0) {
printf( “Failed to copy context from input to output stream codec context\n“);
goto end;
}
out_stream->codec->codec_tag = 0;
if (ofmt_ctx->oformat->flags & AVFMT_GLOBALHEADER)
out_stream->codec->flags |= CODEC_FLAG_GLOBAL_HEADER;
}
//Dump Format------------------
av_dump_format(ofmt_ctx 0 out_filename 1);
//Open output URL
if (!(ofmt->flags & AVFMT_NOFILE)) {
ret = avio_open(&ofmt_ctx->pb out_filename AVIO_FLAG_WRITE);
if (ret < 0) {
printf( “Could not open output URL ‘%s‘“ out_filename);
goto end;
}
}
//Write file header
ret = avformat_write_header(ofmt_ctx NULL);
if (ret < 0) {
printf( “Error occurred when opening output URL\n“);
goto end;
}

#if USE_H264BSF
AVBitStreamFilterContext* h264bsfc =  av_bitstre

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-04-01 20:50  simplest_ffmpeg_streamer_1.2\
     文件          34  2015-07-14 19:17  simplest_ffmpeg_streamer_1.2\.gitignore
     目录           0  2018-04-01 14:53  simplest_ffmpeg_streamer_1.2\Debug\
     文件       38400  2018-04-01 15:28  simplest_ffmpeg_streamer_1.2\Debug\simplest_ffmpeg_receiver.exe
     文件      269040  2018-04-01 15:28  simplest_ffmpeg_streamer_1.2\Debug\simplest_ffmpeg_receiver.ilk
     文件      667648  2018-04-01 15:28  simplest_ffmpeg_streamer_1.2\Debug\simplest_ffmpeg_receiver.pdb
     文件       40960  2018-04-01 20:46  simplest_ffmpeg_streamer_1.2\Debug\simplest_ffmpeg_streamer.exe
     文件      268068  2018-04-01 20:46  simplest_ffmpeg_streamer_1.2\Debug\simplest_ffmpeg_streamer.ilk
     文件      692224  2018-04-01 20:46  simplest_ffmpeg_streamer_1.2\Debug\simplest_ffmpeg_streamer.pdb
     文件         907  2015-07-14 19:17  simplest_ffmpeg_streamer_1.2\ReadMe.txt
     目录           0  2018-04-01 20:46  simplest_ffmpeg_streamer_1.2\simplest_ffmpeg_receiver\
     文件          75  2015-07-14 19:17  simplest_ffmpeg_streamer_1.2\simplest_ffmpeg_receiver\.gitignore
     目录           0  2018-04-01 15:28  simplest_ffmpeg_streamer_1.2\simplest_ffmpeg_receiver\Debug\
     目录           0  2018-04-01 15:28  simplest_ffmpeg_streamer_1.2\simplest_ffmpeg_receiver\Debug\simplest.DDC29134.tlog\
     文件        8098  2018-04-01 15:28  simplest_ffmpeg_streamer_1.2\simplest_ffmpeg_receiver\Debug\simplest.DDC29134.tlog\CL.read.1.tlog
     文件         660  2018-04-01 15:28  simplest_ffmpeg_streamer_1.2\simplest_ffmpeg_receiver\Debug\simplest.DDC29134.tlog\CL.write.1.tlog
     文件         774  2018-04-01 15:28  simplest_ffmpeg_streamer_1.2\simplest_ffmpeg_receiver\Debug\simplest.DDC29134.tlog\cl.command.1.tlog
     文件        1560  2018-04-01 15:28  simplest_ffmpeg_streamer_1.2\simplest_ffmpeg_receiver\Debug\simplest.DDC29134.tlog\link.command.1.tlog
     文件        3746  2018-04-01 15:28  simplest_ffmpeg_streamer_1.2\simplest_ffmpeg_receiver\Debug\simplest.DDC29134.tlog\link.read.1.tlog
     文件         598  2018-04-01 15:28  simplest_ffmpeg_streamer_1.2\simplest_ffmpeg_receiver\Debug\simplest.DDC29134.tlog\link.write.1.tlog
     文件         165  2018-04-01 15:28  simplest_ffmpeg_streamer_1.2\simplest_ffmpeg_receiver\Debug\simplest.DDC29134.tlog\simplest_ffmpeg_receiver.lastbuildstate
     文件        1071  2018-04-01 14:53  simplest_ffmpeg_streamer_1.2\simplest_ffmpeg_receiver\Debug\simplest_ffmpeg_receiver.Build.CppClean.log
     文件        2135  2018-04-01 15:28  simplest_ffmpeg_streamer_1.2\simplest_ffmpeg_receiver\Debug\simplest_ffmpeg_receiver.log
     文件       16931  2018-04-01 15:28  simplest_ffmpeg_streamer_1.2\simplest_ffmpeg_receiver\Debug\simplest_ffmpeg_receiver.obj
     文件      142336  2018-04-01 15:28  simplest_ffmpeg_streamer_1.2\simplest_ffmpeg_receiver\Debug\vc120.idb
     文件      151552  2018-04-01 15:28  simplest_ffmpeg_streamer_1.2\simplest_ffmpeg_receiver\Debug\vc120.pdb
     文件         539  2015-07-14 19:17  simplest_ffmpeg_streamer_1.2\simplest_ffmpeg_receiver\ReadMe.txt
     文件           0  2013-07-22 01:18  simplest_ffmpeg_streamer_1.2\simplest_ffmpeg_receiver\Source.cpp
     文件    18936320  2015-07-14 19:17  simplest_ffmpeg_streamer_1.2\simplest_ffmpeg_receiver\avcodec-55.dll
     文件     1340928  2015-07-14 19:17  simplest_ffmpeg_streamer_1.2\simplest_ffmpeg_receiver\avdevice-55.dll
     文件     2034688  2015-07-14 19:17  simplest_ffmpeg_streamer_1.2\simplest_ffmpeg_receiver\avfilter-4.dll
............此处省略436个文件信息

评论

共有 条评论