/** * 构建播放器动态水印文案。 */ export function buildVideoWatermarkText(userId, tick) { const normalizedUserId = Number(userId || 0) if (!Number.isFinite(normalizedUserId) || normalizedUserId <= 0) { return '' } return `用户ID:${normalizedUserId} ${formatWatermarkTime(tick)}` } /** * 启用播放器安全限制。 */ export function enableVideoSecurityProtection() { if (typeof plus === 'undefined' || !plus.os) { return } if (String(plus.os.name || '').toLowerCase() !== 'android') { return } try { const mainActivity = plus.android.runtimeMainActivity() if (!mainActivity) { return } const window = mainActivity.getWindow() const layoutParams = plus.android.importClass('android.view.WindowManager$LayoutParams') window.setFlags(layoutParams.FLAG_SECURE, layoutParams.FLAG_SECURE) } catch (error) { // 安全限制为增强能力,失败时保持静默回退。 } } /** * 关闭播放器安全限制。 */ export function disableVideoSecurityProtection() { if (typeof plus === 'undefined' || !plus.os) { return } if (String(plus.os.name || '').toLowerCase() !== 'android') { return } try { const mainActivity = plus.android.runtimeMainActivity() if (!mainActivity) { return } const window = mainActivity.getWindow() const layoutParams = plus.android.importClass('android.view.WindowManager$LayoutParams') window.clearFlags(layoutParams.FLAG_SECURE) } catch (error) { // 安全限制为增强能力,失败时保持静默回退。 } } /** * 绑定系统截图监听。 */ export function bindVideoCaptureListener(handler) { if (typeof handler !== 'function' || typeof uni.onUserCaptureScreen !== 'function') { return } uni.onUserCaptureScreen(handler) } /** * 解绑系统截图监听。 */ export function unbindVideoCaptureListener(handler) { if (typeof uni.offUserCaptureScreen !== 'function') { return } if (typeof handler === 'function') { uni.offUserCaptureScreen(handler) return } uni.offUserCaptureScreen() } /** * 判断当前是否为 iOS APP。 */ export function isIosApp() { if (typeof plus === 'undefined' || !plus.os) { return false } return String(plus.os.name || '').toLowerCase() === 'ios' } /** * 格式化水印时间片段。 */ function formatWatermarkTime(value) { const date = value instanceof Date ? value : new Date(value || Date.now()) const month = `${date.getMonth() + 1}`.padStart(2, '0') const day = `${date.getDate()}`.padStart(2, '0') const hours = `${date.getHours()}`.padStart(2, '0') const minutes = `${date.getMinutes()}`.padStart(2, '0') return `${month}-${day} ${hours}:${minutes}` }