• Go Music Player App
    • 1. 前提条件
    • 2. 依赖
    • 3. 安装media-player
    • 4. 运行media-player
      • 环境变量bash
      • 环境变量tcsh
      • 环境变量Windows command prompt
    • 设置存储桶
    • 运行音乐播放器
    • 可选参数
  • 5. 创建播放列表
  • 6. Streaming Media
  • 7. 了解更多

    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. 了解更多

    • Using minio-go client SDK with Minio Server
    • Minio Golang Client SDK API Reference

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