Developing a personal/private media player

Hi, hew here to the developer forum. For a while I was trying to use a Plex Media server running on TerraMaster, to save time I won’t go into the reasons I want to replace Plex for my personal media, but I am looking to replace it. Although I was able to us Roku’s My Media and it was able to stream the videos from my TerraMaster Plex server I wasn’t able to pause, or rewind, or both, I can’t remember for sure, but I would also prefer my own interface that works with the Roku remote. I would like to create my own Roku app that can serve up m own videos, images, music on an interface of my design. I’m currently a php developer and although I’m no expert with htmls/css/javascript I can usually get by. I would like some advice and feedback on getting started and what I’m looking at. How big of a project this will be. Thanks.

That’s a pretty big project! I did this exact thing for a while, but it got to be too much. Scraping media metadata and integrating with imdb/tmdb/tvdb is a pain. Writing a Roku app from scratch and integrating with your custom php backend is also a decent lift.

I would recommend giving Jellyfin a try. Their entire codebase is open source. So it’s easy to submit big fixes or new features. They have a pretty decent server plugin system. And if you really need to deviate outside of that, you could just fork it and publish your own versions of the server or Roku app.

I agree with @TwitchBronBron - that’s a huge project, especially for your first one. Keep in mind that Roku devices can only play back a limited number of formats and there’s no way to add any. If you couldn’t pause or rewind or whatever, I assume your Plex server was transcoding your media into something Roku could use. The Plex channel/app on Roku may work better for you than whatever you were using.

renojim

Thanks, I was using the Plex app on my Roku and connecting to my Plex server on my TerraMaster. Both the server and the app say that they’re up to date but the back also will no longer connect to the server on the TerraMaster claiming that the server is out of date. But I wanted to ditch Plex for several other reasons as well.

TwitchBronBron

Thanks. So will the jellyfin interface/GUI be visible from my Roku TV and I’ll be able to use the Roku remote for navigation?

That is correct. Think of Jellyfin as an alternative to Plex. You run the Jellyfin server app on the computer that holds your media. Then you install the Jellyfin Roku app to consume the media on your Roku, using your Roku remote.

But unlike Plex, it’s all open source.

I wrote an app to that does this and can attest it is a huge, huge project. After months of work, my app is fully functional and has all the of the deep linking requirements in order to get it published; however, after a month of no response from the Roku team my app is still stuck waiting to get certification issues resolved. Does anyone know how to pass deep linking certification for an app like Jellyfin or Plex where the user has to input their server in order to get to their content? The deep linking tests seem to assume your content is accessible in a public facing website, which even then I’m sure would have an authentication process the deep linking test is unable to satisfy. Has anyone successfully published an app and gotten past this step in certification?

I’d probably look for a way around it like hosting a video somewhere and using it for the deep linking test.

I was able to figure it out doing just that yesterday and everything passed certification. I set the app to default to a separate, static content feed hosted on GitHub. It’s not ideal to have that hard-coded into the app just to fake out a deep linking test, but at least it worked. Thank you for the advice. Surely there’s a better way around this requirement.

As you’ve noticed, “Partner Success” is practically useless and I’ve given up on them. I’ve found it’s just easier to find workarounds for Roku annoyances. On rare occurrences, someone from Roku will actually answer a question here, but it’s almost as if they’re instructed not to participate here. Hence, we have to use solutions that aren’t ideal.

If your app is using any of the backend within the Roku OS that they also use for Roku Media Player, there’s a bug that hasn’t been addressed for years in that any TS file (M2TS/TS) will do exactly what you mentioned, no trick play features. I’ve been trying to get it addressed for years with no success.

If anyone is interested in collaborating, here is the project I’ve gotten published. Everything works as intended, but it lacks some features like authentication and remote access that Plex and Jellyfin both have. My goal is to keep it minimal, but those two features would be nice to have so users could access their content securely when away from home. I am certain there are several improvements to be made. I was just happy to get it all working.

What are you using for the media source? DLNA server, network share, or something else? I would be interested in something that works with DLNA.

It’s a nodejs express server using http. The database view creates the content feed which contains urls to each media file. The nodejs app calls the database query, modifies the result for subtitles, and delivers it to the Roku app. Then the Roku app calls the url for a specific media file and the nodejs server serves it from the local file system.

I’m not very familiar with DLNA servers. I set up minidlna to see how the built in Roku media player app worked but my from what I remember it was listing files based on embedded metadata within the file. I didn’t dig into how series, seasons, and episodes would work. A full content feed seemed like the better approach for me.

At least with my DLNA server (Serviio) it gets the metadata from the server’s database, which has been scraped from the Internet using themoviedb.org. How exactly DLNA connects to the player, I’ve never gotten that far into the weeds. I did write the profiles Serviio uses for Roku devices (and a couple of other brands) to transcode when necessary. That’s probably the biggest advantage of DLNA, the ability to transcode only what is necessary. Of course, Plex, Emby and Jellyfin all do that as well, but using a proprietary method. DLNA is public.

You raise an interesting point. My app’s backend server is designed specifically for the Roku app to consume. You wouldn’t be able to use the backend output directly with an Android app for example. All this was designed to supply a content feed from Roku’s documentation. No idea if other OS apps would require a content feed. A full fledged media server that recognizes devices and transcodes on the fly sounds more far more robust than anything I was willing to take on. All of my media is either mp4 or mkv. Both of which are playable directly through the built in video player on Roku.

Yeah, my media server is mostly DVD/BD rips, but also some OTA recorded movies/ TV episodes. The rips are almost all in either in MKV or M2TS containers, with many codecs that aren’t supported by Roku (mostly the lossless audio codecs but at least one video codec: VC-1), so transcoding is required. The OTA recordings are almost all TS containers and mpeg2 video and AC3 audio, all Roku supported. But Roku has a serious bug with their current media player with TS containers, in that they can’t be paused, FF or rewound. Since Plex and the other media players can get around that problem, hopefully yours can as well.