戚薇回转木马的孤单mp3百度云

&&&& 很多朋友都会问到rtsp如何通过rtmp协议推送到服务端,正好前段时间开发了这个功能写在这里,和大家分享下。
首先我想说的是:ffmpeg可以实现这个功能。ffmpeg支持rtsp协议,也支持rtmp。在这个案例中rtsp是输入,
rtmp是输出,ffmpeg实现了转码的功能。下面可出一个整体思路流程图。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&图1
&&&& 如图1所示:在获取都rtsp流以后,解复用(demux)获取ES流packet,最后将ES流封装成rtmp格式并发送
到服务端。
&& 基本思路完毕,下面上代码。
一:初始化ffmpeg库
void Init()
av_register_all();
avfilter_register_all();
avformat_network_init();
av_log_set_level(AV_LOG_ERROR);
二. 打开rtmp视频流
int OpenInput(char *fileName)
context = avformat_alloc_context();
int ret = avformat_open_input(&context, fileName, nullptr,nullptr);
if(ret & 0)
ret = avformat_find_stream_info(context,nullptr);
auto codecContext = context-&streams[0]-&
ret = avcodec_open2(codecContext, avcodec_find_decoder(codecContext-&codec_id), nullptr);
&&&& 返回值小于0& 表示打开流失败。
三. 创建输出流
int OpenOutput(char *fileName)
int ret = 0;
= avformat_alloc_output_context2(&outputContext, nullptr, "flv", fileName);
if(ret & 0)
ret = avio_open2(&outputContext-&pb, fileName, AVIO_FLAG_READ_WRITE,nullptr, nullptr);
if(ret & 0)
for(int i = 0; i & context-&nb_ i++)
AVStream * stream = avformat_new_stream(outputContext, nullptr);
ret = avcodec_copy_context(stream-&codec, context-&streams[i]-&codec);
if(ret & 0)
ret = avformat_write_header(outputContext, nullptr);
if(ret & 0)
if(outputContext)
for(int i = 0; i & outputContext-&nb_ i++)
avcodec_close(outputContext-&streams[i]-&codec);
avformat_close_input(&outputContext);
返回值小于0,创建输出流失败,以rtmp格式发送视频流一定要以flv格式初始化output context。
四. 读取Packet
shared_ptr&AVPacket& ReadPacketFromSource()
shared_ptr&AVPacket& packet(static_cast&AVPacket*&(av_malloc(sizeof(AVPacket))), [&](AVPacket *p) { av_free_packet(p); av_freep(&p);});
av_init_packet(packet.get());
int ret = av_read_frame(context, packet.get());
if(ret &= 0)
五. 写Packet到服务端
av_interleaved_write_frame(outputContext, packet.get());
六.&简单demo
int _tmain(int argc, _TCHAR* argv[])
string fileInput= "rtsp://admin:admin@172.29.183.103/media/video1/multicast";
string fileOutput="rtmp://127.0.0.1/live/mystream";
if(OpenInput((char *)fileInput.c_str()) & 0)
cout && "Open file Input failed!" &&
this_thread::sleep_for(chrono::seconds(1000));
if(OpenOutput((char *)fileOutput.c_str()) & 0)
cout && "Open file Output failed!" &&
this_thread::sleep_for(chrono::seconds(1000));
auto timebase = av_q2d(context-&streams[0]-&time_base);
while(true)
auto packet = ReadPacketFromSource();
if(packet)
   int ret = av_interleaved_write_frame(outputContext, packet.get());
        cout &&"write packet end!"&&
