C++ rtmp livestream 流媒体

海阔天空 张翼飞翔

我的学习笔记。--我喜欢这里,因为这里安静,无广告骚扰。
随笔 - 82, 文章 - 2, 评论 - 126, 引用 - 0
数据加载中……

RTMP协议发送H264 AAC音视频实例 C++实现的RTMP程序实例

(原创)
关键词:C++ RTMP协议 发送 H264 AAC  具体实现  发布直播  支持red5 fms  flash直播
我用C++实现了rtmp协议,实现了flash的publish的功能,支持red5 fms3等流媒体服务器。
1,采用x264压缩视频成H264格式,采用faac压缩音频成AAC格式。
2,音视频数据封装成RTMP包,并向FMS3发送直播流。
3,可录制,保存为MP4格式的文件存放在服务端, 可用来点播。
4,使用FlashPlayer可观看直播内容,或点播录制内容。

使用方法:
1,服务器使用FMS3.5以上。
2,将你的FlashPlayer版本升级到9.0.115以上。
3,在程序界面的Fms3 Url中将"rtmp://127.0.0.1/live/stream"修改成你实际FMS3地址。我这里Url格式是rtmp://[ServerIP]/[Application]/[StreamName]。
4.选择视频设备,如果您的计算机没有摄像头,可选择Screen,那么将捕捉您的计算机屏幕当做视频源。
5,选择音频设备,我这里选择的是 "Realtek HD Audio Input"。
4.点Encoder开始编码压缩,并开始发送直播流。如果发送成功则Encode按钮会变灰。
5.点Play可进行直播,如果成功会看到如下图像。
6.或者用其他flash播放器从fms上直播,播放用的url是rtmp://127.0.0.1/live/ ,流名是stream。

程序界面:
 


程序下载  FlashMediaEncoder
协议分析请参考http://www.cnweblog.com/fly2700/archive/2008/04/09/281431.html

posted on 2008-04-02 23:57 ZhangEF 阅读(24598) 评论(44)  编辑  收藏 所属分类: rtmp

评论

# re: RTMP协议的实现 C++代码  回复  更多评论   

能实现j2me的吗?如果能,小弟急需,谢谢
2008-04-04 14:15 | spring

# re: RTMP协议的实现 C++代码  回复  更多评论   

@spring
我有j2se版本的,相信改成j2me也很容易。
2008-04-08 09:22 | ZhangEF

# re: RTMP协议实现 C++代码  回复  更多评论   

哥们,有j2se的source么?能发给我一份么?
luispater#gmail.com
谢谢了哈!
2008-06-01 17:18 | Luis Pater

# re: RTMP协议实现 C++代码  回复  更多评论   

做的很好呀,能不能有深入合作呢?我的QQ 2104406.急盼联系
2008-06-02 17:26 | Fan

# re: RTMP协议 C++实现FlashMediaEncoder[未登录]  回复  更多评论   

大哥,能不能发我源码啊,,,我非常的感谢ziwei55@163.com
2009-02-25 15:15 | 小龙

# re: RTMP协议 C++实现FlashMediaEncoder[未登录]  回复  更多评论   

能开放一下源码吗?
2009-03-02 10:50 |

# re: RTMP协议 C++实现FlashMediaEncoder  回复  更多评论   

开放源代码公司不允许的,欢迎视频合作.
2009-03-18 20:40 | ZhangEF

# re: RTMP协议 C++实现FlashMediaEncoder[未登录]  回复  更多评论   

正是我需要的,希望能够深入合作,请联系我QQ:46613869 夏雨雪
也可发我QQ邮箱。
2009-08-18 12:46 | joe

# re: RTMP协议 C++实现FlashMediaEncoder  回复  更多评论   

我们公司需要你这SDK,可以深入合作吗?具体请联系QQ:273186014
2009-09-28 12:32 | 彭铿

# re: RTMP协议 C++实现FlashMediaEncoder[未登录]  回复  更多评论   

