CDN加速

FAQ

更新时间:2021-07-01 17:10:50

1. (全平台)播放地址如何填写

通常该URL规则由CDN直播或点播团队提供,常规播放地址格式为

RTMP播放 rtmp://拉流域名/发布点/流id
HDL播放   http://拉流域名/发布点/流id.flv
HLS播放   http://拉流域名/发布点/流id/playlist.m3u8

可联系相关技术支持确认。

2. (移动端)获取日志的方法

2.1. Android

未进行root的手机也可获取到日志,一般在SD卡下的应用缓冲目录里,路径为:/sdcard/Android/data/应用包名/files/Log。

2.2. iOS

调试可以通过 xcode->window->devices菜单 设置下的Download Containers 获取。具体存放路径是 /应用沙盒/documents/cnc_play_log/

3. (移动端)系统要求

3.1. Android

播放器支持的系统最低版本为4.0以上,如果只需要软解支持2.3以上。支持芯片架构:armv5 / armv7a / arm64 / x86 / x86_64

3.2. iOS

播放器支持的系统最低版本为8.0以上,提交 Appstore 之前请打开framework的 info.plist 文件,MinimumOSVersion 选择最低支持版本为8.0。

SDK版本号在1.6.4以下iOS 播放器提交Appstore 审核时需对 framework 进行拆分,详情请参考包内的 readme 文件。SDK1.6.4以上仅包含arm64 及armv7,只能进行真机调试。提交App Store审核时无需额外操作。

4. (移动端)混淆规则如何添加

假设您项目中某xx模块引用我们网宿的 SDK,那么该xx模块需要过滤混淆,有引用该xx的模块也需要过滤。

5. (移动端)播放器 延迟追赶/缓冲等待 参考值

缓冲阈值可设 1000 ms 调试,越低越有可能卡顿。延时追赶必须大于缓冲阈值至少1000ms以上,如果对时延要求不高,设大一点播放会更流畅。

6. (Android)播放器在部分机型上观看不全问题

采用软解时,魅族系部分机型会存在观看不全的问题,需要
在BasePlayerActivity.java的initSDKSettings添加

settings.setOverlayFormat(CNCSDKSettings.RGB_565);

因网宿播放器为优化渲染效果,修改了此渲染方式。在绝大部分机型上均表现优良,但在部分机型上会观看不全,目前多发于魅族系列,因此需添加如上代码。

7. (移动端)调试时如何设置log打印方法

7.1. Android

logLevel:设置输出log等级,有三种可选:

  • LOG_LEVEL_ALL(输出全部)
  • LOG_LEVEL_WARN(输出warning以上)
  • LOG_LEVEL_NONE(关闭log)

给出发布版本默认为LOG_LEVEL_NONE

7.2. iOS

LogLevel:

  • debug模式(打印日志最详细)
  • warn模式(输出警告日志)
  • silent模式(仅输出silent 级别,error日志)

8. (iOS)播放LibDemo编译反馈证书错误

通常带有提示

CNCMediaPlayerLibDemo is automatically signed for development, but a conflicting code signing identity iPhone Distribution has been manually specified. Set the code signing identity value to "iPhone Developer" in the build settings editor, or switch to manual signing in the project editor. 

由于LibDemo已经绑定我司发布证书,此时客户需要在DEBUG时使用自己的开发证书,可以通过Signing分页调整即可

9. (全平台)是否支持播放WebSocket协议流

目前移动端播放器暂时不支持ws或wss开头的协议
HTML5播放器支持播放使用WebSocket协议的FLV格式流

10. (iOS)编译时报CUICatalog: Invalid asset name supplied错误?