CloseInput();
CloseOutput();
cout &&"Transcode file end!" &&
this_thread::sleep_for(chrono::seconds(1000));
七. 小结:
&&& 经测试,内网rtmp直播延时在1秒以内,公网延时在3,4秒左右。
阅读(...) 评论()renjunjie622 的BLOG
用户名:renjunjie622
评论数:13
访问量:14000
注册日期:
阅读量:5863
阅读量:12276
阅读量:404589
阅读量:1093422
51CTO推荐博文
前言:由于个人工作的原因,公司采用了这个作为点播直播服务器,采用这个的原因只有一个,因为开源免费因为不要钱!因为不要钱!因为不要钱!因为很重要所以说三遍。如果不是这个原因,我也不会对此开源软件相识,作为创业公司当然是能省就省,买不起商业的点播直播软件,没人力做不了一个点播直播软件已经用过大半年,各方面使用的情况来看还挺可以的,今日趁我写博客的激情还在遂再写一篇。#本人的博客尽可能的多注释,注释不是给我看的,我都懂!没错,就是给不会的现在在看我的博客小白们看的!如果发现还有不懂的地方请留言哪里不懂,然后我继续改到让蚂蚁的小大脑都懂的地步?蛤,这么多注释下你还不明白?买块豆腐就去了吧!!不拦你!!!!!先wait下!!!!!此篇博客稍微写下就作废吧,因为我上github后发现,此开源软件已经死了,曾经的雄心壮志已经荡然无存。。。。。。白研究那么深了官方已经跪了,源码都清空了,我还往下写不???????1.SRS(simple-rtmp-server)介绍SRS定位是运营级的互联网直播服务器集群,追求更好的概念完整性和最简单实现的代码。运营级:商业运营追求极高的稳定性,良好的系统对接,以及错误排查和处理机制。譬如日志文件格式,reload,系统HTTP接口,提供init.d脚本,转发,转码,边缘回多源站,都是根据CDN运营经验作为判断这些功能作为核心的依据。互联网:互联网最大的特征是变化,唯一不变的就是不断变化的客户要求,唯一不变的是基础结构的概念完整性和简洁性。互联网还意味着参与性,听取用户的需求和变更,持续改进和维护。直播服务器:直播和点播这两种截然不同的业务类型,导致架构和目标完全不一致,从运营的设备组,应对的挑战都完全不同。两种都支持只能说明没有重心,或者低估了代价。集群:FMS(AMS)的集群还是很不错的,虽然在运营容错很差。SRS支持完善的直播集群,Vhost分为源站和边缘,容错支持多源站切换、测速、可追溯日志等。概念完整性:虽然代码甚至结构都在变化,但是结构的概念完整性是一直追求的目标。从SRS服务器,P2P,ARM监控产业,MIPS路由器,服务器监控管理,ARM智能手机,SRS的规模不再是一个服务器而已。简单实现:对于过于复杂的实现,宁可不加入这个功能,也不牺牲前面提到的要求。对于已经实现的功能的代码,总会在一个版本release前给予充分的时间来找出最简答案。不求最高性能,最优雅,最牛逼,但求最简单易懂。备注:概念完整性可以参考Brooks的相关文献,在宏观方面他还是很有造诣SRS提供了丰富的接入方案将RTMP流接入SRS,包括、、。SRS还支持将接入的RTMP流进行各种变换,譬如、、、、、、。SRS包含支大规模集群如CDN业务的关键特性,譬如、、、、。此外,SRS还提供丰富的应用接口,包括、、、。2.SRS与其他媒体服务器比较通过官方广告的描述,总而言之一句话,SRS超级强,无所不能秒杀其他同类媒体服务器至于你们信不信?我反正是信了!Stream Delivery(流发送支持类型比较)FeatureSRSNGINXCRTMPDFMSWOWZARTMPStableStableStableStableStableHLSStableStableXStableStableHDSExperimentXXStableStableHTTP FLVStableXXXXHLS(aonly)StableXXStableStableHTTP ServerStableStableXXStableCluster(集群扩展支持比较)FeatureSRSNGINXCRTMPDFMSWOWZARTMP EdgeStableXXStableXRTMP BackupStableXXXXVHOSTStableXXStableStableReloadStableXXXXForwardStableXXXXATCStableXXXXStream Service(流服务功能支持比较)FeatureSRSNGINXCRTMPDFMSWOWZADVRStableStableXXStableTranscodeStableXXXStableHTTP APIStableStableXXStableHTTP hooksStableXXXXGopCacheStableXXStableXSecurityStableStableXXStableToken TraverseStableXXStableXEfficiency(性能比较)FeatureSRSNGINXCRTMPDFMSWOWZAConcurrency(并发数)7.5k3k2k2k3kMultipleProcess(多线程)ExperimentStableXXXRTMP Latency(rtmp延迟)0.1s3s3s3s3sHLS Latency(hls延迟)10s30sX30s30sStream Caster(流推送支持比较)FeatureSRSNGINXCRTMPDFMSWOWZAIngestStableXXXXPush MPEGTSExperimentXXXStablePush RTSPExperimentXStableXStablePush HTTP FLVExperimentXXXXDebug System(debug系统支持比较)FeatureSRSNGINXCRTMPDFMSWOWZABW checkStableXXXXTracable LogStableXXXXDocs(文档比较,有中文wiki,因为是国产开源软件)FeatureSRSNGINXCRTMPDFMSWOWZADemosStableXXXXWIKI(EN+CN)StableEN onlyXXStableOthers(其他比较)FeatureSRSNGINXCRTMPDFMSWOWZAARM/MIPSStableStableXXXClient LibraryStableXXXX3.SRS的架构体系SRS always use the most simple architecture to support complex transaction.System arch: the system structure and arch.Modularity arch: the main modularity of SRS.Stream arch: the stream dispatch arch of SRS.RTMP cluster arch: the RTMP origin and edge cluster arch.Multiple processes arch (by wenjie): the multiple process of SRS.CLI arch: the cli arch for SRS, api to manage SRS.Bandwidth specification: the bandwidth test specification of SRS.System Architecture+------------------------------------------------------+| & & & & & & SRS(Simple RTMP Server) & & & & & & & & &|+---------------+---------------+-----------+----------+| & API/hook & &| & Transcoder &| & &HLS & &| & RTMP & || &http-parser &| &FFMPEG/x264 &| &NGINX/ts | protocol |+---------------+---------------+-----------+----------+| & & & & & & &Network(state-threads) & & & & & & & & &|+------------------------------------------------------+| & & &All Linux(RHEL,CentOS,Ubuntu,Fedora...) & & & & |+------------------------------------------------------+Modularity Architecture+------------------------------------------------------+| & & & & & & Main(srs/bandwidth/librtmp) & & & & & & &|+------------------------------------------------------+| & & & & & App(Server/Client application) & & & & & & |+------------------------------------------------------+| & & & & & & & RTMP(Protocol stack) & & & & & & & & & |+------------------------------------------------------+| & & &Kernel(depends on Core, provides error/log) & & |+------------------------------------------------------+| & & & & Core(depends only on system apis) & & & & & &|+------------------------------------------------------+Stream Architecture & & & & & & & & & +---------+ & & & & & & &+----------+ & & & & & & & & & + Publish + & & & & & & &+ &Deliver | & & & & & & & & & +---|-----+ & & & & & & &+----|-----++----------------------+-------------------------+----------------+| & & Input & & & & & &| SRS(Simple RTMP Server) | & & Output & & |+----------------------+-------------------------+----------------+| & &Encoder(1) & & & &| & +-& RTMP protocol ----+-& Flash Player || &(FMLE,FFMPEG, -rtmp-+-&-+-& HLS/NGINX --------+-& m3u8 player &|| &Flash,XSPLIT, & & & | & +-& Fowarder ---------+-& RTMP Server &|| &......) & & & & & & | & +-& Transcoder -------+-& RTMP Server &|| & & & & & & & & & & &| & +-& DVR --------------+-& FILE & & & & || & & & & & & & & & & &| & +-& BandwidthTest ----+-& Flash/StLoad |+----------------------+ & & & & & & & & & & & & | & & & & & & & &|| &MediaSource(2) & & &| & & & & & & & & & & & & | & & & & & & & &|| &(RTSP,FILE, & & & & | & & & & & & & & & & & & | & & & & & & & &|| & HTTP,HLS, & &------+-&-- Ingester ----(rtmp)-+-& SRS & & & & &|| & Device, & & & & & &| & & & & & & & & & & & & | & & & & & & & &|| & ......) & & & & & &| & & & & & & & & & & & & | & & & & & & & &|+----------------------+-------------------------+----------------+Remark:(1) Encoder: encoder must push RTMP stream to SRS server.(2) MediaSource: any media source, which can be ingest by ffmpeg.(3) Ingester: SRS will fork a process to run ffmpeg(or your application) to ingest any input to rtmp, push to SRS.4.SRS实战(测试服务器的ip为192.168.0.20)官方已经跪了,官方的github源码都清空了,我还往下写不???????(1)部署SRS提供hls服务(因为懒所以我编译的时候把所有功能先全开启了,你可以编译的时候只开启一个hls的服务)#获取SRS
[root@ren&tools]#&git&clone&/wenjiegit/srs
Initialized&empty&Git&repository&in&/application/tools/srs/.git/
remote:&Counting&objects:&30921,&done.
remote:&Total&30921&(delta&0),&reused&0&(delta&0),&pack-reused&30921
Receiving&objects:&100%&(),&156.81&MiB&|&5.36&MiB/s,&done.
Resolving&deltas:&100%&(),&done.
[root@ren&tools]#&ll
drwxr-xr-x&4&root&root&4096&5月&&24&15:21&srs
[root@ren&tools]#&cd&srs/
[root@ren&srs]#&ll
-rw-r--r--&&1&root&root&&1484&5月&&24&15:21&AUTHORS.txt
-rw-r--r--&&1&root&root&&1249&5月&&24&15:21&DONATIONS.txt
-rw-r--r--&&1&root&root&&1083&5月&&24&15:21&LICENSE
-rwxr-xr-x&&1&root&root&81742&5月&&24&15:21&README.md
drwxr-xr-x&12&root&root&&4096&5月&&24&15:21&trunk
[root@ren&srs]#&cd&trunk/
#进行编译安装
[root@ren&trunk]#&./configure&--prefix=/application/srs&--full&&&&make
#出了点小插曲,由于我没有事先创建这个我指定的根目录/application/srs,它默认给我装在了你编译文件目录下面。。233
##修改配置文件开启支持hls,想我这样写
[root@ren&conf]#&vim&hls.conf&
#&the&config&for&srs&to&delivery&hls
#&@see&/ossrs/srs/wiki/v1_CN_SampleHLS
#&@see&full.conf&for&detail&config.
listen&&&&&&&&&&&&&&1935;
max_connections&&&&&1000;
vhost&__defaultVhost__&{
&&&&&&&&enabled&&&&&&&&&
&&&&&&&&hls_fragment&&&&10;
&&&&&&&&hls_window&&&&&&60;
&&&&&&&&hls_path&&&&&&&&/application/tools/srs/trunk/objs/nginx/html/;
&&&&&&&&hls_m3u8_file&&&[app]/[stream].m3u8;
&&&&&&&&hls_ts_file&&&&&[app]/[stream]/[04]:[05]-[seq].
#启动srs服务,首先启动srs里面已经内置的nginx服务
[root@ren&~]#&/application/tools/srs/trunk/objs
/nginx/sbin/nginx
#指定刚才我们修改的配置文件进行启动真正的srs服务
[root@ren&~]#&/application/tools/srs/trunk/objs/srs&-c&/application/tools/srs/trunk/conf/hls.conf&
[&15:58:15.730][trace][1909][0]&XCORE-SRS/2.0.209(ZhouGuowen)
[&15:58:15.768][trace][1909][0]&config&parse&complete
[&15:58:15.768][trace][1909][0]&write&log&to&file&./objs/srs.log
[&15:58:15.768][trace][1909][0]&you&can:&tailf&./objs/srs.log
[&15:58:15.768][trace][1909][0]&@see:&
####蛤蛤,出现了问题,你用绝对路径竟然无法启动程序!!!
#只能先cd进去然后启动程序。。。。。
[root@ren&~]#&cd&/application/tools/srs/trunk
[root@ren&trunk]#&./objs/srs&-c&conf/hls.conf
[&16:00:41.955][trace][1926][0]&XCORE-SRS/2.0.209(ZhouGuowen)
[&16:00:41.955][trace][1926][0]&config&parse&complete
[&16:00:41.955][trace][1926][0]&write&log&to&file&./objs/srs.log
[&16:00:41.955][trace][1926][0]&you&can:&tailf&./objs/srs.log
[&16:00:41.955][trace][1926][0]&@see:&/ossrs/srs/wiki/v1_CN_SrsLog
[root@ren&trunk]#&ps&-ef|grep&srs
root&&&&&&1902&&&&&1&&0&15:56&?&&&&&&&&00:00:00&nginx:&master&process&/application/tools/srs/trunk/objs/nginx/sbin/nginx
root&&&&&&1928&&&&&1&&0&16:00&pts/0&&&&00:00:00&./objs/srs&-c&conf/hls.conf
root&&&&&&&&0&16:00&pts/0&&&&00:00:00&grep&srs已经部署成功,然后就可以推流上去进行测试了,如果看到这一步的还想往下做的人,请去弄一个推流的软件吧,省时省力,也可以用srs自带的推流软件进行推流。1)软件推流我们公司采用的是购买的纳加软件进行多机位推流我去推一个试试,通过看目录的流名和视频播放可以看出已经成功了2)使用FFMPEG命令推流:&&&&for((;;));&do&\
&&&&&&&&./objs/ffmpeg/bin/ffmpeg&-re&-i&./doc/source.200kbps.768x320.flv&\
&&&&&&&&-vcodec&copy&-acodec&copy&\
&&&&&&&&-f&flv&-y&rtmp://192.168.0.21/live/&\
&&&&&&&&sleep&1;&\&&&&done生成的流地址为:RTMP流地址为:rtmp://192.168.0.20/live/livestreamHLS流地址为: 观看的流地址也就是上面生成的流地址好了,完结了。官方已跪让我没有想继续写下去的欲望了。。。。2333本文出自 “” 博客,转载请与作者联系!
了这篇文章
类别:未分类┆阅读(0)┆评论(0)
12:36:37 10:04:02 21:13:22 12:03:16 12:05:232011年11月 专题开发/技术/项目大版内专家分月排行榜第二2011年8月 专题开发/技术/项目大版内专家分月排行榜第二
2012年4月 专题开发/技术/项目大版内专家分月排行榜第二2012年3月 专题开发/技术/项目大版内专家分月排行榜第二
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。

我要回帖

更多关于 回转木马的孤单歌曲 的文章

 

随机推荐