学习大神的“ 最简单的基于FFmpeg的推流器(以推送RTMP为例) ” 心得总结

来源:互联网 发布:守望传输数据遇到问题 编辑:程序博客网 时间:2024/05/22 14:20

        这两天在学习研究ffmpeg,在“ 最简单的基于FFmpeg的推流器(以推送RTMP为例) ” 遇到几个问题,把解决方法分享一下。

首先附上链接 博文链接 http://blog.csdn.net/leixiaohua1020/article/details/39803457

                      github链接 https://github.com/leixiaohua1020/simplest_ffmpeg_streamer

源代码工程是win平台的,把文件simplest_ffmpeg_streamer.cpp单独提出稍微修改一下即可在Linux下编译,

添加头文件

#include <libavcodec/avcodec.h>

修改目标文件和路径(把demo.flv放在main.out 相同路径)

out_filname 的URL随后再说。

    in_filename ="demo.flv";//输入URL(Input file URL)
    //in_filename = "shanghai03_p.h264";
    
    out_filename ="rtmp://127.0.0.1:7776/flvplayback/demo";//输出 URL(Output URL)[RTMP]

Makefile中指定好头文件和LIB的路径即可编译成功。

OBJDIR = objOBJS = $(OBJDIR)/ffmpeg_streamer.oCC = gccCFLAGS = -Wall -o -gTARGET = main.outSRC_FILES=\  ffmpeg_streamer.cppFFMPEG_CFLAGS = -I/usr/local/include -L/usr/local/libFFMPEG_LIBS = -lavformat -lavcodec -lavutilGLIB_CFLAGS = -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/includeGLIB_LIBS = -lgobject-2.0 -lglib-2.0INC_DIRS = \        $(GLIB_CFLAGS)                     \        $(FFMPEG_CFLAGS)SYMBOLS =LIBS = \        $(FFMPEG_LIBS)                     \        $(GLIB_LIBS)                       \        -lpthreadall: clean defaultdefault:$(CC) $(CFLAGS) $(INC_DIRS) $(SYMBOLS) $(SRC_FILES) -o $(TARGET) $(LIBS)clean:rm -rf *.o main.out


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

原文中没有rtmpserver的内容,我使用的是开源的crtmpserver

附上github  https://github.com/j0sh/crtmpserver

把源码Clone下来,按照README中的内容编译即可


After you compiled the package, it's time to test it. Run the following command:./crtmpserver/crtmpserver crtmpserver/crtmpserver.lua
屏幕上打印出蓝色字体的列表就说明成功

然后是编辑文件 crtmpserver/crtmpserver.lua (路径 /builders/cmake)

在 flvplayback 中添加

{
            ip="0.0.0.0",
            port=7776,
            protocol="inboundRtmp"                                

},

保存之后

Run the following command:
./crtmpserver/crtmpserver crtmpserver/crtmpserver.lua
打印的蓝色字体列表中有如下内容表示成功

+---+---------------+-----+-------------------------+-------------------------+
|tcp|        0.0.0.0| 7776|              inboundRtmp|              flvplayback|
+---+---------------+-----+-------------------------+-------------------------+

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

然后再回到前面 out_filname 的URL

out_filename ="rtmp://127.0.0.1:7776/flvplayback/demo";

127.0.0.1     表示本机地址

7776             是刚才为crtmpserver添加的一个rtmp通道的端口号

flvplayback  是crtmpserver中的“实例”  (叫实例可能不妥,但不知道该如何称呼)

demo                                                           (不其清楚该叫什么)


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

到推流这一步我遇到了两个问题,都是通过这篇文章解决的,就不详说了

“CrtmpServer支持Android与IOS进行RTMP直播遇到的_checkbw问题"

http://blog.csdn.net/fengyily/article/details/34422913

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

先在一个终端中运行

./crtmpserver/crtmpserver crtmpserver/crtmpserver.lua
在另一个终端中运行

./main.out

即可看到推流成功


在另一个终端中运行

ffplay "rtmp://localhost/flvplayback/demo"

即可播放视频


阅读全文
0 0
原创粉丝点击