Введение:
HTTP Live Streaming (HLS) — это широко используемый протокол потоковой передачи, разработанный Apple для доставки видео- и аудиоконтента через Интернет. HLS работает, сегментируя медиафайлы на более мелкие фрагменты и доставляя их через файл списка воспроизведения с расширением .m3u8
. В этом руководстве показано, как создать поток HLS с помощью Golang и FFmpeg, мощного инструмента обработки мультимедиа с открытым исходным кодом.
Предпосылки:
- Базовое понимание Голанга
- FFmpeg установлен в вашей системе
Установка FFmpeg на macOS:
Чтобы установить FFmpeg на macOS, мы рекомендуем использовать популярный менеджер пакетов Homebrew. Если у вас не установлен Homebrew, следуйте инструкциям на официальном сайте: https://brew.sh/
После установки Homebrew откройте терминал и выполните следующую команду:
brew install ffmpeg
Эта команда загрузит и установит FFmpeg и его зависимости.
Создание потока HLS в Golang:
Теперь, когда в вашей системе установлен FFmpeg, мы создадим простую функцию Golang для создания списка воспроизведения HLS и сегментации видеофайла с помощью FFmpeg. Вот код:
package main import ( "fmt" "log" "os/exec" "strconv" ) func createHLS(inputFile string, outputDir string, segmentDuration int) error { // Create the output directory if it does not exist if err := os.MkdirAll(outputDir, 0755); err != nil { return fmt.Errorf("failed to create output directory: %v", err) } // Create the HLS playlist and segment the video using ffmpeg ffmpegCmd := exec.Command( "ffmpeg", "-i", inputFile, "-profile:v", "baseline", // baseline profile is compatible with most devices "-level", "3.0", "-start_number", "0", // start numbering segments from 0 "-hls_time", strconv.Itoa(segmentDuration), // duration of each segment in seconds "-hls_list_size", "0", // keep all segments in the playlist "-f", "hls", fmt.Sprintf("%s/playlist.m3u8", outputDir), ) output, err := ffmpegCmd.CombinedOutput() if err != nil { return fmt.Errorf("failed to create HLS: %v\nOutput: %s", err, string(output)) } return nil } func main() { inputFile := "path/to/your/video.mp4" outputDir := "path/to/output/directory" segmentDuration := 10 // duration of each segment in seconds if err := createHLS(inputFile, outputDir, segmentDuration); err != nil { log.Fatalf("Error creating HLS: %v", err) } log.Println("HLS created successfully") }
Эта функция createHLS
принимает три аргумента: входной видеофайл, выходной каталог, в котором будут храниться сегменты HLS и список воспроизведения, и продолжительность каждого сегмента в секундах. Он использует ffmpeg
для создания списка воспроизведения HLS и соответствующего сегментирования видео.
Заключение:
В этом руководстве показано, как установить FFmpeg на macOS и создать поток HLS с помощью Golang и FFmpeg. Этот пример можно расширить для обработки более сложных сценариев, таких как кодирование видео в разных форматах, добавление нескольких звуковых дорожек или включение субтитров.