http://blog.csdn.net/leixiaohua1020/article/details/42105049
版权声明:本文为博主原创文章,未经博主允许不得转载。
目录(?)[+]
=====================================================
最简单的基于libRTMP的示例系列文章列表:
最简单的基于librtmp的示例:接收(RTMP保存为FLV)
最简单的基于librtmp的示例:发布(FLV通过RTMP发布)
最简单的基于librtmp的示例:发布H.264(H.264通过RTMP发布)
=====================================================
本文记录一个基于libRTMP的发布H.264码流的程序。该程序可以将H.264数据发布到RTMP流媒体服务器。目前这个例子还不是很稳定,下一步还有待修改。
本程序使用回调函数作为输入,通过自定义的回调函数,可以发送本地的文件或者内存中的数据。
本程序的函数调用结构图如下所示。
整个程序包含3个接口函数:InitSockets():初始化Socket
RTMP_Alloc():为结构体“RTMP”分配内存。
RTMP_Init():初始化结构体“RTMP”中的成员变量。
RTMP_SetupURL():设置输入的RTMP连接的URL。
RTMP_EnableWrite():发布流的时候必须要使用。如果不使用则代表接收流。
RTMP_Connect():建立RTMP连接,创建一个RTMP协议规范中的NetConnection。
RTMP_ConnectStream():创建一个RTMP协议规范中的NetStream。
ReadFirstNaluFromBuf():从内存中读取出第一个NAL单元。
ReadOneNaluFromBuf():从内存中读取出一个NAL单元。
h264_decode_sps():解码SPS,获取视频的宽,高,帧率信息。
SendH264Packet():发送一个NAL单元。
SendVideoSpsPps():如果是关键帧,则在发送该帧之前先发送SPS和PPS。
SendPacket():组装一个RTMPPacket,调用RTMP_SendPacket()发送出去。
RTMP_SendPacket():发送一个RTMP数据RTMPPacket。
RTMP_Close():关闭RTMP连接。
RTMP_Free():释放结构体“RTMP”。
CleanupSockets():关闭Socket。
程序提供的3个接口函数的使用方法如下。可以看出接口比较简单。
接口函数内部的代码比较多,不再详细记录。
Simplest LibRTMP Example
项目主页
SourceForge:https://sourceforge.net/projects/simplestlibrtmpexample/
Github:https://github.com/leixiaohua1020/simplest_librtmp_example
开源中国:http://git.oschina.net/leixiaohua1020/simplest_librtmp_example
4018关注|839收录
6783关注|615收录
很感谢雷神的无私分享,一路走好!
packet->m_nTimeStamp = 0;
这一句,一定要再次设定时间戳,否则会有问题,模糊。
ps:雷神一路走好!
你的问题我已经在上面回复,希望能帮到你
e:\work\rtmp\crtmpserver\sources\thelib\src\protocols\rtmp\inboundrtmpprotocol.c
pp:123 This version of player doesn't support validation
e:\work\rtmp\crtmpserver\sources\common\src\utils\misc\crypto.cpp:131 Unable to
compute the shared key
e:\work\rtmp\crtmpserver\sources\thelib\src\protocols\rtmp\inboundrtmpprotocol.c
pp:215 Unable to create shared key
e:\work\rtmp\crtmpserver\sources\thelib\src\protocols\rtmp\basertmpprotocol.cpp:
167 Unable to perform handshake
请问该怎样解决呢?
我是装了RED5,然后可以。
if (seq_scaling_list_present_flag[i] == 1) {...根据结构体定义再解析一些东西...}
另外咨询个问题,你的demo里的librtmp.dll是自己编译的吧?是vc下编译的还是mingw之类的linux环境编译的?我在写的时候,是直接把rtmpdump这个windows工程编译成了静态库,不知道这两种使用方式有没有什么区别?
我也忘记libRTMP的来源了。。。Linux和Windows下我都试过编译
你现在写没写这个示例程序啊
谢谢兄弟支持,互相学习!
ERROR: authenticating publisher
然后挂掉了 何意?