首先该问题并非由于SDK造成,而是系统接口层面的问题,产生原因就是因为在使用的时候 [UIImage imageNamed:]时,图片不存在或者传入的图片名为nil。
通常可通过添加一个系统断点,来判断如果图片名字为nil或者@""的时候,来拦截掉。完整步骤为:

  1. 在Xcode的Breakpoint Navigator点击加号, 选择Add Symbolic Breakpoint;
  2. 右键选择Breakpoint选择Edit Breakpoint, 在Symbol填入+[UIImage imageNamed:], 在Condition填入[(NSString *)\(arg3 length] == 0或者\)arg3 == nil. 可以自己尝试po \(arg1,po \)arg2试试看;
  3. 运行程序, 直到程序进入断点. 打开Debug Navigator观察调用栈, 最顶部的一定是+[UIImage imageNamed:], 点击调用栈下一条, 能够看到有调用到imageNamed的代码, 就是name为nil的地方;
  4. 如果找到的地方显示的是地址,而不是代码,这时候不妨查看下一个断点,不错应该就是下个断点哪里。

11. (Android)播放器是否都使用SurfaceView,何时会使用TextureView?

API版本>=14的时候才能使用TextureView,即TextureView支持的最低API版本,通过CNCSdkSetting这个类中的setEnableTextureView控制是否需要使用该控件。

12. (iOS)视频播放过程卡死后无法恢复播放问题

视频播放过程可能由于种种原因加载失败,如果是网络原因导致加载失败的,可以加入重试机制,该机制在demo层实现。
具体实现方式:

  1. 监听CNCMediaPlayerPlayDidFinishNotification 通知。
  2. 当收到键值对 CNCMediaPlayerPlayDidFinishUserInfoKey 的值为 CNC_MEDIA_PLAYER_DID_FINISH_ERROR 可尝试调用reload 方法- (void)reloadWithContentURL:(NSURL *)contentURL fromStart:(BOOL)fromstart 的方法进行重试。

13. (H5)播放器如何销毁

如果是单页应用,客户需要调用

player.dispose()

方法,退出页面之前;如果不是单页应用,是正常刷新的不会出现这个情况,需提供更多信息。

14. (Mobile)播放视频时如何控制是铺满或其他布局?

14.1. iOS:

//视频比例, 详见视频比例CncMpVideoScalingMode定义
@property (nonatomic) CncMpVideoScalingMode scalingMode;

14.2. Android

mCNCVideoViewEx.setAspectRatio(IRenderView.AR_ASPECT_FIT_PARENT);

这一参数包括如下5种模式:

/*设置视频画面拉伸比例,5种可选,如果要关闭双击切换比例功能,需在CNCMediaController的onDoubleTap中注释
    IRenderView.AR_ASPECT_FIT_PARENT //适应屏幕(默认)
    IRenderView.AR_ASPECT_FILL_PARENT //填满窄边
    IRenderView.AR_MATCH_PARENT //填满屏幕
    IRenderView.AR_16_9_FIT_PARENT //16:9
    IRenderView.AR_4_3_FIT_PARENT //4:3*/

15. (H5)播放器暂停播放后,如何居中播放按钮?

参考链接:

video.js使用技巧

video.js默认的播放按钮在左上角,应该是 video.js 开发人员认为放中间会遮挡内容,所以没放中间。

不过我们常见的一般都在中间,比较符合习惯。

这是可以通过参数修改的,在

<video>

标签中加入

vjs-big-play-centered

类,就可以了。
像这样:

class="video-js vjs-big-play-centered"

video.js 在未播放时,会显示一个大的播放按钮,上面我们提到如何让他居中。
那么,如何在视频暂停时也显示这个播放按钮呢?

CDN加速之负载均衡技术是什么?

有很多用JS的解决办法,感觉都挺麻烦的。

其实用CSS就可以搞定了:

.vjs-paused .vjs-big-play-button,
.vjs-paused.vjs-has-started .vjs-big-play-button {
    display: block;
}

16. (H5)如播放HDL视频源本身没有音频,无法播放,如何调整代码?

在播放器创建时的hdlConfig中加入hasAudio和hasVideo值来控制即可。

const player = WSPlayer('my-player', {
            // 播放配置, 详见参数说明
            muted: true,
            autoplay: true,
            controls: true,
            sources: [{
                src: 'http://112.240.61.174/vclient.pull.com/live/vclient.flv',
                type: WSPlayer.CODEC.HDL,
                label: '360P'
            }],
            hdlConfig: {
              mediaDataSource: {
                hasAudio: false,
                hasVideo: true,
                isLive: true
              }
            }
        },