Tolriq 107 Posted April 27, 2020 Share Posted April 27, 2020 I'm starting to play with multiple files versions support but I can't get the API to return all of them during global queries only when asking media by media. Queries like /Users/XXXXXXX/Items?Recursive=true&IncludeItemTypes=Movie&ExcludeLocationTypes=Virtual&Fields=Genres,SortName,Path,Overview,RunTimeTicks,ParentId,People,ProviderIds,OriginalTitle,Studios,ProductionLocations,MediaSources,DateCreated,VoteCount,RemoteTrailers&CollapseBoxSetItems=false&limit=500 Only return the default one. Is there a way to do that without doing 1 query per media? Link to comment Share on other sites More sharing options...
PenkethBoy 2063 Posted April 27, 2020 Share Posted April 27, 2020 Use the /emby/items endpoint and you get all versions /emby/Items?Recursive=true&Fields=MediaSources&IncludeItemTypes=movie&SortBy=Sortname gives me both versions Link to comment Share on other sites More sharing options...
Luke 36890 Posted April 27, 2020 Share Posted April 27, 2020 HI, currently no. What is the use case? This will be considerably slower so it's not advised when puling back lists of media. Link to comment Share on other sites More sharing options...
Tolriq 107 Posted April 27, 2020 Author Share Posted April 27, 2020 Currently using http://192.168.1.80:8096//Users/xxx/Items?Recursive=true&IncludeItemTypes=Movie&ParentId=f33343612099ee4076b63639f98682d9&ExcludeLocationTypes=Virtual&Fields=Genres,SortName,Path,Overview,RunTimeTicks,ParentId,People,ProviderIds,OriginalTitle,Studios,MediaSources,ProductionLocations,MediaSources,DateCreated,VoteCount,RemoteTrailers,ProductionYear,CommunityRating,OfficialRating&startIndex=0&CollapseBoxSetItems=false&limit=500&UserId=xxx As it's the only to properly get all including matching sources. Anyway the need is always the same Yatse works fully offline with it's own database, it requires to be able to get most data it needs in the fastest way, so without doing 1 query per media. Link to comment Share on other sites More sharing options...
Luke 36890 Posted April 27, 2020 Share Posted April 27, 2020 The only thing you will lose with that is dynamic media sources, meaning, media sources that aren't known until the time of playback. You can use the /playbackinfo call prior to playback to get that. Link to comment Share on other sites More sharing options...
Tolriq 107 Posted April 27, 2020 Author Share Posted April 27, 2020 /Items returns 2 different media furthermore as reported when starting Emby implementation https://emby.media/community/index.php?/topic/47608-api-questions the parentIds are wrong when requesting like that and does not allow to reconstruct the proper library hierarchy. { "Name": "Sintel", "ServerId": "xxxx", "Id": "131261", "Container": "mp4", "MediaSources": [ { "Protocol": "File", "Id": "ad834d6995788c8a7ec8c9e073a91c76", "Path": "F:\\FakeLibrary\\Films\\Sintel (Sintel) [2010] [sDp]\\Sintel (Sintel) [2010] [sDp] - Optimised.mp4", "Type": "Default", "Container": "mp4", "Size": 301056903, "Name": "Optimised", "IsRemote": false, "RunTimeTicks": 8880000000, "SupportsTranscoding": true, "SupportsDirectStream": true, "SupportsDirectPlay": true, "IsInfiniteStream": false, "RequiresOpening": false, "RequiresClosing": false, "RequiresLooping": false, "SupportsProbing": false, "MediaStreams": [ { "Codec": "h264", "CodecTag": "avc1", "Language": "eng", "TimeBase": "1/12288", "CodecTimeBase": "1/48", "VideoRange": "SDR", "DisplayTitle": "720p H264", "DisplayLanguage": "English", "NalLengthSize": "4", "IsInterlaced": false, "IsAVC": true, "BitRate": 2511007, "BitDepth": 8, "RefFrames": 1, "IsDefault": true, "IsForced": false, "Height": 546, "Width": 1280, "AverageFrameRate": 24, "RealFrameRate": 24, "Profile": "Main", "Type": "Video", "AspectRatio": "960:409", "Index": 0, "IsExternal": false, "IsTextSubtitleStream": false, "SupportsExternalStream": false, "Protocol": "File", "PixelFormat": "yuv420p", "Level": 40, "IsAnamorphic": true }, { "Codec": "aac", "CodecTag": "mp4a", "Language": "eng", "TimeBase": "1/48000", "CodecTimeBase": "1/48000", "DisplayTitle": "English AAC stereo (Default)", "DisplayLanguage": "English", "IsInterlaced": false, "ChannelLayout": "stereo", "BitRate": 195812, "Channels": 2, "SampleRate": 48000, "IsDefault": true, "IsForced": false, "Profile": "LC", "Type": "Audio", "Index": 1, "IsExternal": false, "IsTextSubtitleStream": false, "SupportsExternalStream": false, "Protocol": "File" } ], "Formats": [], "Bitrate": 2712224, "RequiredHttpHeaders": {}, "ReadAtNativeFramerate": false } ], "RunTimeTicks": 8880000000, "IsFolder": false, "ParentId": "131078", "Type": "Movie", "ImageTags": { "Primary": "245aa8af2a55988b4a3a620005d29be3", "Logo": "5f45794ad8f727e04232f28236229d5e", "Thumb": "a30724cf5860d8b7cb59ea6536e80eff" }, "BackdropImageTags": [ "597297fbf77362f9d021752e3a0f2594" ], "MediaType": "Video" }, { "Name": "Sintel", "ServerId": "xxxxxxx", "Id": "131262", "Container": "mkv", "MediaSources": [ { "Protocol": "File", "Id": "47be8a6cffda8891169aad087803b41e", "Path": "F:\\FakeLibrary\\Films\\Sintel (Sintel) [2010] [sDp]\\Sintel (Sintel) [2010] [sDp] - Original.mkv", "Type": "Default", "Container": "mkv", "Size": 1180090590, "Name": "Original", "IsRemote": false, "RunTimeTicks": 8880320000, "SupportsTranscoding": true, "SupportsDirectStream": true, "SupportsDirectPlay": true, "IsInfiniteStream": false, "RequiresOpening": false, "RequiresClosing": false, "RequiresLooping": false, "SupportsProbing": false, "MediaStreams": [ { "Codec": "h264", "Language": "eng", "ColorSpace": "bt709", "TimeBase": "1/1000", "CodecTimeBase": "1/48", "VideoRange": "SDR", "DisplayTitle": "1080p H264", "DisplayLanguage": "English", "NalLengthSize": "4", "IsInterlaced": false, "IsAVC": true, "BitRate": 10631063, "BitDepth": 8, "RefFrames": 1, "IsDefault": false, "IsForced": false, "Height": 818, "Width": 1920, "AverageFrameRate": 24, "RealFrameRate": 24, "Profile": "High", "Type": "Video", "AspectRatio": "960:409", "Index": 0, "IsExternal": false, "IsTextSubtitleStream": false, "SupportsExternalStream": false, "Protocol": "File", "PixelFormat": "yuv420p", "Level": 40, "IsAnamorphic": false }, { "Codec": "ac3", "Language": "eng", "TimeBase": "1/1000", "CodecTimeBase": "1/48000", "Title": "AC3 5.1 @ 640 Kbps", "DisplayTitle": "English Dolby Digital 5.1", "DisplayLanguage": "English", "IsInterlaced": false, "ChannelLayout": "5.1", "BitRate": 640000, "Channels": 6, "SampleRate": 48000, "IsDefault": false, "IsForced": false, "Type": "Audio", "Index": 1, "IsExternal": false, "IsTextSubtitleStream": false, "SupportsExternalStream": false, "Protocol": "File" }, { "Codec": "subrip", "Language": "ger", "TimeBase": "1/1000", "CodecTimeBase": "0/1", "DisplayTitle": "German (SUBRIP)", "DisplayLanguage": "German", "IsInterlaced": false, "IsDefault": false, "IsForced": false, "Type": "Subtitle", "Index": 2, "IsExternal": false, "IsTextSubtitleStream": true, "SupportsExternalStream": true, "Protocol": "File" }, { "Codec": "subrip", "Language": "eng", "TimeBase": "1/1000", "CodecTimeBase": "0/1", "DisplayTitle": "English (SUBRIP)", "DisplayLanguage": "English", "IsInterlaced": false, "IsDefault": false, "IsForced": false, "Type": "Subtitle", "Index": 3, "IsExternal": false, "IsTextSubtitleStream": true, "SupportsExternalStream": true, "Protocol": "File" }, { "Codec": "subrip", "Language": "spa", "TimeBase": "1/1000", "CodecTimeBase": "0/1", "DisplayTitle": "Spanish (SUBRIP)", "DisplayLanguage": "Spanish", "IsInterlaced": false, "IsDefault": false, "IsForced": false, "Type": "Subtitle", "Index": 4, "IsExternal": false, "IsTextSubtitleStream": true, "SupportsExternalStream": true, "Protocol": "File" }, { "Codec": "subrip", "Language": "fre", "TimeBase": "1/1000", "CodecTimeBase": "0/1", "DisplayTitle": "French (SUBRIP)", "DisplayLanguage": "French", "IsInterlaced": false, "IsDefault": false, "IsForced": false, "Type": "Subtitle", "Index": 5, "IsExternal": false, "IsTextSubtitleStream": true, "SupportsExternalStream": true, "Protocol": "File" }, { "Codec": "subrip", "Language": "ita", "TimeBase": "1/1000", "CodecTimeBase": "0/1", "DisplayTitle": "Italian (SUBRIP)", "DisplayLanguage": "Italian", "IsInterlaced": false, "IsDefault": false, "IsForced": false, "Type": "Subtitle", "Index": 6, "IsExternal": false, "IsTextSubtitleStream": true, "SupportsExternalStream": true, "Protocol": "File" }, { "Codec": "subrip", "Language": "dut", "TimeBase": "1/1000", "CodecTimeBase": "0/1", "DisplayTitle": "Dutch (SUBRIP)", "DisplayLanguage": "Dutch", "IsInterlaced": false, "IsDefault": false, "IsForced": false, "Type": "Subtitle", "Index": 7, "IsExternal": false, "IsTextSubtitleStream": true, "SupportsExternalStream": true, "Protocol": "File" }, { "Codec": "subrip", "Language": "pol", "TimeBase": "1/1000", "CodecTimeBase": "0/1", "DisplayTitle": "Polish (SUBRIP)", "DisplayLanguage": "Polish", "IsInterlaced": false, "IsDefault": false, "IsForced": false, "Type": "Subtitle", "Index": 8, "IsExternal": false, "IsTextSubtitleStream": true, "SupportsExternalStream": true, "Protocol": "File" }, { "Codec": "subrip", "Language": "por", "TimeBase": "1/1000", "CodecTimeBase": "0/1", "DisplayTitle": "Portuguese (SUBRIP)", "DisplayLanguage": "Portuguese", "IsInterlaced": false, "IsDefault": false, "IsForced": false, "Type": "Subtitle", "Index": 9, "IsExternal": false, "IsTextSubtitleStream": true, "SupportsExternalStream": true, "Protocol": "File" }, { "Codec": "subrip", "Language": "rus", "TimeBase": "1/1000", "CodecTimeBase": "0/1", "DisplayTitle": "Russian (SUBRIP)", "DisplayLanguage": "Russian", "IsInterlaced": false, "IsDefault": false, "IsForced": false, "Type": "Subtitle", "Index": 10, "IsExternal": false, "IsTextSubtitleStream": true, "SupportsExternalStream": true, "Protocol": "File" }, { "Codec": "subrip", "Language": "vie", "TimeBase": "1/1000", "CodecTimeBase": "0/1", "DisplayTitle": "Vietnamese (SUBRIP)", "DisplayLanguage": "Vietnamese", "IsInterlaced": false, "IsDefault": false, "IsForced": false, "Type": "Subtitle", "Index": 11, "IsExternal": false, "IsTextSubtitleStream": true, "SupportsExternalStream": true, "Protocol": "File" } ], "Formats": [], "Bitrate": 10631063, "RequiredHttpHeaders": {}, "ReadAtNativeFramerate": false } ], "RunTimeTicks": 8880320000, "IsFolder": false, "ParentId": "131078", "Type": "Movie", "ImageTags": { "Primary": "12a583c73064824dffa02bf5f786759e", "Logo": "04cc373d646b8b488ebf5ff5907f162b", "Thumb": "b26b14bc71610df415ca2403b6a1340c" }, "BackdropImageTags": [ "9e679a80d8030823ea3ada4990844462" ], "MediaType": "Video" }, Link to comment Share on other sites More sharing options...
PenkethBoy 2063 Posted April 27, 2020 Share Posted April 27, 2020 they are two separate records in the database as two separate items - so no its not going to do the work for you the parentid of the second copy will be the id of the first copy - not double checked but suspect it is so you could combine them using that if i'm correct Link to comment Share on other sites More sharing options...
Tolriq 107 Posted April 27, 2020 Author Share Posted April 27, 2020 they are two separate records in the database as two separate items - so no its not going to do the work for you the parentid of the second copy will be the id of the first copy - not double checked but suspect it is so you could combine them using that if i'm correct Maybe but then as said I can't rebuild the proper library hierarchy needed to offer library filtering and display. I have no choice with current API to proceed by getting the libraries then their content, and in that configuration only 1 MediaSource is returned. I totally understand that requesting it by default would be slow, but impact is way below the impact of 1 request per item. I suppose this won't be added as too specific and find alternatives. Link to comment Share on other sites More sharing options...
PenkethBoy 2063 Posted April 27, 2020 Share Posted April 27, 2020 this is all in your control - yes you need to do a few queries - but its not difficult to do - fiddly maybe the api mirrors emby functionality and does not provide alternative needs out the box you need to work around what it gives to get the result you want Link to comment Share on other sites More sharing options...
Tolriq 107 Posted April 27, 2020 Author Share Posted April 27, 2020 Just to be clear nothing is difficult My problem is about efficiency, speed and performance. So my question is not about how to do slow workarounds, but about support for what I need, I'll wait for Luke official answer on willing to support it not. API and features evolves, the fact that something does not exist is certainly not a reason to not ask and to by default refuse Link to comment Share on other sites More sharing options...
PenkethBoy 2063 Posted April 27, 2020 Share Posted April 27, 2020 As its not need for Emby i would suspect you will wait a long time for a one of request - but you might get lucky - or just code it if its that important Link to comment Share on other sites More sharing options...
Tolriq 107 Posted April 28, 2020 Author Share Posted April 28, 2020 (edited) Emby is no more open source And I don't know if you are part of Emby team, but as you are probably not, so I wonder what is your problem here, if you do not like / understand the need just move away And Emby could use that feature as Plex does, it would fix a missing piece. Even in web interface in all lists Emby offers a 3 dots with a Play function, logic would be that there was a play version here too to be able to select the version. That would require either that listing could return all the media versions or at least an indicator that there's media version (or even better the count) so that the UI can display that button and then do 1 more call to get the data. @@Luke Edit: And for the record the ParentId from /Items is the folder hierarchy as in 2017, so no library related and no link between the items either. Edited April 28, 2020 by Tolriq Link to comment Share on other sites More sharing options...
PenkethBoy 2063 Posted April 28, 2020 Share Posted April 28, 2020 Dont have a problem - just pointing out you can do this yourself - rather than waiting for Luke to do something for you - considering how long it takes to get any new feature/bug fix these days and not part of the emby team Link to comment Share on other sites More sharing options...
Tolriq 107 Posted April 28, 2020 Author Share Posted April 28, 2020 You are still missing the point and the initial question I'm looking about an efficient way, not how to do that, I already know how to do that, and no /Items does not works either. So no I can't do the efficient way myself, only the slower workarounds .... Link to comment Share on other sites More sharing options...
PenkethBoy 2063 Posted April 28, 2020 Share Posted April 28, 2020 efficient in that the server does the work for you in the background and provides you the result - as luke has said its an expensive process - i.e. slowing down the server doing something else vs get a list of movies and process the data "locally" and use as needed I know which one i would choose Link to comment Share on other sites More sharing options...
Tolriq 107 Posted April 28, 2020 Author Share Posted April 28, 2020 You are funny Doing joins at server side will have some overhead and the query will be slower for a little impact that can be enabled when required. Doing 1 more query per media (Like the 10 000 episodes I have) will generate a insane more amount of loads on the server, or doing any more queries will generate more loads at it will still need to gather the data + serialize / send duplicate data... So why not stop arguing on things you do not really understand. At some point the data is needed, so the load will be there, doing it efficiently will always be more efficient than doing it badly. Link to comment Share on other sites More sharing options...
Tolriq 107 Posted April 28, 2020 Author Share Posted April 28, 2020 And @@Luke looking at the "Fork" I found the MediaSourceCount field that work there, and that strangely Emby webinterface still request too but is not returned. Was this removed on purpose and forgotten on WebInterface or it's broken and can be fixed? (The fix is enough for me, I then know what media I need to query for details and not all blindly) Link to comment Share on other sites More sharing options...
Tolriq 107 Posted April 29, 2020 Author Share Posted April 29, 2020 Anyway to have a definitive answer about MediaSourceCount at least? Link to comment Share on other sites More sharing options...
PenkethBoy 2063 Posted April 29, 2020 Share Posted April 29, 2020 You are funny Doing joins at server side will have some overhead and the query will be slower for a little impact that can be enabled when required. Doing 1 more query per media (Like the 10 000 episodes I have) will generate a insane more amount of loads on the server, or doing any more queries will generate more loads at it will still need to gather the data + serialize / send duplicate data... So why not stop arguing on things you do not really understand. At some point the data is needed, so the load will be there, doing it efficiently will always be more efficient than doing it badly. You dont know how things work either it appears - its not one more query at all - the queries will be significantly slower then you understand - but hey i dont care anymore - trying to help but if you wont listen does not bother me Have fun blindly looking for stuff Link to comment Share on other sites More sharing options...
Luke 36890 Posted April 29, 2020 Share Posted April 29, 2020 /Items returns 2 different media furthermore as reported when starting Emby implementation https://emby.media/community/index.php?/topic/47608-api-questions the parentIds are wrong when requesting like that and does not allow to reconstruct the proper library hierarchy. { "Name": "Sintel", "ServerId": "xxxx", "Id": "131261", "Container": "mp4", "MediaSources": [ { "Protocol": "File", "Id": "ad834d6995788c8a7ec8c9e073a91c76", "Path": "F:\\FakeLibrary\\Films\\Sintel (Sintel) [2010] [sDp]\\Sintel (Sintel) [2010] [sDp] - Optimised.mp4", "Type": "Default", "Container": "mp4", "Size": 301056903, "Name": "Optimised", "IsRemote": false, "RunTimeTicks": 8880000000, "SupportsTranscoding": true, "SupportsDirectStream": true, "SupportsDirectPlay": true, "IsInfiniteStream": false, "RequiresOpening": false, "RequiresClosing": false, "RequiresLooping": false, "SupportsProbing": false, "MediaStreams": [ { "Codec": "h264", "CodecTag": "avc1", "Language": "eng", "TimeBase": "1/12288", "CodecTimeBase": "1/48", "VideoRange": "SDR", "DisplayTitle": "720p H264", "DisplayLanguage": "English", "NalLengthSize": "4", "IsInterlaced": false, "IsAVC": true, "BitRate": 2511007, "BitDepth": 8, "RefFrames": 1, "IsDefault": true, "IsForced": false, "Height": 546, "Width": 1280, "AverageFrameRate": 24, "RealFrameRate": 24, "Profile": "Main", "Type": "Video", "AspectRatio": "960:409", "Index": 0, "IsExternal": false, "IsTextSubtitleStream": false, "SupportsExternalStream": false, "Protocol": "File", "PixelFormat": "yuv420p", "Level": 40, "IsAnamorphic": true }, { "Codec": "aac", "CodecTag": "mp4a", "Language": "eng", "TimeBase": "1/48000", "CodecTimeBase": "1/48000", "DisplayTitle": "English AAC stereo (Default)", "DisplayLanguage": "English", "IsInterlaced": false, "ChannelLayout": "stereo", "BitRate": 195812, "Channels": 2, "SampleRate": 48000, "IsDefault": true, "IsForced": false, "Profile": "LC", "Type": "Audio", "Index": 1, "IsExternal": false, "IsTextSubtitleStream": false, "SupportsExternalStream": false, "Protocol": "File" } ], "Formats": [], "Bitrate": 2712224, "RequiredHttpHeaders": {}, "ReadAtNativeFramerate": false } ], "RunTimeTicks": 8880000000, "IsFolder": false, "ParentId": "131078", "Type": "Movie", "ImageTags": { "Primary": "245aa8af2a55988b4a3a620005d29be3", "Logo": "5f45794ad8f727e04232f28236229d5e", "Thumb": "a30724cf5860d8b7cb59ea6536e80eff" }, "BackdropImageTags": [ "597297fbf77362f9d021752e3a0f2594" ], "MediaType": "Video" }, { "Name": "Sintel", "ServerId": "xxxxxxx", "Id": "131262", "Container": "mkv", "MediaSources": [ { "Protocol": "File", "Id": "47be8a6cffda8891169aad087803b41e", "Path": "F:\\FakeLibrary\\Films\\Sintel (Sintel) [2010] [sDp]\\Sintel (Sintel) [2010] [sDp] - Original.mkv", "Type": "Default", "Container": "mkv", "Size": 1180090590, "Name": "Original", "IsRemote": false, "RunTimeTicks": 8880320000, "SupportsTranscoding": true, "SupportsDirectStream": true, "SupportsDirectPlay": true, "IsInfiniteStream": false, "RequiresOpening": false, "RequiresClosing": false, "RequiresLooping": false, "SupportsProbing": false, "MediaStreams": [ { "Codec": "h264", "Language": "eng", "ColorSpace": "bt709", "TimeBase": "1/1000", "CodecTimeBase": "1/48", "VideoRange": "SDR", "DisplayTitle": "1080p H264", "DisplayLanguage": "English", "NalLengthSize": "4", "IsInterlaced": false, "IsAVC": true, "BitRate": 10631063, "BitDepth": 8, "RefFrames": 1, "IsDefault": false, "IsForced": false, "Height": 818, "Width": 1920, "AverageFrameRate": 24, "RealFrameRate": 24, "Profile": "High", "Type": "Video", "AspectRatio": "960:409", "Index": 0, "IsExternal": false, "IsTextSubtitleStream": false, "SupportsExternalStream": false, "Protocol": "File", "PixelFormat": "yuv420p", "Level": 40, "IsAnamorphic": false }, { "Codec": "ac3", "Language": "eng", "TimeBase": "1/1000", "CodecTimeBase": "1/48000", "Title": "AC3 5.1 @ 640 Kbps", "DisplayTitle": "English Dolby Digital 5.1", "DisplayLanguage": "English", "IsInterlaced": false, "ChannelLayout": "5.1", "BitRate": 640000, "Channels": 6, "SampleRate": 48000, "IsDefault": false, "IsForced": false, "Type": "Audio", "Index": 1, "IsExternal": false, "IsTextSubtitleStream": false, "SupportsExternalStream": false, "Protocol": "File" }, { "Codec": "subrip", "Language": "ger", "TimeBase": "1/1000", "CodecTimeBase": "0/1", "DisplayTitle": "German (SUBRIP)", "DisplayLanguage": "German", "IsInterlaced": false, "IsDefault": false, "IsForced": false, "Type": "Subtitle", "Index": 2, "IsExternal": false, "IsTextSubtitleStream": true, "SupportsExternalStream": true, "Protocol": "File" }, { "Codec": "subrip", "Language": "eng", "TimeBase": "1/1000", "CodecTimeBase": "0/1", "DisplayTitle": "English (SUBRIP)", "DisplayLanguage": "English", "IsInterlaced": false, "IsDefault": false, "IsForced": false, "Type": "Subtitle", "Index": 3, "IsExternal": false, "IsTextSubtitleStream": true, "SupportsExternalStream": true, "Protocol": "File" }, { "Codec": "subrip", "Language": "spa", "TimeBase": "1/1000", "CodecTimeBase": "0/1", "DisplayTitle": "Spanish (SUBRIP)", "DisplayLanguage": "Spanish", "IsInterlaced": false, "IsDefault": false, "IsForced": false, "Type": "Subtitle", "Index": 4, "IsExternal": false, "IsTextSubtitleStream": true, "SupportsExternalStream": true, "Protocol": "File" }, { "Codec": "subrip", "Language": "fre", "TimeBase": "1/1000", "CodecTimeBase": "0/1", "DisplayTitle": "French (SUBRIP)", "DisplayLanguage": "French", "IsInterlaced": false, "IsDefault": false, "IsForced": false, "Type": "Subtitle", "Index": 5, "IsExternal": false, "IsTextSubtitleStream": true, "SupportsExternalStream": true, "Protocol": "File" }, { "Codec": "subrip", "Language": "ita", "TimeBase": "1/1000", "CodecTimeBase": "0/1", "DisplayTitle": "Italian (SUBRIP)", "DisplayLanguage": "Italian", "IsInterlaced": false, "IsDefault": false, "IsForced": false, "Type": "Subtitle", "Index": 6, "IsExternal": false, "IsTextSubtitleStream": true, "SupportsExternalStream": true, "Protocol": "File" }, { "Codec": "subrip", "Language": "dut", "TimeBase": "1/1000", "CodecTimeBase": "0/1", "DisplayTitle": "Dutch (SUBRIP)", "DisplayLanguage": "Dutch", "IsInterlaced": false, "IsDefault": false, "IsForced": false, "Type": "Subtitle", "Index": 7, "IsExternal": false, "IsTextSubtitleStream": true, "SupportsExternalStream": true, "Protocol": "File" }, { "Codec": "subrip", "Language": "pol", "TimeBase": "1/1000", "CodecTimeBase": "0/1", "DisplayTitle": "Polish (SUBRIP)", "DisplayLanguage": "Polish", "IsInterlaced": false, "IsDefault": false, "IsForced": false, "Type": "Subtitle", "Index": 8, "IsExternal": false, "IsTextSubtitleStream": true, "SupportsExternalStream": true, "Protocol": "File" }, { "Codec": "subrip", "Language": "por", "TimeBase": "1/1000", "CodecTimeBase": "0/1", "DisplayTitle": "Portuguese (SUBRIP)", "DisplayLanguage": "Portuguese", "IsInterlaced": false, "IsDefault": false, "IsForced": false, "Type": "Subtitle", "Index": 9, "IsExternal": false, "IsTextSubtitleStream": true, "SupportsExternalStream": true, "Protocol": "File" }, { "Codec": "subrip", "Language": "rus", "TimeBase": "1/1000", "CodecTimeBase": "0/1", "DisplayTitle": "Russian (SUBRIP)", "DisplayLanguage": "Russian", "IsInterlaced": false, "IsDefault": false, "IsForced": false, "Type": "Subtitle", "Index": 10, "IsExternal": false, "IsTextSubtitleStream": true, "SupportsExternalStream": true, "Protocol": "File" }, { "Codec": "subrip", "Language": "vie", "TimeBase": "1/1000", "CodecTimeBase": "0/1", "DisplayTitle": "Vietnamese (SUBRIP)", "DisplayLanguage": "Vietnamese", "IsInterlaced": false, "IsDefault": false, "IsForced": false, "Type": "Subtitle", "Index": 11, "IsExternal": false, "IsTextSubtitleStream": true, "SupportsExternalStream": true, "Protocol": "File" } ], "Formats": [], "Bitrate": 10631063, "RequiredHttpHeaders": {}, "ReadAtNativeFramerate": false } ], "RunTimeTicks": 8880320000, "IsFolder": false, "ParentId": "131078", "Type": "Movie", "ImageTags": { "Primary": "12a583c73064824dffa02bf5f786759e", "Logo": "04cc373d646b8b488ebf5ff5907f162b", "Thumb": "b26b14bc71610df415ca2403b6a1340c" }, "BackdropImageTags": [ "9e679a80d8030823ea3ada4990844462" ], "MediaType": "Video" }, What do you mean exactly by parentId is wrong? Link to comment Share on other sites More sharing options...
Luke 36890 Posted April 29, 2020 Share Posted April 29, 2020 And @@Luke looking at the "Fork" I found the MediaSourceCount field that work there, and that strangely Emby webinterface still request too but is not returned. Was this removed on purpose and forgotten on WebInterface or it's broken and can be fixed? (The fix is enough for me, I then know what media I need to query for details and not all blindly) Along the way we decided not to show the indicator anymore, and that eventually led to it being removed as an optimization to avoid having to count them up so frequently. Link to comment Share on other sites More sharing options...
Luke 36890 Posted April 29, 2020 Share Posted April 29, 2020 In addition to requesting the MediaSources field, try also adding AlternateMediaSources to the requested fields. Then the list should be populated with the alternates. Again this will be suboptimal, but I guess you have to do what you have to do. Link to comment Share on other sites More sharing options...
Tolriq 107 Posted April 29, 2020 Author Share Posted April 29, 2020 Too bad about MediaSourceCount that would have solved my issue. AlternateMediaSources does not return the other sources nor a new field with those What do you mean exactly by parentId is wrong? The returned parentId correspond to some kind of virtual file system hierarchy that is 100% independent of the Library concept with no clear matching between them as the folder hierarchy can be part of multiple libraries. Link to comment Share on other sites More sharing options...
Luke 36890 Posted April 29, 2020 Share Posted April 29, 2020 It won't be a new field but rather it will add them to the list. Did you make sure to request both the MediaSources and AlternateMediaSources field? Link to comment Share on other sites More sharing options...
Tolriq 107 Posted April 29, 2020 Author Share Posted April 29, 2020 (edited) Yes I used http://192.168.1.80:8096//Users/xxx/Items?Recursive=true&IncludeItemTypes=Movie&ParentId=f33343612099ee4076b63639f98682d9&ExcludeLocationTypes=Virtual&Fields=AlternateMediaSources,Genres,SortName,Overview,RunTimeTicks,ParentId,People,ProviderIds,OriginalTitle,Studios,ProductionLocations,MediaSources,DateCreated,VoteCount,RemoteTrailers,ProductionYear,CommunityRating,OfficialRating&startIndex=0&CollapseBoxSetItems=false&limit=500&UserId=xxxxx Result is { "Name": "Sintel", "OriginalTitle": "Sintel", "ServerId": "xxxx", "Id": "131261", "DateCreated": "2020-04-27T15:31:54.0000000+00:00", "Container": "mp4", "SortName": "sintel", "MediaSources": [ { "Protocol": "File", "Id": "ad834d6995788c8a7ec8c9e073a91c76", "Path": "F:\\FakeLibrary\\Films\\Sintel (Sintel) [2010] [SDp]\\Sintel (Sintel) [2010] [SDp] - Optimised.mp4", "Type": "Default", "Container": "mp4", "Size": 301056903, "Name": "Optimised", "IsRemote": false, "RunTimeTicks": 8880000000, "SupportsTranscoding": true, "SupportsDirectStream": true, "SupportsDirectPlay": true, "IsInfiniteStream": false, "RequiresOpening": false, "RequiresClosing": false, "RequiresLooping": false, "SupportsProbing": false, "MediaStreams": [ { "Codec": "h264", "CodecTag": "avc1", "Language": "eng", "TimeBase": "1/12288", "CodecTimeBase": "1/48", "VideoRange": "SDR", "DisplayTitle": "720p H264", "DisplayLanguage": "English", "NalLengthSize": "4", "IsInterlaced": false, "IsAVC": true, "BitRate": 2511007, "BitDepth": 8, "RefFrames": 1, "IsDefault": true, "IsForced": false, "Height": 546, "Width": 1280, "AverageFrameRate": 24, "RealFrameRate": 24, "Profile": "Main", "Type": "Video", "AspectRatio": "960:409", "Index": 0, "IsExternal": false, "IsTextSubtitleStream": false, "SupportsExternalStream": false, "Protocol": "File", "PixelFormat": "yuv420p", "Level": 40, "IsAnamorphic": true }, { "Codec": "aac", "CodecTag": "mp4a", "Language": "eng", "TimeBase": "1/48000", "CodecTimeBase": "1/48000", "DisplayTitle": "English AAC stereo (Default)", "DisplayLanguage": "English", "IsInterlaced": false, "ChannelLayout": "stereo", "BitRate": 195812, "Channels": 2, "SampleRate": 48000, "IsDefault": true, "IsForced": false, "Profile": "LC", "Type": "Audio", "Index": 1, "IsExternal": false, "IsTextSubtitleStream": false, "SupportsExternalStream": false, "Protocol": "File" } ], "Formats": [], "Bitrate": 2712224, "RequiredHttpHeaders": {}, "ReadAtNativeFramerate": false, "DefaultAudioStreamIndex": 1 } ], "ProductionLocations": [ "Netherlands" ], "OfficialRating": "PG", "Overview": "A wandering warrior finds an unlikely friend in the form of a young dragon. The two develop a close bond, until one day the dragon is snatched away. She then sets out on a relentless quest to reclaim her friend, finding in the end that her quest exacts a far greater price than she had ever imagined.", "Genres": [ "Animation", "Fantasy" ], "CommunityRating": 7.5, "RunTimeTicks": 8880000000, "ProductionYear": 2010, "RemoteTrailers": [ { "Url": "https://www.youtube.com/watch?v=ac7KhViaVqc", "Name": "Sintel | first official trailer US (2010) 3D open movie project" } ], "ProviderIds": { "Tmdb": "45745", "Imdb": "tt1727587" }, "IsFolder": false, "ParentId": "131078", "Type": "Movie", "People": [ { "Name": "Halina Reijn", "Id": "21437", "Role": "Sintel (voice)", "Type": "Actor", "PrimaryImageTag": "2c1094f6666df52b6bc7d8eece9e0dc7" }, { "Name": "Thom Hoffman", "Id": "21432", "Role": "Shaman (voice)", "Type": "Actor", "PrimaryImageTag": "e6d4383509adb82f1ce29c10e6ab0ca8" }, { "Name": "Colin Levy", "Id": "21424", "Role": "Director", "Type": "Director", "PrimaryImageTag": "067ed4d99af72d5d619d87526ba7bb68" } ], "Studios": [ { "Name": "Blender Foundation", "Id": 21401 } ], "GenreItems": [ { "Name": "Animation", "Id": 64817 }, { "Name": "Fantasy", "Id": 64828 } ], "UserData": { "PlaybackPositionTicks": 0, "PlayCount": 0, "IsFavorite": true, "Played": false }, "ImageTags": { "Primary": "245aa8af2a55988b4a3a620005d29be3", "Logo": "5f45794ad8f727e04232f28236229d5e", "Thumb": "a30724cf5860d8b7cb59ea6536e80eff" }, "BackdropImageTags": [ "597297fbf77362f9d021752e3a0f2594" ], "MediaType": "Video" } While result of http://192.168.1.80:8096//Users/xxx/Items/131261 is { "Name": "Sintel", "OriginalTitle": "Sintel", "ServerId": "xxx", "Id": "131261", "Etag": "bacd9f689f65d4e642d13ac806315de6", "DateCreated": "2020-04-27T15:31:54.0000000+00:00", "CanDelete": true, "CanDownload": true, "PresentationUniqueKey": "ec168942fb36d2d6bc30348720e5dffc", "SupportsSync": true, "Container": "mp4", "SortName": "sintel", "PremiereDate": "2010-09-29T22:00:00.0000000+00:00", "ExternalUrls": [ { "Name": "IMDb", "Url": "https://www.imdb.com/title/tt1727587" }, { "Name": "TheMovieDb", "Url": "https://www.themoviedb.org/movie/45745" }, { "Name": "Trakt", "Url": "https://trakt.tv/movies/tt1727587" } ], "MediaSources": [ { "Protocol": "File", "Id": "47be8a6cffda8891169aad087803b41e", "Path": "F:\\FakeLibrary\\Films\\Sintel (Sintel) [2010] [SDp]\\Sintel (Sintel) [2010] [SDp] - Original.mkv", "Type": "Grouping", "Container": "mkv", "Size": 1180090590, "Name": "Original", "IsRemote": false, "RunTimeTicks": 8880320000, "SupportsTranscoding": true, "SupportsDirectStream": true, "SupportsDirectPlay": true, "IsInfiniteStream": false, "RequiresOpening": false, "RequiresClosing": false, "RequiresLooping": false, "SupportsProbing": false, "MediaStreams": [ { "Codec": "h264", "Language": "eng", "ColorSpace": "bt709", "TimeBase": "1/1000", "CodecTimeBase": "1/48", "VideoRange": "SDR", "DisplayTitle": "1080p H264", "DisplayLanguage": "English", "NalLengthSize": "4", "IsInterlaced": false, "IsAVC": true, "BitRate": 10631063, "BitDepth": 8, "RefFrames": 1, "IsDefault": false, "IsForced": false, "Height": 818, "Width": 1920, "AverageFrameRate": 24, "RealFrameRate": 24, "Profile": "High", "Type": "Video", "AspectRatio": "960:409", "Index": 0, "IsExternal": false, "IsTextSubtitleStream": false, "SupportsExternalStream": false, "Protocol": "File", "PixelFormat": "yuv420p", "Level": 40, "IsAnamorphic": false }, { "Codec": "ac3", "Language": "eng", "TimeBase": "1/1000", "CodecTimeBase": "1/48000", "Title": "AC3 5.1 @ 640 Kbps", "DisplayTitle": "English Dolby Digital 5.1", "DisplayLanguage": "English", "IsInterlaced": false, "ChannelLayout": "5.1", "BitRate": 640000, "Channels": 6, "SampleRate": 48000, "IsDefault": false, "IsForced": false, "Type": "Audio", "Index": 1, "IsExternal": false, "IsTextSubtitleStream": false, "SupportsExternalStream": false, "Protocol": "File" }, { "Codec": "subrip", "Language": "ger", "TimeBase": "1/1000", "CodecTimeBase": "0/1", "DisplayTitle": "German (SUBRIP)", "DisplayLanguage": "German", "IsInterlaced": false, "IsDefault": false, "IsForced": false, "Type": "Subtitle", "Index": 2, "IsExternal": false, "IsTextSubtitleStream": true, "SupportsExternalStream": true, "Protocol": "File" }, { "Codec": "subrip", "Language": "eng", "TimeBase": "1/1000", "CodecTimeBase": "0/1", "DisplayTitle": "English (SUBRIP)", "DisplayLanguage": "English", "IsInterlaced": false, "IsDefault": false, "IsForced": false, "Type": "Subtitle", "Index": 3, "IsExternal": false, "IsTextSubtitleStream": true, "SupportsExternalStream": true, "Protocol": "File" }, { "Codec": "subrip", "Language": "spa", "TimeBase": "1/1000", "CodecTimeBase": "0/1", "DisplayTitle": "Spanish (SUBRIP)", "DisplayLanguage": "Spanish", "IsInterlaced": false, "IsDefault": false, "IsForced": false, "Type": "Subtitle", "Index": 4, "IsExternal": false, "IsTextSubtitleStream": true, "SupportsExternalStream": true, "Protocol": "File" }, { "Codec": "subrip", "Language": "fre", "TimeBase": "1/1000", "CodecTimeBase": "0/1", "DisplayTitle": "French (SUBRIP)", "DisplayLanguage": "French", "IsInterlaced": false, "IsDefault": false, "IsForced": false, "Type": "Subtitle", "Index": 5, "IsExternal": false, "IsTextSubtitleStream": true, "SupportsExternalStream": true, "Protocol": "File" }, { "Codec": "subrip", "Language": "ita", "TimeBase": "1/1000", "CodecTimeBase": "0/1", "DisplayTitle": "Italian (SUBRIP)", "DisplayLanguage": "Italian", "IsInterlaced": false, "IsDefault": false, "IsForced": false, "Type": "Subtitle", "Index": 6, "IsExternal": false, "IsTextSubtitleStream": true, "SupportsExternalStream": true, "Protocol": "File" }, { "Codec": "subrip", "Language": "dut", "TimeBase": "1/1000", "CodecTimeBase": "0/1", "DisplayTitle": "Dutch (SUBRIP)", "DisplayLanguage": "Dutch", "IsInterlaced": false, "IsDefault": false, "IsForced": false, "Type": "Subtitle", "Index": 7, "IsExternal": false, "IsTextSubtitleStream": true, "SupportsExternalStream": true, "Protocol": "File" }, { "Codec": "subrip", "Language": "pol", "TimeBase": "1/1000", "CodecTimeBase": "0/1", "DisplayTitle": "Polish (SUBRIP)", "DisplayLanguage": "Polish", "IsInterlaced": false, "IsDefault": false, "IsForced": false, "Type": "Subtitle", "Index": 8, "IsExternal": false, "IsTextSubtitleStream": true, "SupportsExternalStream": true, "Protocol": "File" }, { "Codec": "subrip", "Language": "por", "TimeBase": "1/1000", "CodecTimeBase": "0/1", "DisplayTitle": "Portuguese (SUBRIP)", "DisplayLanguage": "Portuguese", "IsInterlaced": false, "IsDefault": false, "IsForced": false, "Type": "Subtitle", "Index": 9, "IsExternal": false, "IsTextSubtitleStream": true, "SupportsExternalStream": true, "Protocol": "File" }, { "Codec": "subrip", "Language": "rus", "TimeBase": "1/1000", "CodecTimeBase": "0/1", "DisplayTitle": "Russian (SUBRIP)", "DisplayLanguage": "Russian", "IsInterlaced": false, "IsDefault": false, "IsForced": false, "Type": "Subtitle", "Index": 10, "IsExternal": false, "IsTextSubtitleStream": true, "SupportsExternalStream": true, "Protocol": "File" }, { "Codec": "subrip", "Language": "vie", "TimeBase": "1/1000", "CodecTimeBase": "0/1", "DisplayTitle": "Vietnamese (SUBRIP)", "DisplayLanguage": "Vietnamese", "IsInterlaced": false, "IsDefault": false, "IsForced": false, "Type": "Subtitle", "Index": 11, "IsExternal": false, "IsTextSubtitleStream": true, "SupportsExternalStream": true, "Protocol": "File" } ], "Formats": [], "Bitrate": 10631063, "RequiredHttpHeaders": {}, "ReadAtNativeFramerate": false, "DefaultAudioStreamIndex": 1 }, { "Protocol": "File", "Id": "ad834d6995788c8a7ec8c9e073a91c76", "Path": "F:\\FakeLibrary\\Films\\Sintel (Sintel) [2010] [SDp]\\Sintel (Sintel) [2010] [SDp] - Optimised.mp4", "Type": "Default", "Container": "mp4", "Size": 301056903, "Name": "Optimised", "IsRemote": false, "RunTimeTicks": 8880000000, "SupportsTranscoding": true, "SupportsDirectStream": true, "SupportsDirectPlay": true, "IsInfiniteStream": false, "RequiresOpening": false, "RequiresClosing": false, "RequiresLooping": false, "SupportsProbing": false, "MediaStreams": [ { "Codec": "h264", "CodecTag": "avc1", "Language": "eng", "TimeBase": "1/12288", "CodecTimeBase": "1/48", "VideoRange": "SDR", "DisplayTitle": "720p H264", "DisplayLanguage": "English", "NalLengthSize": "4", "IsInterlaced": false, "IsAVC": true, "BitRate": 2511007, "BitDepth": 8, "RefFrames": 1, "IsDefault": true, "IsForced": false, "Height": 546, "Width": 1280, "AverageFrameRate": 24, "RealFrameRate": 24, "Profile": "Main", "Type": "Video", "AspectRatio": "960:409", "Index": 0, "IsExternal": false, "IsTextSubtitleStream": false, "SupportsExternalStream": false, "Protocol": "File", "PixelFormat": "yuv420p", "Level": 40, "IsAnamorphic": true }, { "Codec": "aac", "CodecTag": "mp4a", "Language": "eng", "TimeBase": "1/48000", "CodecTimeBase": "1/48000", "DisplayTitle": "English AAC stereo (Default)", "DisplayLanguage": "English", "IsInterlaced": false, "ChannelLayout": "stereo", "BitRate": 195812, "Channels": 2, "SampleRate": 48000, "IsDefault": true, "IsForced": false, "Profile": "LC", "Type": "Audio", "Index": 1, "IsExternal": false, "IsTextSubtitleStream": false, "SupportsExternalStream": false, "Protocol": "File" } ], "Formats": [], "Bitrate": 2712224, "RequiredHttpHeaders": {}, "ReadAtNativeFramerate": false, "DefaultAudioStreamIndex": 1 } ], "ProductionLocations": [ "Netherlands" ], "Path": "F:\\FakeLibrary\\Films\\Sintel (Sintel) [2010] [SDp]\\Sintel (Sintel) [2010] [SDp] - Optimised.mp4", "OfficialRating": "PG", "Overview": "A wandering warrior finds an unlikely friend in the form of a young dragon. The two develop a close bond, until one day the dragon is snatched away. She then sets out on a relentless quest to reclaim her friend, finding in the end that her quest exacts a far greater price than she had ever imagined.", "Taglines": [], "Genres": [ "Animation", "Fantasy" ], "CommunityRating": 7.5, "RunTimeTicks": 8880000000, "PlayAccess": "Full", "ProductionYear": 2010, "RemoteTrailers": [ { "Url": "https://www.youtube.com/watch?v=ac7KhViaVqc", "Name": "Sintel | first official trailer US (2010) 3D open movie project" } ], "ProviderIds": { "Tmdb": "45745", "Imdb": "tt1727587" }, "IsFolder": false, "ParentId": "131078", "Type": "Movie", "People": [ { "Name": "Halina Reijn", "Id": "21437", "Role": "Sintel (voice)", "Type": "Actor", "PrimaryImageTag": "2c1094f6666df52b6bc7d8eece9e0dc7" }, { "Name": "Thom Hoffman", "Id": "21432", "Role": "Shaman (voice)", "Type": "Actor", "PrimaryImageTag": "e6d4383509adb82f1ce29c10e6ab0ca8" }, { "Name": "Colin Levy", "Id": "21424", "Role": "Director", "Type": "Director", "PrimaryImageTag": "067ed4d99af72d5d619d87526ba7bb68" } ], "Studios": [ { "Name": "Blender Foundation", "Id": 21401 } ], "GenreItems": [ { "Name": "Animation", "Id": 64817 }, { "Name": "Fantasy", "Id": 64828 } ], "TagItems": [], "UserData": { "PlaybackPositionTicks": 0, "PlayCount": 0, "IsFavorite": true, "Played": false }, "DisplayPreferencesId": "dbf7709c41faaa746463d67978eb863d", "Tags": [], "PrimaryImageAspectRatio": 0.6666666666666666, "MediaStreams": [ { "Codec": "h264", "CodecTag": "avc1", "Language": "eng", "TimeBase": "1/12288", "CodecTimeBase": "1/48", "VideoRange": "SDR", "DisplayTitle": "720p H264", "DisplayLanguage": "English", "NalLengthSize": "4", "IsInterlaced": false, "IsAVC": true, "BitRate": 2511007, "BitDepth": 8, "RefFrames": 1, "IsDefault": true, "IsForced": false, "Height": 546, "Width": 1280, "AverageFrameRate": 24, "RealFrameRate": 24, "Profile": "Main", "Type": "Video", "AspectRatio": "960:409", "Index": 0, "IsExternal": false, "IsTextSubtitleStream": false, "SupportsExternalStream": false, "Protocol": "File", "PixelFormat": "yuv420p", "Level": 40, "IsAnamorphic": true }, { "Codec": "aac", "CodecTag": "mp4a", "Language": "eng", "TimeBase": "1/48000", "CodecTimeBase": "1/48000", "DisplayTitle": "English AAC stereo (Default)", "DisplayLanguage": "English", "IsInterlaced": false, "ChannelLayout": "stereo", "BitRate": 195812, "Channels": 2, "SampleRate": 48000, "IsDefault": true, "IsForced": false, "Profile": "LC", "Type": "Audio", "Index": 1, "IsExternal": false, "IsTextSubtitleStream": false, "SupportsExternalStream": false, "Protocol": "File" } ], "ImageTags": { "Primary": "245aa8af2a55988b4a3a620005d29be3", "Logo": "5f45794ad8f727e04232f28236229d5e", "Thumb": "a30724cf5860d8b7cb59ea6536e80eff" }, "BackdropImageTags": [ "597297fbf77362f9d021752e3a0f2594" ], "Chapters": [ { "StartPositionTicks": 0, "Name": "Chapter 1" }, { "StartPositionTicks": 3000000000, "Name": "Chapter 2" }, { "StartPositionTicks": 6000000000, "Name": "Chapter 3" } ], "MediaType": "Video", "LockedFields": [], "LockData": false, "Width": 1280, "Height": 546 } Properly have both sources Edited April 29, 2020 by Tolriq Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now