Red5流媒体直播开发总结(续)

时间:2022-09-16 17:44:06

                上篇文章中记录了服务端Playlists工程的获得和部署,这篇文章将总结客户端播放流媒体时的点点滴滴的总结。

======================================================================================

1. 项目的第三条要求:终端通过直播流地址,播放该直播

                 由于平台选择Android平台。关于播放RTMP流媒体直播流有多种选择。android开源的播放器有VLC,Vitamio。android原生播放器对rtmp的支持不给力。所以需要集成android开源播放器到工程中。或者选择使用videoJS,JWPlayer。因为Android开发可以分为原生android开发和web类的android开发(使用PhoneGap框架),web开发不是我的强项,所以选择使用集成android开源播放器的方法。


关于集成的方法,网上有大把的例子,这里就不做概述,最终选择使用vitamio作为我们的播放器。

======================================================================================

2.测试过程的一波三折

如果使用Vitamio作为自己播放流媒体的终端播放器,需要经过以下严格的测试环节

2.1 首先将流在VLC终端播放器上测试(vlc播放器在网上直接下载一个PC客户端即可)

2.2 如果在VLC上可以正常播放,接着使用VPlayer(网上直接下载apk安装在android系统的设备上)进行测试,

2.3 以上两个都可以正常播放的话,在使用Vitamio播放器进行播放流媒体

这些细节最好严格去做,因为以上的步骤时为了确认该流是否能被vitamio播放,如果一上来就直接播放一个流,出了问题的话,不知错在何地!

    Example:

当时我的测试选择了深圳卫视的rtmp流,先做验证--看播放器是否对rtmp协议的流支持。

     深圳卫视rtmp流: rtmp://tsl.s1979.cutv.com:1935/cutvChannelLive/AxeFRth/live

    测试结果显示vitamio是可以正常播放该直播流。

    

     下一步:开始拿自己的直播流进行替换测试;

    rtmp;//XXXX/webtv

     测试结果显示:Vitamio播放是报错,打开rtmp流地址失败。

     因为服务端的访问权限已经放开,所以不存在访问的问题。所以工作进入僵持之中....

======================================================================================

3.为了第二个步骤产生的问题,查阅了大量的资料,主要是关于ffmpeg的资料

    这才有了之前关于FFmpeg的编译和使用的博客

   由于上面两个流的测试结果迥然不同,得出的结果也是让人费解,开始归结于是否是因为streams/下的视频的编码格式有关系。通过使用PC下VLC播放终端的查看流媒体信息功能(在工具菜单下)Red5流媒体直播开发总结(续)


查看的结果如下:

Red5流媒体直播开发总结(续)

但是自己的流媒体上的视频格式为:

Red5流媒体直播开发总结(续)

2.

Red5流媒体直播开发总结(续)

两种 ,明显在编码格式上有重大的差异。

所以 目标转为怎么编码出和深圳卫视一样的视频格式,然后进行播放,是否就能解决问题了?

答案很遗憾。即使你把视频经过ffmpeg重新编码后和深圳卫视直播流的编码格式一致,还是显示不出来,并且vlc测试的结果是只有声音没有画面。(在linux上使用自己已经编译的FFmpeg集成X264即可对H.264进行编码。)这段郁闷的时光参考了

雷霄骅博主的博客,也问了很多问题。

http://blog.csdn.net/leixiaohua1020/article/details/12029543

=====================================================================================

4.有一个地址至关重要:

FFmpeg的官方编译下载地址:Windows版本的哈,有静态库版本,也有动态库版本的。已经编译好了,很多外部库已经集成进来。

  http://ffmpeg.zeranoe.com/builds/

我问的问题也是使用下载的windows版本的ffmpeg来做的,linux版本的太繁琐,自己编译的很痛苦,而且有些第三方库你不一定集成的全,所以果断选择了windows版本。

   怎么用ffplay和ffmpeg进行编码就不赘述了,博主的问题栏回复的很清楚。在此也感谢博主的帮助!

======================================================================================

5.很遗憾的是我将直播流的地址改为:”rtmp;//XXXX/webtv live=1“在vitamio中直接报错:

底层就报avformat_open_input: Operation not permitted : -1错误 debug信息: Detected librtmp style URL parameters, these aren't supported by the libavformat internal RTMP handler currently enabled. See the documentation for the correct way to pass parameters. 

根据博主的回复,我初步确定可能是因为vitamio底层的ffmpeg不包含librtmp库。

======================================================================================

6.所以努力的方向改为替换vitamio底层ffmpeg库,但是这种方法太不靠谱了,没有解决问题,编译存在很多风险,比较幸运的是:Vitamio团队专门维护Vitamio。新版本的Vitamio插件4.2.集成上这个版本。流播出来了....


很意外,也很幸运~~~

======================================================================================

7.视频的编码格式统一问题

通过对Red5流媒体RTMP流的测试效果得出以下结论,所有的音视频编码均为以下格式:

Red5流媒体直播开发总结(续)


使用ffmpeg命令行进行音视频编码转码

ffmpeg -i ../gy.flv -vcodec flv1 -r 15 -s 720*576 -q:v 6 -aspect 1.7777 -acodec libmp3lame -ac 1 -ar 
11025 -ab 16K -f flv  -y ../gy_ffmpeg.flv

转码后部署到流媒体服务器上面

测试!

同时可以使用ffplay命令行同步测试:

ffplay -i "rtmp://XXX/playlistTest/webtv live=1"

****注意****音频的编码中采样率必须是11025HZ,位率:16Kb/s。adebo的RTMP手册中有明确要求。

这个是在一个音视频群里面询问高手得知。如果用别的采样率听到的是噪音,虽然有画面。

======================================================================================

8.为什么说是DEMO级别的?

之所以说是DEMO级别是,在网上很少有关于Red5直播的例子,视频会议或者视频聊天等例子颇多。这个只是实现了服务端和客户端的正常交互。从整体上走通了这条RED5+Android的路。但是在播放流的时候发现了一个问题,就是缓冲时间过长,并且不是从流的第一秒开始播放的,有直接跳帧的现象。还有再继续开发研究。