可以给份源码吗? guohongshenggx@tom.com qq:724415266 不胜感谢!
2009-10-21 12:02 | kenny

# re: RTMP协议实例 C++实现的FlashMediaEncoder  回复  更多评论   

公司很需要这个,可以深入合作吗?请联系Email:yi.sun@ema.com.cn
QQ:56023707
2010-01-20 11:51 | 孙毅

# re: RTMP协议实例 C++实现的FlashMediaEncoder  回复  更多评论   

怎么使用……没有介绍么……
2010-03-03 11:12 | lf

# re: RTMP协议实例 C++实现的FlashMediaEncoder  回复  更多评论   

使用说明已经写上去了。
2010-05-11 10:17 | ZhangEF

# re: RTMP协议实例 C++实现的FlashMediaEncoder  回复  更多评论   

请问博主,我怎么下载不下来,还请明示!最近做arm的rtmp传输,学习你的经验!我的邮箱ghasddyx@163.com
2010-05-11 10:50 | ladeng

# re: RTMP协议实例 C++实现的FlashMediaEncoder  回复  更多评论   

为什么videoDevice下拉框是空白的,也不能输入Screan呢?在别的客户端也可以用rtmp观看实时的视频流么?如rtmp://192.168.8.3/live/stream
2010-06-21 14:26 | shelley

# re: RTMP协议实例 C++实现的FlashMediaEncoder  回复  更多评论   

最近在做FLASH实时播放,想了解相关的技术,跟牛人学习。希望深入合作QQ:58485808
2010-06-24 11:23 | xiaoran

# re: RTMP协议实例 C++实现的FlashMediaEncoder  回复  更多评论   

TO:shelley
为什么videoDevice下拉框是空白的.
如果你的计算机没有摄像头,下拉框就是白的,但不影响使用,别的客户端可以看到你发布的直播流的。
2010-06-24 22:57 | ZhangEF

# re: RTMP协议实例 C++实现的FlashMediaEncoder  回复  更多评论   

H264/AAC只能是封装到MP4文件中吗?这文件看得头大。FLV1不能直接封装H264/AAC流吗?这问题我弄了很久...
2010-08-11 16:04 | 周小武

# re: RTMP协议实例 C++实现的FlashMediaEncoder  回复  更多评论   

QQ23520813 希望高人能指点下。MP4的文件格式看一次 头疼一次。
不知道实时流数据如何封装以及如何提取出来。
2010-08-11 16:14 | 周小武

# re: RTMP协议实例 C++实现的FlashMediaEncoder  回复  更多评论   

看界面就知道有问题,没有输入streamname的地方。
2010-08-23 21:02 | anoymouse

# re: RTMP协议实例 C++实现的FlashMediaEncoder  回复  更多评论   

To:楼上anoymouse
“看界面就知道有问题,没有输入streamname的地方。 ”
你一定不知道flex里面有种url是这样写的:
rtmp://[server]/[app]/[streamname]
这种写法服务器地址和流名写在一行,简洁明了,所以我也采用此写法。我在使用方法第6条有格式说明。
我在我自己博客里面发表点东西,也没有必要骗你。
2010-08-24 11:01 | ZhangEF

# re: RTMP协议实例 C++实现的FlashMediaEncoder  回复  更多评论   

您好:
我用你的Flash Media Encoder程序发rtmp流,FMS Url : rtmp://127.0.0.1/live/stream,然后我用Adobe Flash Player独立播放器播放这个Url,但是无法播放,用您的Flash Media Encoder程序可以,是不我输入Adobe Flash Player的Url有问题?
2011-01-19 22:36 | 游客

# 请问如何在对话框中用Flashplayer播放rtmp实时流?  回复  更多评论   

请问如何在对话框中用Flashplayer播放rtmp实时流?

是用CShockwaveFlash控件来实现的吗?

