gpt4 book ai didi

ios - 无法浏览媒体服务器中的歌曲

转载 作者:技术小花猫 更新时间:2023-10-29 11:22:59 27 4
gpt4 key购买 nike

目前从事 UpnP 项目。我想将我的 iPod touch 变成媒体服务器(例如:https://itunes.apple.com/in/app/arkmc-lite-dlna-upnp-media/id640095560?mt=8)。所以我使用了以下 SDK ( link )。我已经成功集成并且它显示在媒体服务器列表中但是当我点击服务器时它无法浏览媒体文件。谁能让我知道我的问题是什么?感谢您的宝贵时间

这里是一些简短的代码

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.

upnp = [[PLT_UPnPObject alloc] init];

// create server and add ourselves as the delegate
PLT_MediaServerObject* server = [[PLT_MediaServerObject alloc] init];
[server setDelegate:self];
[upnp addDevice:server];
}

- (IBAction)performUPnPStarStop:(id)sender {
if ([upnp isRunning]) {
[upnp stop];
[mainButton setTitle:@"Start" forState:UIControlStateNormal];
} else {
[upnp start];
[mainButton setTitle:@"Stop" forState:UIControlStateNormal];
}
}


#pragma mark PLT_MediaServerDelegateObject
- (NPT_Result)onBrowseMetadata:(PLT_MediaServerBrowseCapsule*)info
{
return NPT_FAILURE;
}

- (NPT_Result)onBrowseDirectChildren:(PLT_MediaServerBrowseCapsule*)info
{
return NPT_FAILURE;
}

- (NPT_Result)onSearchContainer:(PLT_MediaServerSearchCapsule*)info
{
return NPT_FAILURE;
}

- (NPT_Result)onFileRequest:(PLT_MediaServerFileRequestCapsule*)info
{
return NPT_FAILURE;
}

另外我在日志中收到一条消息是 NEPTUNE_LOG_CONFIG not found in 'Info.plist'

enter image description here

最佳答案

抱歉,我来晚了。我查看了您提供的 SDK 源代码。我试图找出可能导致此“800 内部错误”的原因。这是我发现的:

PltMediaServer.cpp 中的第 434 行附近有这个位:

if (NPT_FAILED(res) && (action->GetErrorCode() == 0)) {
action->SetError(800, "Internal error");
}

那么是什么导致 NPT_FAILED(res)true?回头查看源码,发现在424行

res = OnBrowseDirectChildren(
action,
object_id,
filter,
starting_index,
requested_count,
sort,
context);

但是你的代码(还有默认的测试代码!)有

- (NPT_Result)onBrowseDirectChildren:(PLT_MediaServerBrowseCapsule*)info
{
return NPT_FAILURE;
}

我从您的代码中看不到 OnBrowseDirectChildren 的其他变体。

默认实现在 PltMediaServerObject.mm 第 44 行:

NPT_Result OnBrowseDirectChildren(PLT_ActionReference&          action, 
const char* object_id,
const char* filter,
NPT_UInt32 starting_index,
NPT_UInt32 requested_count,
const char* sort_criteria,
const PLT_HttpRequestContext& context) {
if (![[m_Target delegate] respondsToSelector:@selector(onBrowseDirectChildren:)])
return NPT_FAILURE;

...

所以你避免了那里的失败情况,但是这个位出现在第 62 行:

NPT_Result result = [[m_Target delegate] onBrowseDirectChildren:capsule];

这就是您的 NPT_FAILURE 将被返回的地方,这将阻止媒体浏览。


还有另一种可能发生此错误的方式,在 PltMediaServer.cpp 的第 415 行有

res = OnBrowseMetadata(...);

但是您的代码又是这样的,没有其他变体。

- (NPT_Result)onBrowseMetadata:(PLT_MediaServerBrowseCapsule*)info
{
return NPT_FAILURE;
}

这将导致类似的错误情况。


好了,解释一下为什么会出现 800 内部错误。我的建议,实现它们。

以下是您可以借用或逆向工程的所述方法的示例实现:

关于ios - 无法浏览媒体服务器中的歌曲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27819659/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com