TrackAPI : 2 audio tracks, same langage code, main + audiodescription

XAVIER LAFFARGUE 51 Reputation points
2023-01-03T18:42:00.893+00:00

We are trying to add 2 audio tracks via the API.
One main and another audio description

We have 2 issues :
1- When the language code is the same, we don't have 2 tracks in the HLS manifest. Only one. We think that is because the filename is the same
2- To resolve the first issue we "cheat" and use a different language code between 2 tracks, but HLS settings doesn't seems to be applied (HLS Characteristic and other isn't filled/applied)

MediaAssetTrackResource mediaAssetTrackResourceFrDv = mediaAssetResource.GetMediaAssetTracks().CreateOrUpdate(WaitUntil.Completed, "describes-video" ,new MediaAssetTrackData()  
{  
    Track = new AudioTrack()  
    {  
        Mpeg4TrackId = 1,  
        DisplayName = "Français (Description)",  
        DashRole = "alternate",  
        FileName = "describes-video.mp4",  
        LanguageCode = "fre",  
        HlsSettings = new HlsSettings()  
        {  
            Characteristics ="public.accessibility.describes-video",  
            IsDefault = false,  
            IsForced = false  
        }  
    }  
}).Value;  

Before use TrackAPI we edit the ism file like : https://learn.microsoft.com/en-us/azure/media-services/latest/encode-dynamic-packaging-concept#signaling-audio-description-tracks
But is there a way to do it via the API ?

Community Center | Not monitored
0 comments No comments
{count} votes

4 answers

