Skip to content

Instantly share code, notes, and snippets.

@ajtatum
Created June 16, 2023 12:56
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ajtatum/a385443cfea376fba1b5fb041331787d to your computer and use it in GitHub Desktop.
Save ajtatum/a385443cfea376fba1b5fb041331787d to your computer and use it in GitHub Desktop.
Upload to Mux API via Azure Function with Blob Trigger
using System;
using System.IO;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using System.Text.Json.Serialization;
namespace AJTDigital.Mux
{
public class DirectMuxVideoBlobTrigger
{
private const string BaseMuxApiUrl = "https://api.mux.com/video/v1/assets";
private const string BaseVideosContainerUrl = "https://myazurestorage.blob.core.windows.net/videos";
[FunctionName("DirectMuxVideoBlobTrigger")]
public async Task Run([BlobTrigger("videos/{name}", Connection = "AzureWebJobsStorage")]Stream myBlob, string name, ILogger log)
{
var muxTokenId = Environment.GetEnvironmentVariable("MUX_TOKEN_ID");
var muxTokenSecret = Environment.GetEnvironmentVariable("MUX_TOKEN_SECRET");
var authenticationString = $"{muxTokenId}:{muxTokenSecret}";
var base64String = Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(authenticationString));
var httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, BaseMuxApiUrl);
httpRequestMessage.Headers.Authorization = new AuthenticationHeaderValue("Basic", base64String);
var muxVideo = new MuxAsset();
muxVideo.Input = $"{BaseVideosContainerUrl}/{name}";
using(var httpClient = new HttpClient())
{
var request = await httpClient.SendAsync(httpRequestMessage);
request.EnsureSuccessStatusCode();
}
log.LogInformation($"Mux Video {name} sent to Mux API.");
}
}
public class MuxAsset
{
[JsonPropertyName("cors_origin")]
public string CorsOrigin { get; set; } = "*";
[JsonPropertyName("input")]
public string Input { get; set; }
[JsonPropertyName("mp4_support")]
public string MP4Support { get; set; } = "standard";
[JsonPropertyName("playback_policy")]
public string PlaybackPolicy { get; set; } = "public";
}
}
using System;
using System.IO;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using System.Net.Http;
using System.Threading.Tasks;
namespace AJTDigital.Mux
{
public class MuxVideoBlobTrigger
{
private const string VideosContainerUrl = "https://myazurestorage.blob.core.windows.net/videos";
[FunctionName("MuxVideoBlobTrigger")]
public async Task Run([BlobTrigger("videos/{name}", Connection = "AzureWebJobsStorage")]Stream myBlob, string name, ILogger log)
{
string storageVideoUrl = $"{VideosContainerUrl}/{name}";
var muxVideo = new MuxVideo();
muxVideo.VideoUrl = storageVideoUrl;
using(var httpClient = new HttpClient())
{
var request = await httpClient.PostAsJsonAsync($"{Environment.GetEnvironmentVariable("AzureLogicAppTriggerUrl")}&fileUrl={storageVideoUrl}", muxVideo);
request.EnsureSuccessStatusCode();
}
log.LogInformation($"Mux Video {name} sent to Azure Logic App for processing.");
}
}
public class MuxVideo
{
public string VideoUrl { get; set; }
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment