Go Music Player App

minio_GO1

本示例将会手把手(限女生)指导你如何用Golang构建一个简单的音乐播放器。在这个app中,我们会向你展示如何从Minio Server上获取你的音频文件。你可以通过这里获取完整的代码,代码是以Apache 2.0 License发布的。

1. 前提条件

  • 这里下载并安装mc。
  • 这里下载并安装Minio Server。
  • 一个Golang的开发环境。如果没有的话,请参考如何安装Golang

    2. 依赖

  • 你的playlist存储桶中需要有音频(mp3)文件。

    3. 安装media-player

参考下面示例,使用“go get”下载示例代码,“go get”会安装所需要的依赖。

  1. go get -u github.com/minio/minio-go-media-player/media-player

现在media-player已经按耐不住,想唱首歌给你听了。

4. 运行media-player

环境变量bash

设置环境变量Access keySecret key

  1. export AWS_ACCESS_KEY=Q3AM3UQ867SPQQA43P2F
  2. export AWS_SECRET_KEY=zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG

环境变量tcsh

  1. setenv AWS_ACCESS_KEY Q3AM3UQ867SPQQA43P2F
  2. setenv AWS_SECRET_KEY zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG

环境变量Windows command prompt

  1. set AWS_ACCESS_KEY=Q3AM3UQ867SPQQA43P2F
  2. set AWS_SECRET_KEY=zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG

设置存储桶

  • 我们已经创建了一个公开的Minio Server(https://play.minio.io:9000) 供大家进行开发和测试。调用mc mb命令,在play.minio.io:9000上创建一个名叫media-assets的存储桶。

    1. mc mb play/media-assets
  • 将你心爱的音乐上传到这个存储桶中。我们可以用mc来将本地的mp3文件上传到play上的存储桶中。

    1. mc cp ~/Music/*.mp3 play/media-assets

注意 : 我们已经在play.minio.io上创建了media-assets这个存储桶,并将本示例用到的资源上传到这个存储桶了。

运行音乐播放器

现在已经万事俱备。使用-b命令行参数指定音乐文件所在的存储桶。

  1. cd $GOPATH/bin
  2. ./media-player -b media-assets
  3. 2016/04/02 17:24:54 Starting media player, please visit your browser at http://localhost:8080

现在如果你访问http://localhost:8080 ,你应该可以看到这个示例程序。

可选参数

  • Endpoint默认指向的是'https://play.minio.io:9000' ,想换一个的话可以使用-e。

    1. cd $GOPATH/bin
    2. ./media-player -b <bucket-name> -e https://s3.amazonaws.com
    3. 2016/04/02 17:24:54 Starting media player, please visit your browser at http://localhost:8080
  • 如果想指定本地运行的Minio Server。

    1. media-player -b <bucket-name> -e http://localhost:9000

5. 创建播放列表

这个播放器第一件要做的事情就是通过调用ListObjects方法,获取指定的存储桶中的音频资源,并创建一个播放列表。这些对象将会以JSON格式返回,做为音乐播放器的播放列表的数据。

下面的流程图和示例代码提供了如何实现的概述。

minio_GO2

  1. for objectInfo := range api.minioClient.ListObjects(*bucketName, "", isRecursive, doneCh) {
  2. if objectInfo.Err != nil {
  3. http.Error(w, objectInfo.Err.Error(), http.StatusInternalServerError)
  4. return
  5. }
  6. objectName := objectInfo.Key // object name.
  7. playListEntry := mediaPlayList{
  8. Key: objectName,
  9. }
  10. playListEntries = append(playListEntries, playListEntry)
  11. }
  12. playListEntriesJSON, err := json.Marshal(playListEntries)
  13. if err != nil {
  14. http.Error(w, err.Error(), http.StatusInternalServerError)
  15. return
  16. }
  17. // Successfully wrote play list in json.
  18. w.Write(playListEntriesJSON)

6. Streaming Media

当你点击浏览器上的播放器时,播放器调用PresignedGetObject ,生成了一个安全的URL。

播放器使用PresignedGetObject生成的安全URL从服务器直接获取流。 以下流程图和示例代码提供了如何实现的概述。

minio_GO3

  1. // GetPresignedURLHandler - generates presigned access URL for an object.
  2. func (api mediaHandlers) GetPresignedURLHandler(w http.ResponseWriter, r *http.Request) {
  3. // The object for which the presigned URL has to be generated is sent as a query
  4. // parameter from the client.
  5. objectName := r.URL.Query().Get("objName")
  6. if objectName == "" {
  7. http.Error(w, "No object name set, invalid request.", http.StatusBadRequest)
  8. return
  9. }
  10. presignedURL, err := api.storageClient.PresignedGetObject(*bucketName, objectName, 1000*time.Second, nil)
  11. if err != nil {
  12. http.Error(w, err.Error(), http.StatusInternalServerError)
  13. return
  14. }
  15. w.Write([]byte(presignedURL))
  16. }

7. 了解更多

原文: https://docs.minio.io/cn/go-music-player-app.html