Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New features: DLNA video cast & External video player support #82

Merged
merged 2 commits into from
Jul 22, 2024

Conversation

WhiteXero
Copy link
Contributor

@WhiteXero WhiteXero commented Jul 22, 2024

相关issue #74 #23

#74 说明

  • 投屏通过 UPnP(DLNA) 技术实现,在不支持此技术的设备上,投屏功能不会生效
  • 建议说明 UPnP(DLNA) 投屏要求为在同一网络下
  • 建议说明 Windows 10 及更早的版本中,Windows Media Player 对 m3u8 的播放支持不完整,这不是投屏功能的 Bug
  • 尚不明确是否需要制作额外的 DLNA 投屏控制页面。经测试,投屏到 Android 电视上的内容可以通过遥控器直接操作,故暂不实现

#23 说明

  • 在 Android / iOS 设备上,外部播放的实现方式为打开指定 MIME 类型为 video/mp4 的链接
  • iOS 设备需要进行测试(手头没设备),我已将 iOS 相关代码注释,详见 PR 文件中 ios/Runner/AppDelegate.swiftlib/utils/remote.dart 中的注释部分
  • Windows 平台目前仅支持浏览器打开,原因详见 PR 文件中 lib/utils/remote.dart 中的注释部分。需要更好的实现办法

@WhiteXero WhiteXero changed the title New enhancement: DLNA video cast & External video player support New features: DLNA video cast & External video player support Jul 22, 2024
@WhiteXero
Copy link
Contributor Author

WhiteXero commented Jul 22, 2024

实际上,UPnP 搜索出的设备中,一般只有类型为 MediaRenderer 支持媒体投屏
但我对所有设备进行了统一处理(它甚至搜索出了我的网关),如果觉得不必要,可以修改 lib/utils/remote.dart 的处理逻辑。只显示 MediaRendererMediaServer 类型的设备

Apple 还可以使用 AirPlay 技术投屏,考虑到开发难度和用户较少,暂无实现想法。相关库 flutter_to_airplay

VLC 论坛说可以使用 vlc:// 播放外部内容,但是我测试发现无效(可能是我的方法错误?)

在 Windows 设备下主流播放器(VLC,PotPlayer,甚至Windows Media Player?)都可以采用 CLI 方式播放内容,这也许是个可行的方法(不过我还没试过)

@Predidit
Copy link
Owner

感谢您的工作,不过我有两个问题想要确认。

  1. 使用 shared_preferences 的必要性是?在我看来,似乎只是拿它来储存并传递一个全局 videoUrl 变量。他的使用似乎是不必要的?毕竟我们可以使用 Modular.get<PlayerController>().videoUrl 来直接获取 PlayerController 中的对应变量。

  2. dlna_dart 包的可用性是否经过确认,这个包我之前测试过,他在和我的电视配对时会出现崩溃。

@WhiteXero
Copy link
Contributor Author

WhiteXero commented Jul 22, 2024

啊,我没用过 Modular 库
既然有这么方便的办法那就不用 shared_preferences 了,稍后修改

dlna_dart 经过测试在 Android 设备上投屏至 Windows Media Player 和电视上都符合预期(WMP 对 m3u8 支持不完整,不是代码问题)。iOS 无法确定,原因同上
要不待会您测试一下

@Predidit
Copy link
Owner

遗憾的是我这边也没有 iOS 设备可以用来测试。

dlna_dart 仍然没有办法在我的电视上工作,但是我刚刚测试了在PC上的DLNA服务器,它可以正常工作,所以我现在觉得这是一个特定与我的电视的问题。

对于不受支持的平台,我们是否应该在对应平台不显示外部播放按钮。

@WhiteXero
Copy link
Contributor Author

WhiteXero commented Jul 22, 2024

我认为不用?毕竟有Toast提示,而且代码也准备好了,只是无法测试可行性
也许会有带着 XCode 和 iPhone 的贡献者进行测试的。按照预想的结果,iOS 和 Android 一样,都会有系统那个“用...打开”的弹窗

@Predidit
Copy link
Owner

感谢您的耐心, workflow 似乎卡住了,我会在测试完其中的 windows 构建后在这里更新。

@Predidit
Copy link
Owner

PR已经合并

@Predidit Predidit merged commit 98f9562 into Predidit:main Jul 22, 2024
3 checks passed
@WhiteXero
Copy link
Contributor Author

PR已经合并

感谢。

off-topic: workflow编译的时间比平常慢了不少。就在不久前我的 Android Studio 也无法进行编译了,您有遇到这个问题吗

@Predidit
Copy link
Owner

看workflow日志似乎没有太大问题。github actions 的容器总是这样,有时网络会莫名其妙卡住。

我最近没有在本地遇到类似的问题。

@Predidit
Copy link
Owner

虽然已经过去了很长时间,但是还是在这里更新

我在 windows 平台上通过一些 hack 实现了外部播放器选择和打开功能,但我不知道这在其他 windows 设备上是否有效

你能测试这个吗

https://github.com/Predidit/Kazumi/actions/runs/11025710975/artifacts/1974901790

@WhiteXero
Copy link
Contributor Author

WhiteXero commented Sep 30, 2024

非常抱歉由于学业问题没有及时回复

Potplayer上工作正常,我认为已经可以不算实验性功能了?
或者等待更多反馈

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants