2018年最新直播系统搭建详解
直播系统的火爆程度从2017年一直燃烧到了2018年,直播系统搭建的技术——直播平台源码也渐渐浮出水面,在直播大火的现在,您是不是也想要一款属于自己的直播系统呢?小编今天就教您搭一款简易直播系统。今天就讨论下,开发一款直播系统到底分几步走?
一.前端推流
推流可以采用命令: ffmpeg -i input -vcodec copy -acodec copy -f flv rtmp://127.0.0.1/live/cgstream0
input 可以是实时流,也可以是文件,如果是文件 需要加上-re。运用中需要将127.0.0.1换成rtmp所在机器的ip地址。
用命令推流时间戳信息不能任意修改,想要达到一个满意的结果还是要用代码实现。rtmp推流前面有文章介绍过,
这里将主要的几个方法介绍下,文章后面会给出完成的工程包。
ffmpeg推流 如果不需要重写编码(视频源已经是编码好的数据),推流的过程比较简单就是一个demux和remux过程。
主要方法代码如下:
1、打开视频流,filename可以文件名称也可以是实时流url.
int OpenInput(char *fileName)
{
AVDictionary* options = nullptr;
context = avformat_alloc_context();
cout << "Begin Open file Input " << endl;
lastTime = av_gettime();
context->interrupt_callback.callback = interrupt_cb;
int ret = avformat_open_input(&context, fileName, nullptr,&options);
if(ret < 0)
{
return ret;
}
ret = avformat_find_stream_info(context,nullptr);
return ret;
}
2、创建输出上下文以及输出流,输出流的格式需要设置成flv
int OpenOutput(char *fileName)
{
int ret = 0;
ret = avformat_alloc_output_context2(&outputContext, nullptr, "flv", fileName);
if(ret < 0)
{
goto Error;
}
ret = avio_open2(&outputContext->pb, fileName, AVIO_FLAG_READ_WRITE,nullptr, nullptr);
if(ret < 0)
{
goto Error;
}
for(int i = 0; i < context->nb_streams; i++)
{
AVStream * stream = avformat_new_stream(outputContext, context->streams[i]->codec->codec);
ret = avcodec_copy_context(stream->codec, context->streams[i]->codec); if(ret < 0)
{
goto Error;
}
3、从输入流中读取音视频包
shared_ptr<AVPacket> ReadPacketFormSource()
{
shared_ptr<AVPacket> packet(static_cast<AVPacket*>(av_malloc(sizeof(AVPacket))), <br> [&](AVPacket *p) { av_free_packet(p); av_freep(&p);});
av_init_packet(packet.get());
lastTime = av_gettime();
int ret = av_read_frame(context, packet.get());
if(ret >= 0)
{
return packet;
}
return nullptr;
}
二、 服务端
服务端可以选择crtmpserver,crtmpserver开源,在windows平台以及linux平台下都可以运行。
带宽能支持多少路音视频流。随着人们对视频质量要求的提高,基本上视频的分辨率都是高清(1080p),码率基本会在4M以上。试想如果服务器
网卡选择千兆网卡,单个网卡最多也就支持两百多路。一般来讲,服务器的cpu配置会比普通电脑高很多,支持几百路并发是不会出现性能问题。当然,
如果追求最低的配置实现最高的并发也许crtmpserver不是最好的选择,但项目讲究实用,很多场合下足以满足需求。说到这里,肯定有人会问,如果并
发访问的命令上千上万怎么办?答案是负载均衡。
三、 播放端
如果在网页上播放(IE),可以选择JwPlayer,如果用插件的也是可以。Android端播放器如果底层基于ffmpeg,也可以播放CrtmpServer
转发的音视频流(ffmpeg需要引入librtmp库),IOS系统
同理。播放的url是rtmp://127.0.0.1/live/cgstream0。
四、如何搭建
1、首先
下载CrtmpServer服务(可以直接从群里下载),运行双击文件夹下的crtmpserver.exe,如果没有闪退,说明运行成功.
2、其次
下载ffmpeg.exe (可以从群里直接下载),在命令行执行 ffmpeg -i input -vcodec copy -acodec copy -f flv rtmp://127.0.0.1/live/cgstream0
127.0.0.1改成crtmpserver.exe所在服务器的地址.如果你在linux下推流,需要linux版本的ffmpeg。cgstream0可以根据需要任意修改。在 windows平台下如果推流成功ffmpeg会一直打印信息,出错也会有相应的提示。
3、最后
播放:播放可以用ffplayer.exe(可以从群里下载,这个工具对rtmp流支持不是很好 ,播放的地址是rtmp://127.0.0.1/live/cgstream0 live=1),还可以用CGPlayer播放器。
以上是一款简易的直播系统搭建步骤,如果您想要了解直播市场的直播系统,这款简易的直播系统并不全面,小编建议您去找专业的直播平台源码服务商。直播系统搭建市场火爆,肯定有很多想要进军直播这个行业,但是又不懂得直播系统搭建中的技术问题,那么直播系统开发团队为了让更多的直播人拥有属于自己的直播系统和为每一位直播人打造一个直播梦想作为理念,现在的直播平台源码有了更多有趣新颖的功能:一对一直播、短视频、游戏直播间、私密直播间、夺宝游戏等等,支持各种二次开发等等。如果您需要进军直播系统市场的直播平台,小编还是建议您找专业的直播平台源码服务商为您搭建。
上一篇:短视频源码互联网巨头纷纷在布局,”短视频+”的时代也已经开始探索