关于Web flash推流的一些问题以及示例demo

在使用flash推流的时候使用的demo一般是参考的如下地址:

https://young-cowboy.github.io/gallery/rtmp_client/index.html,网页界面如下:

这个地址配置简单,用来做flash的测试推流感觉很方便,不过使用这个网页推出来的问题是使用的视频编码默认是flv1,现在主流常见视频编码使用的基本是H264,音频的编码为nellymoser,一般主要的音频编码使用为AAC。这种推出来的流会遇到一些很多的问题,比如有的HLS就播放不了,或者CDN终端用户无法正常观看流等。

音频编码在这里无法修改,flash SDK在这方面没有提供修改的接口,只能依靠CDN厂商后端进行音频的编码转换,毕竟HLS的播放目前基本只支持AAC和MP3.

这里主要提供一下如何修改flv1编码为H264的修改方式以及其他的一些问题:

原始的github代码为:

https://github.com/chxj1992/rtmp-streamer

在其中有H264的setting相关的部分,请把这部分代码打开

这里的setProfileLevel,支持的参数为字符串,所以这里要修改为

h264setting.setProfileLevel(H264Profile.MAIN, “4”);

这段代码也打开,然后下载flexsdk进行重新编译。

https://www.adobe.com/devnet/flex/flex-sdk-download.html

使用4.6编译即可,安装好flexsdk后,进入bin目录,使用编译命令如下:

mxmlc demo.as

注意flexsdk依赖JRE/JDK,并且依赖的是32位的版本,否则会提示jvm.dll无法加载的错误,安装好JDK后配置好JAVA_HOME,flash SDK可以根据该环境变量找到JAVA的安装目录。

按上述代码修改后,就可以使用H264推流了,不过还有个小问题是声音不连续,无法提供稳定的音频流,主要原因是对麦克风的静音检测设置过高,导致检测为静音而不提供音频的输出。

Flash SDK提供了另外一个设置的接口:

setSilenceLevel(silenceLevel:Number,timeout:int = -1):void

设置可认定为有声的最低音量输入水平,以及实际静音前需经历的无声时间长度(可选)。

在demo的actionscript中继续添加如下的代码:

mic.setSilenceLevel(0, 5); 0表示将检测设置到最低,这样就会有不断的音频流输出了。

附录:

https://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/search.html?search_text=H264Level

https://github.com/chxj1992/rtmp-streamer

https://www.cnblogs.com/xiaoniuzai/p/7129036.html

https://blog.csdn.net/leixiaohua1020/article/details/43936141

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券