m_pFlashPlayer是一个成功创建的CShockwaveFlash控件,我用如下代码播放rtmp流不成功:

m_pFlashPlayer->LoadMovie(0, strPlayUrl);//设置flash动画路径
m_pFlashPlayer->put_BackgroundColor(-1);//无背景色
m_pFlashPlayer->Rewind();//从头开始播放
m_pFlashPlayer->Play();//播放

如果strPlayUrl 是一个本地的swf文件是可以播放的,但如果是rtmp://127.0.0.1/live/stream这样的内容,就不能播放了。

盼答复!

谢谢!
2011-01-25 21:46 | flasher

# re: RTMP协议实例 C++实现的FlashMediaEncoder[未登录]  回复  更多评论   

@游客
用独立的flashplayer播放不了,可能是因为你的url填错了。
如果你发布的是 rtmp://127.0.0.1/live/stream
那么你在AS语言中对应的代码是这样写:

nc.connect("rtmp://127.0.0.1/live");
ns.play("stream");
2011-02-16 11:29 | ZhangEF

# re: RTMP协议实例 C++实现的FlashMediaEncoder[未登录]  回复  更多评论   

@flasher

你是说本地的swf文件不能放rtmp://127.0.0.1/live/stream这样的内容吧,Demo程序里我把url和stream连在一起写了,和as语言有点不同。

用其他flash播放器从fms上直播,播放用的url是rtmp://127.0.0.1/live/ ,流名是stream。
2011-02-16 11:35 | ZhangEF

# re: RTMP协议实例 C++实现的FlashMediaEncoder  回复  更多评论   

@ZhangEF

我想实现一个MFC程序中通过CShockwaveFlash控件来播放rtmp实时流。

和你这个程序类似,用户输入RMTP url或者本地swf文件,通过CShockwaveFlash控件来播放。

比如m_pFlashPlayer是一个成功创建的CShockwaveFlash控件,我用如下代码来播放:

m_pFlashPlayer->LoadMovie(0, strPlayUrl);//设置flash动画路径
m_pFlashPlayer->put_BackgroundColor(-1);//无背景色
m_pFlashPlayer->Rewind();//从头开始播放
m_pFlashPlayer->Play();//播放

如果strPlayUrl 是一个本地的swf文件(如d:\\test.swf)是可以播放的,但如果是strPlayUrl = rtmp://127.0.0.1/live/stream,就不能播放了。

你有提到用as脚本,我在一个VC程序里面如何调用as脚本?

是通过调用CShockwaveFlash控件的SetVariable方法或者CallFunction方法吗?

请给点参考。

谢谢。
2011-02-17 16:31 | flasher

# re: RTMP协议实例 C++实现的FlashMediaEncoder[未登录]  回复  更多评论   

您好,请问您是使用什么进行捕捉摄像头数据的,directshow?
2011-02-21 17:52 | YH

# re: RTMP协议实例 C++实现的FlashMediaEncoder[未登录]  回复  更多评论   

@YH
我的确是采用DirectShow采集音视频的 :-)
2011-03-09 13:29 | ZhangEF

# re: RTMP协议实例 C++实现的FlashMediaEncoder  回复  更多评论   

项目合作,有意联系我QQ:304045172
2011-03-10 16:27 | aojingbo

# re: RTMP协议实例 C++实现的FlashMediaEncoder  回复  更多评论   

公司很需要这个,可以深入合作吗?请联系Email:zxy5241@hotmail.com
QQ:5209049
2011-08-17 10:50 | zxy

# re: RTMP协议发送H264 AAC音视频实例 C++实现的RTMP程序实例  回复  更多评论   

你好,请问RTMP包发送应该采用什么机制?我现在是把rtmp包放入到queue里面,线程在不停地取queue中的rtmp包,然后发出去。但是发包速度很慢,queue总是堆积很厉害。希望更给点建议,谢谢!
2011-10-19 16:03 | chivas

