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

        这两天在学习研究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 = obj
OBJS = $(OBJDIR)/ffmpeg_streamer.o
CC = gcc
CFLAGS = -Wall -o -g

TARGET = main.out

SRC_FILES=\
  ffmpeg_streamer.cpp



FFMPEG_CFLAGS = -I/usr/local/include -L/usr/local/lib
FFMPEG_LIBS = -lavformat -lavcodec -lavutil

GLIB_CFLAGS = -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include
GLIB_LIBS = -lgobject-2.0 -lglib-2.0


INC_DIRS = \
        $(GLIB_CFLAGS)                     \
        $(FFMPEG_CFLAGS)


SYMBOLS =

LIBS = \
        $(FFMPEG_LIBS)                     \
        $(GLIB_LIBS)                       \
        -lpthread


all: clean default


default:
	$(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"

即可播放视频


猜你喜欢

转载自blog.csdn.net/qq_28086637/article/details/73613590