1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- package main
- import (
- "net/http"
- "net/url"
- "imuslab.com/arozos/mod/apt"
- "imuslab.com/arozos/mod/media/mediaserver"
- )
- /*
- Media Server
- This function serve large file objects like video and audio file via asynchronize go routine :)
- Example usage:
- /media/?file=user:/Desktop/test/02.Orchestra- エミール (Addendum version).mp3
- /media/?file=user:/Desktop/test/02.Orchestra- エミール (Addendum version).mp3&download=true
- This will serve / download the file located at files/users/{username}/Desktop/test/02.Orchestra- エミール (Addendum version).mp3
- PLEASE ALWAYS USE URLENCODE IN THE LINK PASSED INTO THE /media ENDPOINT
- */
- func mediaServer_init() {
- //Create a media server
- mediaServer = mediaserver.NewMediaServer(&mediaserver.Options{
- BufferPoolSize: *bufferPoolSize,
- BufferFileMaxSize: *bufferFileMaxSize,
- EnableFileBuffering: *enable_buffering,
- TmpDirectory: *tmp_directory,
- Authagent: authAgent,
- UserHandler: userHandler,
- Logger: systemWideLogger,
- })
- //Setup the virtual path resolver
- mediaServer.SetVirtualPathResolver(GetFSHandlerSubpathFromVpath)
- //Register media serving endpoints
- http.HandleFunc("/media/", mediaServer.ServerMedia)
- http.HandleFunc("/media/download/", mediaServer.ServerMedia) //alias for &download=xxx
- http.HandleFunc("/media/getMime/", mediaServer.ServeMediaMime)
- //Check if ffmpeg exists
- ffmpegInstalled, _ := apt.PackageExists("ffmpeg")
- if ffmpegInstalled {
- //ffmpeg installed. allow transcode
- http.HandleFunc("/media/transcode/", mediaServer.ServeVideoWithTranscode)
- } else {
- //ffmpeg not installed. Redirect transcode endpoint back to /media/
- http.HandleFunc("/media/transcode/", func(w http.ResponseWriter, r *http.Request) {
- // Extract the original query parameters
- originalURL := r.URL
- queryParams := originalURL.RawQuery
- // Define the new base URL for redirection
- newBaseURL := "/media/"
- // Parse the new base URL
- newURL, err := url.Parse(newBaseURL)
- if err != nil {
- http.Error(w, "Internal Server Error", http.StatusInternalServerError)
- return
- }
- // Append the original query parameters to the new URL
- newURL.RawQuery = queryParams
- // Perform the redirection
- http.Redirect(w, r, newURL.String(), http.StatusFound)
- })
- }
- }
|