QYDocs

DLNA/QPlay 模块

Android DLNA 媒体渲染器(DMR),支持 QPlay 协议,实现手机 - 设备同步控制、播放列表管理、歌词回调等功能。

依赖

dependencies {
    implementation("io.github.qytech:dlna:0.2.7")
}

功能特性


更新日志

[0.2.7] — 2026-07-11

优化


[0.2.6] — 2026-06-26

修复

新增


[0.2.5] — 2026-06-12

优化

[0.2.4] — 2026-06-12

修复

新增

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)
}

[0.2.3] — 2026-06-06

优化

[0.2.2] — 2026-06-01

[0.2.1] — 2026-05-29

[0.2.0] — 2026-05-22


[0.1.8] — 2026-04-28

[0.1.7] — 2026-04-16

[0.1.6] — 2026-04-15

[0.1.5] — 2026-04-07

[0.1.4] — 2026-04-01

新增

优化

使用示例

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)
}

[0.1.3]

新增

修复

使用示例

override fun onQPlayQueueChanged(
    queue: List<QPlayTrackMetaData>,
    index: Int,
    audioInfo: QPlayAudioInfo?
) {
    Timber.d("queue=$queue, index=$index, audioInfo=$audioInfo")
}

[0.1.2]

新增

使用示例

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}")
}

[0.1.1]

修复

使用示例

DLNAMediaRender.addDLNAMediaEventListener(mediaEventListener)
DLNAMediaRender.startService(
    application = app,
    deviceName = "qytech dmr",
    uuid = UUID.nameUUIDFromBytes("DLNAMediaRender".toByteArray())
)

[0.1.0]

修复

使用示例

fun mediaControllerQPlayNext() {
    DLNAMediaRender.qPlayNext()
}

fun mediaControllerQPlayPrevious() {
    DLNAMediaRender.qPlayPrevious()
}

[0.0.9]

修复

使用示例

override fun onServiceConnected() {
    Timber.d("DLNA service connected")
}

override fun onServiceDisconnected() {
    Timber.d("DLNA service disconnected")
}