Skip to content

🎭 Stream API Methods Playing Hide and Seek in Go SDK #25

Description

@GSGSDgggdzez

Hello i am trying to build a project to learn by building a backend clone of Tiktok i am trying to learn

What's Popping? 🎯

Trying to build a sick livestreaming feature but the Stream Go SDK methods are playing hard to get:

  • lc.streamClient.Call undefined
  • lc.streamClient.Video() undefined
  • Type mismatches with user IDs (string vs int)

Expected Behavior 🎪

Should be able to create livestreams like a boss using:
how i initialize the stream Video Livestream API

package config

import (
	"os"

	"github.com/GetStream/getstream-go"
)

func InitStreamVideo() (*getstream.Stream, error) {
	apiKey := os.Getenv("STREAM_API_KEY")
	apiSecret := os.Getenv("STREAM_API_SECRET")

	client, err := getstream.NewClient(apiKey, apiSecret)
	if err != nil {
		return nil, err
	}

	return client, nil
}

The controller than handle these

package controllers

import (
	"Tiktok/internal/database"
	"Tiktok/internal/models"
	"Tiktok/internal/utils"
	"context"
	"strconv"

	"github.com/GetStream/getstream-go"
	"github.com/go-playground/validator"
	"github.com/gofiber/fiber/v2"
	"github.com/google/uuid"
)

type LiveStreamController struct {
	db           database.Service
	validate     *validator.Validate
	streamClient *getstream.Client
}

type StartStreamRequest struct {
	Title       string `json:"title" validate:"required"`
	Description string `json:"description" validate:"required"`
}

func (lc *LiveStreamController) StartStream(c *fiber.Ctx) error {
	ctx := context.Background()
	claims := c.Locals("user").(*utils.Claims)

	var req StartStreamRequest
	if err := c.BodyParser(&req); err != nil {
		return utils.SendErrorResponse(c, fiber.StatusBadRequest, "Invalid request", err.Error())
	}

	userID := strconv.Itoa(claims.UserID)
	callID := uuid.New().String()

	// Create livestream call
	call := lc.streamClient.Video().Call("livestream", callID)

	response, err := call.GetOrCreate(ctx, &getstream.GetOrCreateCallRequest{
		Data: &getstream.CallRequest{
			CreatedByID: getstream.PtrTo(userID),
			Members: []getstream.MemberRequest{
				{UserID: userID, Role: getstream.PtrTo("host")},
			},
			Custom: map[string]interface{}{
				"title":       req.Title,
				"description": req.Description,
			},
		},
	})

	if err != nil {
		return utils.SendErrorResponse(c, fiber.StatusInternalServerError, "Failed to create stream", err.Error())
	}

	// Save to database
	stream := &models.LiveStream{
		UserID:      claims.UserID,
		Title:       req.Title,
		Description: req.Description,
		CallID:      callID,
		Status:      "backstage",
		StreamKey:   response.StreamKey,
		RtmpUrl:     response.RtmpUrl,
	}

	if err := lc.db.CreateLiveStream(ctx, stream); err != nil {
		return utils.SendErrorResponse(c, fiber.StatusInternalServerError, "Failed to save stream", err.Error())
	}

	return c.JSON(fiber.Map{
		"status": "success",
		"data":   stream,
	})
}

Current Behavior 🎪

Getting compiler errors faster than a Twitch chat during a fail moment

SDK Version

  • GetStream Go SDK: latest
  • Go version: latest
  • Framework: Fiber

The Dream 🌟

Just trying to make the next big streaming platform here! Help a dev out!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions