Golang 構築ビデオ: 入門から実践的な戦闘まで
インターネットと情報技術の急速な発展に伴い、ビデオは私たちの日常生活においてますます重要な役割を果たしています。こうした背景から、ビデオプラットフォームやアプリケーションの需要も高まっています。 Golang は急速に人気を博している言語であり、その高効率、強力な同時実行機能、学習しやすい構文という利点がますます多くの開発者に認識されています。この記事では、Golang を使用して簡単なビデオ アプリケーションを構築する方法を紹介し、実際のアプリケーションの例とコードを示します。
1. 環境セットアップ
Golang プロジェクトを開始する前に、Golang をインストールする必要があります。この例では、Golang バージョン 1.16 を使用します。公式 Web サイトからインストール パッケージをダウンロードし、インストール ウィザードに従ってインストールすることも、Linux ディストリビューションのデフォルトのパッケージ マネージャーを使用してインストールすることもできます。
インストールが完了したら、ビデオ アプリケーションを開発するためのいくつかのツールと依存関係もインストールする必要があります。必要なツールと依存関係は次のとおりです。
これらのツールをインストールした後、ターミナルで次のコマンドを使用して確認する必要があります:
go version ffmpeg -version gst-launch-1.0 --version
これらのコマンドは、Golang、FFmpeg、GStreamer のバージョン情報をそれぞれ表示します。
2. 概要
この記事の残りの部分では、Golang と FFmpeg を使用して、非常に基本的なビデオ アプリケーションを構築します。 GStreamer を使用してオーディオ ストリームを処理し、アプリケーションに組み込みます。この例では、ユーザーがアップロードしたビデオ ファイルの処理と変換に使用できる単純な Web サーバーを作成します。
この Web サーバーを構築するには、Golang の公式 Web フレームワークである Go Gin を使用します。次に、このアプリケーションの構築方法を詳しく説明します。
3. コードを記述します
まず、必要な依存関係をインポートします。これには Go Gin と FFmpeg が含まれており、次のコマンドでインストールできます:
go get -u github.com/gin-gonic/gin go get -u github.com/gabriel-vasile/mimetype go get -u github.com/jinzhu/gorm go get -u github.com/jinzhu/gorm/dialects/sqlite
次に、必要なパッケージをインポートし、「main.go」というファイルを作成します。ファイルには次のコードが含まれている必要があります:
package main import ( "github.com/gin-gonic/gin" ) func main() { router := gin.Default() router.POST("/upload", upload) router.Run(":8080") } func upload(c *gin.Context) { file, header, err := c.Request.FormFile("file") if err != nil { c.String(400, "Bad Request") return } defer file.Close() // Save the file to disk fileName := header.Filename out, err := os.Create("/tmp/" + fileName) if err != nil { c.String(500, "Internal Server Error") return } defer out.Close() _, err = io.Copy(out, file) if err != nil { c.String(500, "Internal Server Error") return } c.String(200, "File uploaded successfully") }
このコードは、POST エンドポイントを含む Go Jin サーバーを作成します。 POST/アップロード エンドポイントを使用すると、ユーザーはビデオ ファイルをアップロードできます。
アップロード ハンドラーでは、c.Request.FormFile("file") を通じてアップロードされたファイルを取得し、それをディスク上の一時ディレクトリに保存します。ファイルを保存した後、アップロード成功のメッセージをクライアントに送信します。
次に、アップロードされたビデオを処理し、FFmpeg を使用して適切な形式に変換するコードを記述する必要があります。次のコマンドを使用して FFmpeg をインストールできます:
sudo apt-get install ffmpeg
次に、次のコードをアプリケーションに追加します:
func upload(c *gin.Context) { file, header, err := c.Request.FormFile("file") if err != nil { c.String(400, "Bad Request") return } defer file.Close() // Save the file to disk fileName := header.Filename out, err := os.Create("/tmp/" + fileName) if err != nil { c.String(500, "Internal Server Error") return } defer out.Close() _, err = io.Copy(out, file) if err != nil { c.String(500, "Internal Server Error") return } // Get file information f, err := os.Open("/tmp/" + fileName) if err != nil { c.String(500, "Internal Server Error") return } fileInfo, err := f.Stat() if err != nil { c.String(500, "Internal Server Error") return } mimeType, err := mimetype.DetectFile("/tmp/" + fileName) if err != nil { c.String(500, "Internal Server Error") return } // Convert the video to MP4 if mimeType.String() != "video/mp4" { cmd := exec.Command("ffmpeg", "-i", "/tmp/"+fileName, "-c:v", "libx264", "-c:a", "aac", "-strict", "experimental", "-preset", "slow", "-crf", "22", "-movflags", "faststart", "/tmp/"+fileName+".mp4") err = cmd.Run() if err != nil { c.String(500, "Internal Server Error") return } // Remove the original file err = os.Remove("/tmp/" + fileName) if err != nil { c.String(500, "Internal Server Error") return } fileName = fileName + ".mp4" } // Serve the video c.FileAttachment("/tmp/"+fileName, fileName) }
このバージョンのアップロード ハンドラーでは、アップロードされたビデオが変換されるように FFmpeg を使用します。 MP4形式に変換します。 mimetype パッケージを使用してアップロードされたファイルの MIME タイプを検出し、それが「video/mp4」でない場合は FFmpeg 変換コマンドを実行します。
4. アプリケーションをテストします
アプリケーションの作成が完了したので、次のコマンドを使用してローカルホスト上でサーバーを実行できます:
go run main.go
サーバーが実行されたら、これは、curl またはお気に入りの HTTP クライアントを使用してテストできます。以下は、アップロードされたビデオをカールでテストするコマンドの例です:
curl -F "file=@/path/to/video/file" http://localhost:8080/upload ```` 这将向localhost:8080的“upload”端点POST一个视频文件。如果一切正常,您应该会收到一条来自服务器的附加文件的相应消息,该消息将向您提供已处理的视频的URL。 五、总结
以上がgolang ビルドのビデオの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。