本来打算看看其他大佬有没有什么好点子,结果打开看了一下,发现只有两个开箱贴子和我的帖子。我只能说很好奇其他大佬不写测评了么?还是没收到货呀?
言归正传,上次搞到FFMPEG成功的编译和安装成功了。这次,我们接下来就要进行测试一下FFMPEG的软编速度测试。
FFMPEG的软编码
首先要声明的一点是,接下来将会对CPU是极大的考验,一定要把散热片贴到CPU上,尽量不要触摸,会很烫的!!!
首先我们把一个视频文件通过SCP传到板子上,我的视频格式是H264 1080P的30FPS,名称是:828207473-1-208.mp4
,所以我的执行命令是:
/usr/local/ffmpeg/bin/ffmpeg -i 828207473-1-208.mp4 -an -t 5 001.mp4
-an代表关闭声音
-t 5代表转换5秒的视频
-i 828207473-1-208.mp4代表转码的源文件
通过top命令查看,可以看到CPU基本上就达到400%了,因为YY3568是四核的,这就代表CPU基本就是满载了,记的触摸散热块的时候一定要小心啊!转换的速度大概是0.13倍,毕竟我们没有开启硬加速,而且转码的文件还是1080P的,他的表现还是很棒的,截图在下面:
直播服务
上面就说到如果不开启硬编码就进行转码H264的话,那么速度只有0.13倍,那么肯定对于直播来讲是不够的,那么就没有别的办法进行直播了么,当然也不是的,就像以前的编译一样,板子上没有办法编译,我们就先到PC上面进行交叉编译后,然后再进行执行。
我们进行直播服务也是一样的,既然板子上没办法达到1倍以上,我们可以先把视频在板子上转码成H264的,如果板子上转码嫌慢的话,我们也可以到PC上先转码成H264的流不就可以完美的进行直播了么?那么我们依旧准备相同的直播文件,依旧是1080P的30FPS文件,不过文件的视频流编码是H264,音频流编码是AAC,然后我们的命令也不一样了,不过呢,我们先来创建一个RTMP服务器吧,
RTMP服务器我比较推荐的有两个,一个是nginx搭配他的nginx-rtmp模块,我之前写过一篇博客,详情在这里采用nginx+chimee搭建网络摄像头直播系统,CHIMEE早就不再使用了,但是nginx-rtmp一直使用到现在很稳定,还有一种方案是SRS Server,这个要比nginx-rtmp还要强大,而且是国人自己搞的,因为更新的太快,而且官方教程也很不错,这里直接给官方链接:SRS教程。不过我一会儿还要在板子上搭建RTMP服务器,所以大家也可以直接翻到第三章节,板子上搭建直播服务器进行查看。
我现在的服务器在局域网内已经搭建完毕了,所以我们就直接开始吧。
/usr/local/ffmpeg/bin/ffmpeg -re -i 828207473-1-208.mp4 -acodec copy -vcodec copy -f flv rtmp://192.168.1.103:8910/rtmplive/cctv
-re 代表实时,因为直播不同于转码,如果转码10秒的视频1秒处理完我们要夸性能强,但是直播的视频10秒变成1秒的话,那只能说是直播事故了
-f flv 以及后面的rtmp 都是代表了直播以及直播链接
-acodec copy 代表音频流不需要解码编码,直接通过RTMP协议发送就好,因为我们的格式本身就是AAC
-vcodec copy 这个和音频流一样,不过这里肯定代表的是视频流,格式也本身就是H264
截图如下,PS:视频是B站的雪糍,非常漂亮可爱,是本人截图技术差
在板子上的直播服务器搭建
在上面已经讲过,RTMP服务器我推荐的两个,其中一个已经搭建到局域网上,并且成功使用FFMPEG进行了直播,那么板子本身把自己当作直播服务器可不可以搞呢?当然是没问题的了,接下来我将在板子上搭建SRS的服务器,然后通过FFMPEG直接上传到localhost里进行直播。
首先,直接打开SRS的getting-started,我们采用他推荐的,也是最简单的方案,直接使用docker进行启动,由于板子上已经安装docker了,我们就直接输入命令即可。
sudo docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 registry.cn-hangzhou.aliyuncs.com/ossrs/srs:5
然后,我们再次打开一个终端,进行直播,我们使用的是默认的端口,所以直播链接就是rtmp://localhost/live/livestream
/usr/local/ffmpeg/bin/ffmpeg -re -i 828207473-1-208.mp4 -acodec copy -vcodec copy -f flv rtmp://localhost/live/livestream
最后,我上传了一个4K 30fps的视频,板子上进行推流到板子上的直播服务器上,看看效果,真的很棒!
这次使用的是通过FFMPEG的命令行来进行直播的,下一个帖子我们就会进行在板子上进行FFMPEG用API进行编程,并写一下怎么使用库,毕竟最终的目标是用RKMPP进行编解码,然后用FFMPEG进行RTMP直播。