Ondemand hls/mpeg-dash streaming with FFmpeg
Budget: $30 – $250 USD
I'm looking for someone to build a real-time hls/mpeg-dash transcoding API, using FFmpeg. For example the streaming capabilities of https://plex.tv and https://jellyfin.org
The client applications (web/mobile) allow selecting a video that is stored on the server, the client tells the server what audio/video formats it supports and receives a hls/mpd playlist to stream the video. As the client processes the playlist it requests the individual audio/video chunks from the server for playback. The server will be transcoding in real time while serving the individual chunks, if the user seeks (a new chunk is requested that has yet to be transcoded) the server will need to restart the transcoding from the new position to resume serving chunks. The server portions of this feature are what I need built.
I have an existing Kotlin API (https://ktor.io) that this will be built into and basic web & android clients. Jaffree (https://github.com/kokorin/Jaffree) is available to run FFmpeg from kotlin code and consume the output. The generated streams should be playable in https://developer-tools.jwplayer.com/stream-tester
The full requirements are:
- Implement HTTP endpoint for creating a transcoding session (hls/mpd playlist files) that takes details from the client (web/mobile apps) to determine the output's required audio/video format.
- Implement HTTP endpoint to serve video and audio chunks generated for the stream.
- Implement transcoding session management to start/stop transcoding and allow seeking to a specific time in the stream (if seeking outside of the already transcoded video, the stream should restart from the new position)
- Implement pass through streaming: If the client already supports the files audio/video format, then only generate a stream but do not transcode the content
The client applications (web/mobile) allow selecting a video that is stored on the server, the client tells the server what audio/video formats it supports and receives a hls/mpd playlist to stream the video. As the client processes the playlist it requests the individual audio/video chunks from the server for playback. The server will be transcoding in real time while serving the individual chunks, if the user seeks (a new chunk is requested that has yet to be transcoded) the server will need to restart the transcoding from the new position to resume serving chunks. The server portions of this feature are what I need built.
I have an existing Kotlin API (https://ktor.io) that this will be built into and basic web & android clients. Jaffree (https://github.com/kokorin/Jaffree) is available to run FFmpeg from kotlin code and consume the output. The generated streams should be playable in https://developer-tools.jwplayer.com/stream-tester
The full requirements are:
- Implement HTTP endpoint for creating a transcoding session (hls/mpd playlist files) that takes details from the client (web/mobile apps) to determine the output's required audio/video format.
- Implement HTTP endpoint to serve video and audio chunks generated for the stream.
- Implement transcoding session management to start/stop transcoding and allow seeking to a specific time in the stream (if seeking outside of the already transcoded video, the stream should restart from the new position)
- Implement pass through streaming: If the client already supports the files audio/video format, then only generate a stream but do not transcode the content