技术背景
大牛直播SDK自2015年发布RTSP、RTMP直播播放模块,迭代从未停止,SmartPlayer功能强大、性能强劲、高稳定、超低延迟、超低资源占用。无需赘述,全自研内核,行业内一致认可的跨平台RTSP、RTMP直播播放器。本文以Android平台为例,介绍下如何集成RTSP、RTMP播放模块。
技术对接
系统要求
- SDK支持Android5.1及以上版本;
- 支持的CPU架构:armv7, arm64, x86, x86_64。
准备工作
- 确保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添加相关权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
</uses-permission>
<uses-permission android:name="android.permission.INTERNET" >
</uses-permission>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
- 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
}
}
- 如需集成到自己系统测试,请用大牛直播SDK的app name,授权版按照授权app name正常使用即可;
- 如何改app-name,strings.xml做以下修改:
<string name="app_name">SmartPlayerSDKDemo</string>
接口设计
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 |
实时静音 |
|
设置播放音量 |
SmartPlayerSe |