# re: RTMP协议发送H264 AAC音视频实例 C++实现的RTMP程序实例  回复  更多评论   

正是我一直在找的,测试很有效,看来程序不在大小,高手写的就是不一样,不到1M结果比那些几十兆的都管用。
有机会合作。
2011-11-11 00:55 | net5you

# re: RTMP协议发送H264 AAC音视频实例 C++实现的RTMP程序实例  回复  更多评论   

请问fms有没有提供api可以在c++中调用,完成握手,连接等等,是不是都要自己按照rtmp协议的格式去封装一个个packet,然后利用套接字去与服务器打交道,完成握手,连接以及数据的发送,急救!!!!!!!!!!!
2012-02-29 10:28 | clyde

# re: RTMP协议发送H264 AAC音视频实例 C++实现的RTMP程序实例  回复  更多评论   

会有版权问题的。看看RTMP协义的发布时间就知道了。
2012-03-24 16:25 | RTMP

# re: RTMP协议发送H264 AAC音视频实例 C++实现的RTMP程序实例  回复  更多评论   

本人也是做了近10年的视频编解码开发,可以考虑合作.QQ:1049568282.擅长FFMPEG,SDL,DIRECTSHOW开发.
2013-02-20 16:08 | 周先生

# re: RTMP协议发送H264 AAC音视频实例 C++实现的RTMP程序实例  回复  更多评论   

高手,谢谢分享!
2013-11-20 15:38 | 玫玫

# re: RTMP协议发送H264 AAC音视频实例 C++实现的RTMP程序实例  回复  更多评论   

您好!我现在也在做这方面的东西,就是把视频流发布到FMS上去,想请教一下,内部的协议时怎样的,就是在开始建立连接的时候,客户端发什么命令给服务器,服务器又发什么回来给客户端,最后才能建立连接成功。建立连接的时候,流名称和url是要写在一起吗,还是分开写,非常感谢!
2014-01-02 17:49 | 韩先生

# re: RTMP协议发送H264 AAC音视频实例 C++实现的RTMP程序实例  回复  更多评论   

最近用RTMP协议发送h.264码流到FMS,可是接收的数据flash media player无法解码,我单独把数据(去掉多余的FLV格式)保存下来,可以用其他播放器播放的.
不知道是不是时间戳打得不正确.
因为只是单独发送视频流,我给时间戳写了 m_pRtmpPacket->m_nTimeStamp = 40; // 40ms
2014-07-14 18:17 | 一生何求

# re: RTMP协议发送H264 AAC音视频实例 C++实现的RTMP程序实例  回复  更多评论   

找得到原因了,原来是发送pps 时少了一个字节的pps数量
2014-07-16 15:56 | 一生何求

# re: RTMP协议发送H264 AAC音视频实例 C++实现的RTMP程序实例  回复  更多评论   

QQ:114539454 期待合作
Email:lclc88@163.com
2014-10-12 18:18 | 星宇信息

# re: RTMP协议发送H264 AAC音视频实例 C++实现的RTMP程序实例  回复  更多评论   

单独使用可以,但是,在VC代码里调用,点击编码时就中断,怎么回事?
2015-06-25 10:10 | 陈先生

# re: RTMP协议发送H264 AAC音视频实例 C++实现的RTMP程序实例  回复  更多评论   

购买这套源码,请发邮件给我
godphp@qq.com

# re: RTMP协议发送H264 AAC音视频实例 C++实现的RTMP程序实例[未登录]  回复  更多评论   

@ZhangEF請問使用域名怎麼說服務器連接不了(rtmp://域名/hls/test)像這樣的
2016-06-15 08:24 | jack

# re: RTMP协议发送H264 AAC音视频实例 C++实现的RTMP程序实例  回复  更多评论   

这都9年前的坟贴了,别挖了。 我这个程序的RTMP协议栈2010年后就没维护了。 2010年后有开源项目librtmp可以用了。免费开源的。
2017-05-09 17:17 | ZhangEF