-
大小: 66.29MB文件類型: .zip金幣: 2下載: 0 次發(fā)布日期: 2023-12-28
- 語言: 其他
- 標(biāo)簽:
資源簡介
本例子實(shí)現(xiàn)了推送本地視頻至流媒體服務(wù)器(以RTMP為例)。
是使用FFmpeg進(jìn)行直播功能
包含2個(gè)項(xiàng)目:
simplest_ffmpeg_streamer: 將本地視頻文件推送至流媒體服務(wù)器。
simplest_ffmpeg_receiver: 將流媒體數(shù)據(jù)保存成本地文件。
相應(yīng)的視頻文件為dakongtou.mp4 , 演示實(shí)驗(yàn)時(shí)分兩個(gè)窗口打開相應(yīng)項(xiàng)目文件,實(shí)現(xiàn)視頻數(shù)據(jù)實(shí)時(shí)收,發(fā)功能
代碼片段和文件信息
#include?
#define?__STDC_CONSTANT_MACROS
#ifdef?_WIN32
//Windows
extern?“C“
{
#include?“l(fā)ibavformat/avformat.h“
#include?“l(fā)ibavutil/mathematics.h“
#include?“l(fā)ibavutil/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?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
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄???????????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\li
?????文件????????3746??2018-04-01?15:28??simplest_ffmpeg_streamer_1.2\simplest_ffmpeg_receiver\Debug\simplest.DDC29134.tlog\li
?????文件?????????598??2018-04-01?15:28??simplest_ffmpeg_streamer_1.2\simplest_ffmpeg_receiver\Debug\simplest.DDC29134.tlog\li
?????文件?????????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個(gè)文件信息
評(píng)論
共有 條評(píng)論