Sort by: Most helpful
  1. John Deutscher (MSFT) 2,126 Reputation points
    2023-01-03T20:36:27.79+00:00

    HI Xavier,

    Are the two audio tracks in separate source files or the same file?

    Are you updating the Mpeg4TrackId for each file that you are setting?

    public static async Task<AssetTrack> PublishAudioTrackAndVerify(AzureMediaServicesClient client, string rgName, string accountName, string assetName, string strFileName, string strTrackName)
    {
    var newTrack = new AssetTrack
    {
    Track = new AudioTrack
    {
    Mpeg4TrackId = (Depending on which track indicates description audio track 1 or 2),
    FileName = strFileName,
    DisplayName = strTrakName,
    HlsSettings = new HlsSettings
    {
    Characteristics = "public.accessibility.describes-video"
    },
    LanguageCode = "fr"
    }
    };

        var t = await client.Tracks.CreateOrUpdateAsync(rgName, accountName, assetName, strTrackName, newTrack);  
        var track = t.Track as AudioTrack;  
        Console.WriteLine($"new audio track with name {track?.DisplayName}, Id: {track?.Mpeg4TrackId} and bitrate {track?.BitRate} published");  
    
        return t;  
        }  
    

    For the second issue, I believe that the properties set using AssetAPI are not being reflected accurately. There might be a bug here that I'll have the team follow up on and check on what's going on.


  2. XAVIER LAFFARGUE 51 Reputation points
    2023-01-05T18:58:34.977+00:00

    ISM Generated :

      <audio src="2022-12-08_19_30_00_INFOMAN_0633_02_1200.mp4" systemBitrate="128000" systemLanguage="fra">  
        <param name="trackIndex" value="2022-12-08_19_30_00_INFOMAN_0633_02_1200_2.mpi" valuetype="data" />  
        <param name="systemLanguage" value="fra" valuetype="data" />  
        <param name="systemBitrate" value="128000" valuetype="data" />  
        <param name="isDefault" value="TRUE" valuetype="data" />  
        <param name="displayName" value="Français" valuetype="data" />  
        <param name="trackID" value="2" valuetype="data" />  
        <param name="trackName" value="audio_fra" valuetype="data" />  
        <param name="armId" value="audio1_fr" valuetype="data" />  
      </audio>  
      <audio src="2022-12-08_19_30_00_INFOMAN_0633_02_1200.mp4" systemBitrate="128000" systemLanguage="fra">  
        <param name="trackIndex" value="2022-12-08_19_30_00_INFOMAN_0633_02_1200_3.mpi" valuetype="data" />  
        <param name="systemLanguage" value="fra" valuetype="data" />  
        <param name="role" value="alternate" valuetype="data" />  
        <param name="systemBitrate" value="128000" valuetype="data" />  
        <param name="isDefault" value="FALSE" valuetype="data" />  
        <param name="displayName" value="Français (Description)" valuetype="data" />  
        <param name="hlsCharacteristic" value="public.accessibility.describes-video" valuetype="data" />  
        <param name="trackID" value="3" valuetype="data" />  
        <param name="trackName" value="audio_fra" valuetype="data" />  
        <param name="armId" value="audio0_frdv" valuetype="data" />  
      </audio>  
    

  3. XAVIER LAFFARGUE 51 Reputation points
    2023-01-05T18:59:16.51+00:00

    HLS Generated :

    #EXTM3U  
    #EXT-X-VERSION:7  
    #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="Français",LANGUAGE="fra",DEFAULT=YES,AUTOSELECT=YES,CHANNELS="2",URI="QualityLevels(128000)/Manifest(audio_fra,format=m3u8-cmaf)"  
    #EXT-X-STREAM-INF:BANDWIDTH=409205,RESOLUTION=384x216,CODECS="avc1.42c01e,mp4a.40.2",AUDIO="audio"  
    QualityLevels(256428)/Manifest(video,format=m3u8-cmaf)  
    #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=409205,RESOLUTION=384x216,CODECS="avc1.42c01e",URI="QualityLevels(256428)/Manifest(video,format=m3u8-cmaf,type=keyframes)"  
    #EXT-X-STREAM-INF:BANDWIDTH=556458,RESOLUTION=480x270,CODECS="avc1.42c01e,mp4a.40.2",AUDIO="audio"  
    QualityLevels(400511)/Manifest(video,format=m3u8-cmaf)  
    #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=556458,RESOLUTION=480x270,CODECS="avc1.42c01e",URI="QualityLevels(400511)/Manifest(video,format=m3u8-cmaf,type=keyframes)"  
    #EXT-X-STREAM-INF:BANDWIDTH=658933,RESOLUTION=512x288,CODECS="avc1.42c01e,mp4a.40.2",AUDIO="audio"  
    QualityLevels(500780)/Manifest(video,format=m3u8-cmaf)  
    #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=658933,RESOLUTION=512x288,CODECS="avc1.42c01e",URI="QualityLevels(500780)/Manifest(video,format=m3u8-cmaf,type=keyframes)"  
    #EXT-X-STREAM-INF:BANDWIDTH=965803,RESOLUTION=640x360,CODECS="avc1.42c01e,mp4a.40.2",AUDIO="audio"  
    QualityLevels(801045)/Manifest(video,format=m3u8-cmaf)  
    #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=965803,RESOLUTION=640x360,CODECS="avc1.42c01e",URI="QualityLevels(801045)/Manifest(video,format=m3u8-cmaf,type=keyframes)"  
    #EXT-X-STREAM-INF:BANDWIDTH=1374729,RESOLUTION=852x480,CODECS="avc1.4d401f,mp4a.40.2",AUDIO="audio"  
    QualityLevels(1201168)/Manifest(video,format=m3u8-cmaf)  
    #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=1374729,RESOLUTION=852x480,CODECS="avc1.4d401f",URI="QualityLevels(1201168)/Manifest(video,format=m3u8-cmaf,type=keyframes)"  
    #EXT-X-STREAM-INF:BANDWIDTH=2192851,RESOLUTION=852x480,CODECS="avc1.4d401f,mp4a.40.2",AUDIO="audio"  
    QualityLevels(2001679)/Manifest(video,format=m3u8-cmaf)  
    #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=2192851,RESOLUTION=852x480,CODECS="avc1.4d401f",URI="QualityLevels(2001679)/Manifest(video,format=m3u8-cmaf,type=keyframes)"  
    #EXT-X-STREAM-INF:BANDWIDTH=3216020,RESOLUTION=1280x720,CODECS="avc1.4d401f,mp4a.40.2",AUDIO="audio"  
    QualityLevels(3002822)/Manifest(video,format=m3u8-cmaf)  
    #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=3216020,RESOLUTION=1280x720,CODECS="avc1.4d401f",URI="QualityLevels(3002822)/Manifest(video,format=m3u8-cmaf,type=keyframes)"  
    #EXT-X-STREAM-INF:BANDWIDTH=7308487,RESOLUTION=1920x1080,CODECS="avc1.640028,mp4a.40.2",AUDIO="audio"  
    QualityLevels(7007193)/Manifest(video,format=m3u8-cmaf)  
    #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=7308487,RESOLUTION=1920x1080,CODECS="avc1.640028",URI="QualityLevels(7007193)/Manifest(video,format=m3u8-cmaf,type=keyframes)"  
    
    0 comments No comments

  4. Ning Lin 1 Reputation point Microsoft Employee
    2023-02-01T07:00:41.0033333+00:00

    Are the two audio tracks really in track 2 and track 3 of 2022-12-08_19_30_00_INFOMAN_0633_02_1200.mp4? The .ism doesn’t seem to match your code.

    ‘TrackID property is import as it describes the location of the track within the mp4 file.


Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.