Android DLNA 媒体渲染器(DMR),支持 QPlay 协议,实现手机 - 设备同步控制、播放列表管理、歌词回调等功能。
dependencies {
implementation("io.github.qytech:dlna:0.2.7")
}
优化
修复
新增
onProgressChanged(positionMs: Long, durationMs: Long) 回调onProgressChanged(progress: Float) 与 onProgressChanged(positionMs: Long, durationMs: Long) 只需重写其中一个优化
修复
新增
interface IDLNAMediaEventListener {
fun onMetaDataChanged(trackInformation: MusicMetaData?)
fun onQPlayQueueChanged(
queue: List<QPlayTrackMetaData>,
index: Int,
audioInfo: QPlayAudioInfo? = null
)
// QPlay 控制端下发的 LRC 歌词
fun onLyricChanged(songId: String, lyric: String)
fun onProgressChanged(progress: Float)
fun onVolumeChanged(value: Float)
fun onMuteChanged(mute: Boolean)
fun onPlayStatusChanged(isPlaying: Boolean)
}
优化
新增
startingIndex / nextIndex 处理分片队列数据,便于控制端下发超长歌单优化
onPlayStatusChanged 同时提供 playbackState 与 isPlayingsetTracksInfo 日志输出,避免打印整包曲目数据导致日志噪音过大使用示例
private val mediaEventListener = object : IDLNAMediaEventListener {
override fun onPlayStatusChanged(playbackState: Int, isPlaying: Boolean) {
Timber.d("onPlayStatusChanged playbackState=$playbackState isPlaying=$isPlaying")
}
override fun onQPlayQueueChanged(
queue: List<QPlayTrackMetaData>,
trackId: Int,
audioInfo: QPlayAudioInfo?
) {
Timber.d("queueSize=${queue.size}, currentTrack=$trackId, audioInfo=$audioInfo")
}
}
fun selectQPlayTrack(index: Int) {
DLNAMediaRender.qPlaySelect(index)
}
新增
SQ 音质支持修复
QPlayAudioInfo 回调支持,控制端现在可以拿到采样率、声道、位深等音频信息使用示例
override fun onQPlayQueueChanged(
queue: List<QPlayTrackMetaData>,
index: Int,
audioInfo: QPlayAudioInfo?
) {
Timber.d("queue=$queue, index=$index, audioInfo=$audioInfo")
}
新增
使用示例
override fun onMetaDataChanged(trackInformation: MusicMetaData?) {
Timber.d("trackInformation=$trackInformation")
}
override fun onQPlayQueueChanged(
queue: List<QPlayTrackMetaData>,
index: Int,
audioInfo: QPlayAudioInfo?
) {
Timber.d("sampleRate=${audioInfo?.sampleRate}, bitDepth=${audioInfo?.bitDepth}")
}
修复
使用示例
DLNAMediaRender.addDLNAMediaEventListener(mediaEventListener)
DLNAMediaRender.startService(
application = app,
deviceName = "qytech dmr",
uuid = UUID.nameUUIDFromBytes("DLNAMediaRender".toByteArray())
)
修复
使用示例
fun mediaControllerQPlayNext() {
DLNAMediaRender.qPlayNext()
}
fun mediaControllerQPlayPrevious() {
DLNAMediaRender.qPlayPrevious()
}
修复
updateTransportState 空指针问题,提升状态同步稳定性使用示例
override fun onServiceConnected() {
Timber.d("DLNA service connected")
}
override fun onServiceDisconnected() {
Timber.d("DLNA service disconnected")
}