mediaServer.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package main
  2. import (
  3. "net/http"
  4. "net/url"
  5. "imuslab.com/arozos/mod/apt"
  6. "imuslab.com/arozos/mod/media/mediaserver"
  7. )
  8. /*
  9. Media Server
  10. This function serve large file objects like video and audio file via asynchronize go routine :)
  11. Example usage:
  12. /media/?file=user:/Desktop/test/02.Orchestra- エミール (Addendum version).mp3
  13. /media/?file=user:/Desktop/test/02.Orchestra- エミール (Addendum version).mp3&download=true
  14. This will serve / download the file located at files/users/{username}/Desktop/test/02.Orchestra- エミール (Addendum version).mp3
  15. PLEASE ALWAYS USE URLENCODE IN THE LINK PASSED INTO THE /media ENDPOINT
  16. */
  17. func mediaServer_init() {
  18. //Create a media server
  19. mediaServer = mediaserver.NewMediaServer(&mediaserver.Options{
  20. BufferPoolSize: *bufferPoolSize,
  21. BufferFileMaxSize: *bufferFileMaxSize,
  22. EnableFileBuffering: *enable_buffering,
  23. TmpDirectory: *tmp_directory,
  24. Authagent: authAgent,
  25. UserHandler: userHandler,
  26. Logger: systemWideLogger,
  27. })
  28. //Setup the virtual path resolver
  29. mediaServer.SetVirtualPathResolver(GetFSHandlerSubpathFromVpath)
  30. //Register media serving endpoints
  31. http.HandleFunc("/media/", mediaServer.ServerMedia)
  32. http.HandleFunc("/media/download/", mediaServer.ServerMedia) //alias for &download=xxx
  33. http.HandleFunc("/media/getMime/", mediaServer.ServeMediaMime)
  34. //Check if ffmpeg exists
  35. ffmpegInstalled, _ := apt.PackageExists("ffmpeg")
  36. if ffmpegInstalled {
  37. //ffmpeg installed. allow transcode
  38. http.HandleFunc("/media/transcode/", mediaServer.ServeVideoWithTranscode)
  39. } else {
  40. //ffmpeg not installed. Redirect transcode endpoint back to /media/
  41. http.HandleFunc("/media/transcode/", func(w http.ResponseWriter, r *http.Request) {
  42. // Extract the original query parameters
  43. originalURL := r.URL
  44. queryParams := originalURL.RawQuery
  45. // Define the new base URL for redirection
  46. newBaseURL := "/media/"
  47. // Parse the new base URL
  48. newURL, err := url.Parse(newBaseURL)
  49. if err != nil {
  50. http.Error(w, "Internal Server Error", http.StatusInternalServerError)
  51. return
  52. }
  53. // Append the original query parameters to the new URL
  54. newURL.RawQuery = queryParams
  55. // Perform the redirection
  56. http.Redirect(w, r, newURL.String(), http.StatusFound)
  57. })
  58. }
  59. }