技术背景
好多开发者拿到大牛直播SDK的Android平台RTSP、RTMP播放模块,基本上不看说明,测试后,就直接集成到自己系统了。不得不说,我们的模块虽然接口很多,功能支持全面,但是上层的demo设计逻辑确实简单,稍微有些Android开发基础的,都可以轻松处理。
从高效率的角度,磨刀不误砍柴工,在模块集成之前,还是希望开发者能了解播放器集成的一些前置条件,少走弯路,尽快完成RTSP、RTMP低延迟播放能力构建。
本文不关注接口集成调用细节,主要介绍下,播放器集成的一些前置条件和注意事项。
环境要求
类别
说明
系统版本
Android 5.1及以上版本。
手机芯片
架构要求:
-
armv7
-
arm64
-
x86
-
x86_64
开发工具
推荐使用Android Studio,Android Studio下载地址:Android Studio。
前提条件
-
官方测试版:如需在测试阶段,做系统集成验证,可使用官方测试APP名称,不然会提示license验证失败,无法正常使用;
-
授权版:已拿到授权license key和授权库,使用授权的APP名称。
如需修改app-name,strings.xml修改即可:
<string name="app_name">SmartPlayerSDKDemo</string>
SmartPlayer目录
编辑
文件名
作用
SmartPlayerV2
RTSP|RTMP直播播放器Demo工程源码
SmartPlayerV2\app\src\main\jniLibs
smartavengine.jar和libSmartPlayer.so
SmartPlayerV2\app\src\main\java\com\daniulive\
smartplayer\SmartPlayerJniV2.java
播放器头文件
SmartPlayerV2\app\src\main\java\com\daniulive\
smartplayer\SmartPlayer.java
接口调用示例
准备工作
-
确保SmartPlayerJniV2.java放到com.daniulive.smartplayer包名下(可在其他包名下调用);
-
Smartavengine.jar加入到工程;
-
拷贝SmartPlayerV2\app\src\main\jniLibs\armeabi-v7a、 SmartPlayerV2\app\src\main\jniLibs\arm64-v8a、SmartPlayerV2\app\src\main\jniLibs\x86和SmartPlayerV2\app\src\main\jniLibs\x86_64 下 libSmartPlayer.so到工程;
-
AndroidManifast.xml添加相关权限:
-
Load相关so:
static {
System.loadLibrary("SmartPlayer"); } -
build.gradle配置32/64位库:
splits { abi { enable true reset() // Specifies a list of ABIs that Gradle should create APKs for include 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' //select ABIs to build APKs for // Specify that we do not want to also generate a universal APK that includes all ABIs universalApk true } }
接口设计
Android RTSP|RTMP播放端SDK接口详解
调用描述
接口
接口描述
最先调用,如成功返回播放********实例
SmartPlayerOpen
player初始化,设置上下文信息,返回player句柄
Event回调
SetSmartPlayerEventCallbackV2
设置event callback
硬解码设置****(H.264********)****
SetSmartPlayerVideoHWDecoder
设置是否用H.264硬解码播放,如硬解码不支持,自动适配到软解码
硬解码设置****(H.265********)****
SetSmartPlayerVideoHevcHWDecoder
设置是否用H.265硬解码播放,如硬解码不支持,自动适配到软解码
视频画面
填充模式
SmartPlayerSetRenderScaleMode
设置视频画面的填充模式,如填充整个view、等比例填充view,如不设置,默认填充整个view
设置SurfaceView模式下render类型
SmartPlayerSetSurfaceRenderFormat
设置SurfaceView模式下(NTRenderer.CreateRenderer第二个参数传false的情况),render类型
0: RGB565格式,如不设置,默认此模式; 1: ARGB8888格式
设置SurfaceView模式下抗锯齿效果
SmartPlayerSetSurfaceAntiAlias
设置SurfaceView模式下(NTRenderer.CreateRenderer第二个参数传false的情况),抗锯齿效果,注意:抗锯齿模式开启后,可能会影像性能,请慎用
设置播放的surface
SmartPlayerSetSurface
设置播放的surface,如果为null,则播放纯音频
设置********视频硬解码下Mediacodec自行绘制模式
SmartPlayerSetHWRenderMode
此种模式下,硬解码兼容性和效率更好,回调YUV/RGB****、快照和图像等比例缩放********功能将不可用****
更新硬解码surface
SmartPlayerUpdateHWRenderSurface
设置更新硬解码surface
音频回调
YUV/RGB
SmartPlayerSetExternalRender
提供解码后YUV/RGB数据接口,供用户自己render或进一步处理(如视频分析)
Audio
SmartPlayerSetExternalAudioOutput
回调audio数据到上层(供二次处理之用)
audio输出类型
SmartPlayerSetAudioOutputType
如果use_audiotrack设置为0,将会自动选择输出设备,如果设置为1,使用audiotrack模式,一对一回音消除模式下,请选用audiotrack模式
Video输出类型
NTRenderer.CreateRenderer(上层demo内)
第二个参数,如果是true,用openGLES绘制,false则用默认surfaceView
播放模式
缓冲时间设置
SmartPlayerSetBuffer
设置播放端缓存数据buffer,单位:毫秒,如不需buffer,设置为0
首屏秒开
SmartPlayerSetFastStartup
设置快速启动后,如果CDN缓存GOP,实现首屏秒开
低延迟模式
SmartPlayerSetLowLatencyMode
针对类似于直播娃娃机等期待超低延迟的使用场景,超低延迟播放模式下,延迟可达到200~400ms
快速切换URL
SmartPlayerSwitchPlaybackUrl
快速切换播放url,快速切换时,只换播放source部分,适用于不同数据流之间,快速切换(如娃娃机双摄像头切换或高低分辨率流切换)
RTSP TCP/UDP模式设置
SmartPlayerSetRTSPTcpMode
设置RTSP TCP/UDP模式,如不设置,默认UDP模式
RTSP超时时间设置
SmartPlayerSetRTSPTimeout
设置RTSP超时时间,timeout单位为秒,必须大于0
设置RTSP TCP/UDP自动切换
SmartPlayerSetRTSPAutoSwitchTcpUdp
对于RTSP来说,有些可能支持rtp over udp方式,有些可能支持使用rtp over tcp方式
为了方便使用,有些场景下可以开启自动尝试切换开关, 打开后如果udp无法播放,sdk会自动尝试tcp, 如果tcp方式播放不了,sdk会自动尝试udp.
设置RTSP用户名和密码
SetRTSPAuthenticationInfo
如果RTSP URL已包含用户名和密码, 此接口设置的用户名和密码将无效. 就是说要用这个接口设置的用户名和密码去做认证, RTSP URL不能包含用户名和密码.
实时静音
SmartPlayerSetMute
实时静音
设置播放音量
SmartPlayerSetAudioVolume
播放端音量实时调节,范围[0,100],0时为静音,100为原始流数据最大音量
设置是否禁用 Enhanced
RTMP
DisableEnhancedRTMP
disable enhanced RTMP, SDK默认是开启enhanced RTMP的
实时截图
CaptureImage
支持JPEG和PNG两种格式
视频镜像旋转
旋转
SmartPlayerSetRotation
设置顺时针旋转, 注意除了0度之外, 其他角度都会额外消耗性能,当前支持 0度,90度, 180度, 270度 旋转
水平反转
SmartPlayerSetFlipHorizontal
设置视频水平反转
垂直反转
SmartPlayerSetFlipVertical
设置视频垂直反转
设置URL
SmartPlayerSetUrl
设置需要播放或录像的RTMP/RTSP url
开始播放
SmartPlayerStartPlay
开始播放RTSP/RTMP流
停止播放
SmartPlayerStopPlay
停止播放RTSP/RTMP流
关闭播放实例
SmartPlayerClose
结束时必须调用close接口释放资源
功能支持
- 音频:AAC/Speex(RTMP)/PCMA/PCMU;
- 视频:H.264、H.265;
- 播放协议:RTSP|RTMP;
- 支持纯音频、纯视频、音视频播放;
- 支持多实例播放;
- 支持软解码,特定机型硬解码;
- 支持RTSP TCP、UDP模式设置;
- 支持RTSP TCP、UDP模式自动切换;
- 支持RTSP超时时间设置,单位:秒;
- 支持buffer时间设置,单位:毫秒;
- 支持超低延迟模式;
- 支持断网自动重连、视频追赶,支持buffer状态等回调;
- 支持视频view实时旋转(0° 90° 180° 270°);
- 支持视频view水平反转、垂直反转;
- 支持Surfaceview/OpenGL ES/TextureView绘制;
- 支持视频画面填充模式设置;
- 音频支持AudioTrack、OpenSL ES模式;
- 支持jpeg、png实时截图;
- 支持实时音量调节;
- 支持解码前音视频数据回调;
- 支持解码后YUV/RGB数据回调;
- 支持Enhanced RTMP;
- 支持扩展录像功能;
- 支持Android 5.1及以上版本。