资源简介
本例子实现了推送本地视频至流媒体服务器(以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\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个文件信息
相关资源
- 基于ARM的嵌入式流媒体服务器的设计
- 搭建rtmp流媒体服务器的nginx
- srs一款windows下面的流媒体服务器
- Windows Media Service,Helix Server,VLC搭建
- nginx rtmp转发服务器
- 免部署的Windows 平台下的nginx-rtmp-win
- 流媒体服务器源码包nginx+rtmp
- 流媒体服务器的搭建
- 最简单方便的流媒体服务器Qloud Serv
- AMS-3.0 (Free)------过期不再使用,请
- FMS4.5破解版流媒体服务器FlashMediaSer
- live555流媒体服务器windows版
- 使用nginx与nginx-rtmp-module搭建流媒体服
- RTSP/RTP 嵌入式流媒体服务器的实现
- Centos搭建EasyDarwin流媒体服务器
- Centos 搭建crtmpserver流媒体服务器
- windows FFMPEG和FFSERVER搭建流媒体服务器
- nginx-rtmp-win32搭建流媒体服务器,支持
- nginx-rtmp-module搭建RTMP+HLS流媒体服务器
- 基于RTSP/RTP的简单流媒体服务器
评论
共有 条评论