一个轻量、原子化的直播播放器 SDK — 启播快、切流稳、扩展轻。
English | 简体中文 | 日本語 · ⬅ 返回全端总览
AtomicPlayer 面向低延迟直播(LEB / RTMP)与 CDN 拉流场景,只做一件事:把一路直播流又快又稳地播出来。
- 🚀 秒开 — 首帧目标 < 600ms
- 🎞️ 臻彩画质 — AI 超分、HDR 等画质增强能力按需开启
- 🔄 无缝切流 — 清晰度切换无卡顿
- 🌐 多端一致 — 各端共用同一套统一流程
| 能力 | 接口 |
|---|---|
| 播放控制 | startPlay / stopPlay / pause / resume |
| 无缝切流 | switchStream |
| 渲染控制 | setRenderView / setRenderRotation / setRenderFillMode |
| 截图 | snapshot |
| 音量 | setVolume |
| SEI 消息 | enableReceiveSeiMessage |
| 事件回调 | AtomicPlayerObserver |
| 高级特性 | enableAdvancedFeature(AI 超分 / HDR …) |
- Android minSdk 21+(Android 5.0)
- 架构:
armeabi-v7a/arm64-v8a/x86_64
在项目根目录的 settings.gradle(或 build.gradle)中添加 Maven 仓库:
dependencyResolutionManagement {
repositories {
maven { url "" } // TODO: 填写 AtomicPlayer Maven 仓库地址
}
}在业务模块的 build.gradle 中添加依赖:
dependencies {
implementation "" // TODO: 填写 AtomicPlayer 依赖坐标,如 "io.trtc:atomic-player:x.y.z"
}<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><io.trtc.tuikit.atomicxcore.api.view.AtomicView
android:id="@+id/atomic_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />val player = AtomicPlayerImpl()
player.setRenderView(findViewById(R.id.atomic_view))
player.startPlay("https://your-cdn.com/live/stream.m3u8")class PlayerActivity : AppCompatActivity() {
private lateinit var player: AtomicPlayer
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_player)
player = AtomicPlayerImpl()
player.setRenderView(findViewById(R.id.atomic_view))
player.setObserver(object : AtomicPlayerObserver() {
override fun didRenderFirstVideoFrame(player: AtomicPlayer, elapsedMs: Int) {
Log.i("AtomicPlayer", "首帧耗时: ${elapsedMs}ms")
}
override fun didFailWithCode(
player: AtomicPlayer,
code: AtomicPlayerCode,
message: String
) {
Log.e("AtomicPlayer", "播放失败: $code, $message")
}
})
player.startPlay("https://your-cdn.com/live/stream.m3u8")
}
override fun onDestroy() {
super.onDestroy()
player.stopPlay()
player.setObserver(null)
}
}支持的协议:FLV / HLS (http(s)://…) · LEB (webrtc://) · RTMP (rtmp://)
▶ 无缝切换清晰度(不黑屏)
// ✅ 推荐:无缝切流,无黑屏
player.switchStream("webrtc://.../stream_1080p")
// ❌ 不推荐:会明显黑屏 + 重走首帧
player.stopPlay()
player.startPlay("webrtc://.../stream_1080p")切换结果通过 didSwitchStream(player, url, code) 异步回调。
▶ 设置画面填充模式
import com.tencent.cloud.tuikit.engine.common.TUICommonDefine.VideoRenderParams.FillMode
player.setRenderFillMode(FillMode.Fill) // 铺满,超出裁剪(默认)
player.setRenderFillMode(FillMode.Fit) // 等比缩放,可能有黑边
player.setRenderFillMode(FillMode.ScaleFill) // 拉伸铺满,可能变形▶ 截图
player.snapshot()
override fun didTakeSnapshot(player: AtomicPlayer, image: Bitmap) {
// 保存 / 分享 / 显示
}▶ 接收 SEI 消息(弹幕位置、连麦信令、时间戳对齐等)
player.enableReceiveSeiMessage(enable = true, payloadType = 243)
override fun didReceiveSEI(player: AtomicPlayer, data: ByteArray) {
Log.i(TAG, "收到 SEI: ${String(data, Charsets.UTF_8)}")
}支持的 payloadType:5 / 100 / 242 / 243。
▶ HEVC 不支持时降级到 H.264
override fun didFailWithCode(
player: AtomicPlayer,
code: AtomicPlayerCode,
message: String
) {
if (code == AtomicPlayerCode.ERROR_NO_AVAILABLE_HEVC_DECODERS) {
player.stopPlay()
player.startPlay(h264FallbackUrl)
}
}▶ 开启高级特性(AI 超分 / HDR)
player.enableAdvancedFeature("setVideoSuperResolutionEnableMode", 1) // AI 超分
player.enableAdvancedFeature("enableHdrEnhancement", "{\"enable\": 1}") // HDRAtomicPlayerObserver 全部方法均为默认空实现,只需重写关心的:
| 分类 | 回调 | 说明 |
|---|---|---|
| 播放状态 | didRenderFirstVideoFrame(player, elapsedMs) |
首帧渲染,返回从起播到首帧的耗时 |
didStartBuffering(player) / didEndBuffering(player, elapsedMs) |
卡顿开始 / 结束 | |
didChangeVideoSize(player, width, height) |
分辨率变化 | |
| 连接 | didConnect(player) / didDisconnect(player) |
连接建立 / 断开 |
didFailWithCode(player, code, message) |
播放失败 | |
| 数据 | didUpdateStatistics(player, stats) |
每 2s 上报一次统计(分辨率 / 码率 / 帧率) |
didSwitchStream(player, url, code) |
切流完成 | |
didTakeSnapshot(player, image) |
截图完成 | |
didReceiveSEI(player, data) |
收到 SEI |
⚠️ 所有回调均在主线程分发,UI 更新可直接执行;耗时逻辑请自行切子线程。
| 枚举 | 数值 | 说明 |
|---|---|---|
OK |
0 | 成功 |
ERROR_FAILED |
-1 | 未分类失败 |
ERROR_INVALID_PARAMETER |
-1001 | 参数非法 |
ERROR_INSTANCE_NOT_EXIST |
-1002 | 实例已释放 |
ERROR_NO_AVAILABLE_HEVC_DECODERS |
-2304 | 设备无可用 HEVC 解码器 |