这两天在学习研究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下编译,
添加头文件
修改目标文件和路径(把demo.flv放在main.out 相同路径)
out_filname 的URL随后再说。
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"
即可播放视频