none
combine multiply vtt files on azure media service RRS feed

All replies

  • Hello 
    i try to generate multiply sprite thumbnails and i concat the vtt files on one file then i need to upload all files to origin input asset
    actually i dont know how can do this part of upload can you help me 
    this is function : const https = require('https')
    const http = require('http');
    // var concat = require('concat-files')
    var bodyParser = require('body-parser');
    var request = require('request');
    const axios = require('axios');
    var Promise = require('promise');
    const adal = require('adal-node').AuthenticationContext;
    var mkdirp = require('mkdirp')
    const copyFile = require('copy-no-overwrite')
    // const download = require('image-downloader')
    var through = require('through2');
    var contents = require('file-contents');
    var merge = require('merge'), original, cloned;
    var download = require('download-file')
    var path=require('path')
    var fs = require('fs')
    var concat = require('concat-files')
    var findRemoveSync = require('find-remove')

    module.exports = (async function (context, req) {
        const authorityHostUrl = 'https://login.windows.net';
        const tenant = '********';
        const authorityUrl = authorityHostUrl + '/' + tenant;
        const clientId = '*******';
        const clientSecret = '*******';
        const resource = 'https://rest.media.azure.net';  
        const context1 = new adal(authorityUrl);
        context1.acquireTokenWithClientCredentials(
            resource,
            clientId,
            clientSecret,
            (err, tokenResponse) => {
                if (err) {
                console.log(`Token generation failed due to ${err}`);
                } else {    
                var accessToken=tokenResponse.accessToken
                var config={
                    "Version": 1.0,
                    "Codecs": [
                    {
                    "Start": "00:00:01",
                    "Type": "JpgImage",
                    "Step": "00:00:10",
                    "Range": "100%",
                    "JpgLayers": [
                    {
                    "Type": "JpgLayer",
                    "Width": "10%",
                    "Height": "10%",
                    "Quality": 90,
                    "Label": "first"
                    }
                    ],
                    "SpriteColumn": 10
                    },
                    {
                    "Start": "50%",
                    "Type": "JpgImage",
                    "Step": "00:00:10",
                    "Range": "100%",
                    "JpgLayers": [
                    {
                    "Type": "JpgLayer",
                    "Width": "318",
                    "Height": "180",
                    "Quality": 90,
                    "Label": "tv"
                    }
                    ],
                    "SpriteColumn": 10
                    }
                    ],
                    "Outputs": [
                    {
                    "FileName": "{Basename}_{Index}_{Label}{Extension}",
                    "Format": {
                    "Type": "JpgFormat"
                    }
                    }
                    ]
                }   
                var souresAssetId="*******"
                const data ={
                    "Name": "spriteThumbnail",
                    "InputMediaAssets" : [{"__metadata": {"uri" : "https://******.restv2.westeurope.media.azure.net/api/Assets('"+souresAssetId+"')"}}],
                    "Tasks": [{
                        "Configuration":JSON.stringify(config),
                        "MediaProcessorId":"nb:mpid:UUID:ff4df607-d419-42f0-bc17-a481b1331e56",
                        "TaskBody":"<?xml version=\"1.0\" encoding=\"utf-8\"?><taskBody><inputAsset>JobInputAsset(0)</inputAsset><outputAsset assetName=\"Sprite Thumbnail\">JobOutputAsset(0)</outputAsset></taskBody>"
                    }]
                }

                var header2={
                    'Accept': 'application/json;odata=verbose',
                    'Authorization':'Bearer '+accessToken,
                    'Content-Type': 'application/json;odata=verbose',
                    'DataServiceVersion': '3.0',
                    'MaxDataServiceVersion': '3.0',
                    'x-ms-version': '2.15'
                }
                var url3="https://*******restv2.westeurope.media.azure.net/api/Jobs"
                request(
                {
                headers: header2 , 
                uri:url3, 
                method:'POST',
                body: data,
                json: true
                }, function (err, res, body) {
                //  var obj=JSON.parse(body)
                //console.log("bodyJob",body)
                var idJob=body.d.Id
                //console.log("idJob",idJob)
                var urlForCheakJobStatus="https://*******.restv2.westeurope.media.azure.net/api/Jobs()?$filter=Id%20eq%20'"+idJob+"'&$top=1"
                var headerForCheakJobStatus={
                'Accept': 'application/json;odata=verbose',
                'Authorization':'Bearer '+accessToken,
                'Content-Type': 'application/json;odata=verbose',
                'DataServiceVersion': '3.0',
                'MaxDataServiceVersion': '3.0',
                'x-ms-version': '2.15'
                }
                request(
                {
                headers: headerForCheakJobStatus , 
                uri:urlForCheakJobStatus, 
                method:'GET',
                }, function (err, res, body) {

                const timer = ms => new Promise( res => setTimeout(res, ms));
                timer(180000).then(function(){
                //console.log("hello")
                var urlJob="https://******.restv2.westeurope.media.azure.net/api/Jobs"+"('"+idJob+"')"+"/OutputMediaAssets()"
                var headerJob={
                    'Accept': 'application/json;odata=verbose',
                    'Authorization':'Bearer '+accessToken,
                    'Content-Type': 'application/json;odata=verbose',
                    'DataServiceVersion': '3.0',
                    'MaxDataServiceVersion': '3.0',
                    'x-ms-version': '2.15'
                }
                request(
                {
                headers: headerJob , 
                uri:urlJob, 
                method:'GET'
                }, function (err, res, body) {
                //console.log("body",body)
                obj=JSON.parse(body)
                var outputAsset=obj.d.results[0].Id
                //console.log(outputAsset)
                var AccessPolicyId="**********"
                var urlLocater="https://******.restv2.westeurope.media.azure.net/api/Locators"
                var headerLocater={
                'Accept': 'application/json',
                'Authorization':'Bearer '+accessToken,
                'Content-Type': 'application/json',
                'DataServiceVersion': '3.0',
                'MaxDataServiceVersion': '3.0',
                'x-ms-version': '2.17'
                }
                var dataLocater={"AccessPolicyId":AccessPolicyId, "AssetId":outputAsset,"Type":1}
                request(
                    {
                    headers: headerLocater , 
                    uri:urlLocater, 
                    method:'POST',
                    body: dataLocater,
                    json: true
                    }, function (err, res, body) {
                    var ContentAccessComponent=body.ContentAccessComponent
                    var BaseUri=body.BaseUri
                    var urlForOutputMediaAssets="https:/*******restv2.westeurope.media.azure.net/api/Assets('"+outputAsset+"')"+"/Files"
                    var headerForOutputMediaAssets={
                        'Accept': 'application/json',
                        'Authorization':'Bearer '+accessToken,
                        'Content-Type': 'application/json',
                        'DataServiceVersion': '3.0',
                        'MaxDataServiceVersion': '3.0',
                        'x-ms-version': '2.15'
                    }
                    const timer = ms => new Promise( res => setTimeout(res, ms));
                    timer(180000).then(function(){

                    request(
                    {
                        headers: headerForOutputMediaAssets, 
                        uri:urlForOutputMediaAssets, 
                        method:'GET',
                        }, function (err, res, body) {
                            console.log("files",body)
                            var arr=[]
                            var OutputMediaAssetsList1=JSON.parse(body)
                            var OutputMediaAssetsList=OutputMediaAssetsList1.value
                            console.log("OutputMediaAssetsList",OutputMediaAssetsList)
                            OutputMediaAssetsList.forEach(function(elem){

                                var str=elem.Name
                                AssetId=elem.Id.substring(12)
                                if(str.includes("vtt")){  
                                    var urls=BaseUri+"/"+str+ContentAccessComponent
                                    var nameFile=AssetId+'.txt'
                                    arr.push("C:\\Users\\afsmadi\\Desktop\\mediaFunction Afaq\\allFilesOfVtt\\"+nameFile)
                                    var options = {
                                        directory: "C:\\Users\\afsmadi\\Desktop\\mediaFunction Afaq\\allFilesOfVtt",
                                        filename: nameFile
                                    } 
                                    download(urls, options, function(err){
                                        if (err) throw err
                                        console.log("save") 
                                    })
                                    timer(180000).then(function(){
                                        concat(arr,"C:\\Users\\afsmadi\\Desktop\\mediaFunction Afaq\\allFilesOfVtt\\NewFolderToUpload\\result.txt", function(err) {
                                            if (err) throw err
                                            console.log('done');
                                        });

                                    })

                                }
                                else{
                                    var urls=BaseUri+"/"+str+ContentAccessComponent
                                    var nameFile=str
                                    var options1 = {
                                        directory: "C:\\Users\\afsmadi\\Desktop\\mediaFunction Afaq\\allFilesOfVtt\\NewFolderToUpload",
                                        filename: nameFile
                                    }
                                    download(urls, options1, function(err){
                                        if (err) throw err
                                        console.log("save hhhhhh") 
                                    })
                                }
                        })
                        });
                        })
                        });
                        })
                    });    

                    });

                }); 
                }
            }
        ); 

    })();

    i need complete it to make upload files to origin asset"input asset"

    Monday, July 8, 2019 7:44 AM
  • It looks like you're reusing an existing access policy on your line:
    var AccessPolicyId="**********"

    I don't see where you're creating it, but make sure that it is writable as per https://docs.microsoft.com/en-us/rest/api/media/operations/accesspolicy.  Beyond that the steps would be:

    1.  Use an HTTP PUT to upload the file to the asset via the writable SAS URL.  The body of the PUT would be the contents of the file you're uploading.
    2.  Call CreateFileInfos https://docs.microsoft.com/en-us/rest/api/media/operations/rest-api-functions#createfileinfos to update Media Services with the metadata of this new file.

     
    Monday, July 8, 2019 2:22 PM
    Moderator
  • Hello 
    Actually i update the code on this way and it upload the asset on the asset result job not the local asset and i dont know whats the wrong can you help me in this part 
    const https = require('https')
    const http = require('http');
    // var concat = require('concat-files')
    var bodyParser = require('body-parser');
    var request = require('request');
    const axios = require('axios');
    var Promise = require('promise');
    const adal = require('adal-node').AuthenticationContext;
    var mkdirp = require('mkdirp')
    const copyFile = require('copy-no-overwrite')
    // const download = require('image-downloader')
    var through = require('through2');
    var contents = require('file-contents');
    var merge = require('merge'), original, cloned;
    var download = require('download-file')
    var path=require('path')
    var fs = require('fs')
    var concat = require('concat-files')
    var findRemoveSync = require('find-remove')
    //login 
    module.exports = (async function (context, req) {
        const authorityHostUrl = 'https://login.windows.net';
        const tenant = '***********';
        const authorityUrl = authorityHostUrl + '/' + tenant;
        const clientId = '**********';
        const clientSecret = '*************';
        const resource = 'https://rest.media.azure.net';  
        const context1 = new adal(authorityUrl);
        context1.acquireTokenWithClientCredentials(
            resource,
            clientId,
            clientSecret,
            (err, tokenResponse) => {
                if (err) {
                console.log(`Token generation failed due to ${err}`);
                } else {    
                var accessToken=tokenResponse.accessToken
                var config={
                    "Version": 1.0,
                    "Codecs": [
                    {
                    "Start": "00:00:01",
                    "Type": "JpgImage",
                    "Step": "00:00:10",
                    "Range": "100%",
                    "JpgLayers": [
                    {
                    "Type": "JpgLayer",
                    "Width": "10%",
                    "Height": "10%",
                    "Quality": 90,
                    "Label": "first"
                    }
                    ],
                    "SpriteColumn": 10
                    },
                    {
                    "Start": "50%",
                    "Type": "JpgImage",
                    "Step": "00:00:10",
                    "Range": "100%",
                    "JpgLayers": [
                    {
                    "Type": "JpgLayer",
                    "Width": "318",
                    "Height": "180",
                    "Quality": 90,
                    "Label": "tv"
                    }
                    ],
                    "SpriteColumn": 10
                    }
                    ],
                    "Outputs": [
                    {
                    "FileName": "{Basename}_{Index}_{Label}{Extension}",
                    "Format": {
                    "Type": "JpgFormat"
                    }
                    }
                    ]
                }   
                var souresAssetId="************"
                var AccessPolicyIdForUploadWrite="************"
                var urlLocater="https://********.restv2.westeurope.media.azure.net/api/Locators"
                var headerLocater={
                    'Accept': 'application/json',
                    'Authorization':'Bearer '+accessToken,
                    'Content-Type': 'application/json',
                    'DataServiceVersion': '3.0',
                    'MaxDataServiceVersion': '3.0',
                    'x-ms-version': '2.17'
                    }
                    var dataLocaters={"AccessPolicyId":AccessPolicyIdForUploadWrite, "AssetId":souresAssetId,"Type":1}

                request(
                    {
                      headers: headerLocater, 
                      uri:urlLocater, 
                      method:'POST',
                      body: dataLocaters,
                      json: true
                    }, function (err, res, body) {
                       var bodyLocaterForUpload=body
                      console.log("bodyLocaterForUpload",body)
                const data ={
                    "Name": "spriteThumbnail",
                    "InputMediaAssets" : [{"__metadata": {"uri" : "https://*******.restv2.westeurope.media.azure.net/api/Assets('"+souresAssetId+"')"}}],
                    "Tasks": [{
                        "Configuration":JSON.stringify(config),
                        "MediaProcessorId":"*********",
                        "TaskBody":"<?xml version=\"1.0\" encoding=\"utf-8\"?><taskBody><inputAsset>JobInputAsset(0)</inputAsset><outputAsset assetName=\"Sprite Thumbnail\">JobOutputAsset(0)</outputAsset></taskBody>"
                    }]
                }

                var header2={
                    'Accept': 'application/json;odata=verbose',
                    'Authorization':'Bearer '+accessToken,
                    'Content-Type': 'application/json;odata=verbose',
                    'DataServiceVersion': '3.0',
                    'MaxDataServiceVersion': '3.0',
                    'x-ms-version': '2.15'
                }
                var url3="https://********.restv2.westeurope.media.azure.net/api/Jobs"
                
                request(
                {
                headers: header2 , 
                uri:url3, 
                method:'POST',
                body: data,
                json: true
                }, function (err, res, body) {
                //  var obj=JSON.parse(body)
                console.log("bodyJob",body)

                var idJob=body.d.Id
                //console.log("idJob",idJob)
                var urlForCheakJobStatus="https://******.restv2.westeurope.media.azure.net/api/Jobs()?$filter=Id%20eq%20'"+idJob+"'&$top=1"
                var headerForCheakJobStatus={
                'Accept': 'application/json;odata=verbose',
                'Authorization':'Bearer '+accessToken,
                'Content-Type': 'application/json;odata=verbose',
                'DataServiceVersion': '3.0',
                'MaxDataServiceVersion': '3.0',
                'x-ms-version': '2.15'
                }
                request(
                {
                headers: headerForCheakJobStatus , 
                uri:urlForCheakJobStatus, 
                method:'GET',
                }, function (err, res, body) {

                const timer = ms => new Promise( res => setTimeout(res, ms));
                timer(180000).then(function(){
                //console.log("hello")
                var urlJob="https://*******.restv2.westeurope.media.azure.net/api/Jobs"+"('"+idJob+"')"+"/OutputMediaAssets()"
                var headerJob={
                    'Accept': 'application/json;odata=verbose',
                    'Authorization':'Bearer '+accessToken,
                    'Content-Type': 'application/json;odata=verbose',
                    'DataServiceVersion': '3.0',
                    'MaxDataServiceVersion': '3.0',
                    'x-ms-version': '2.15'
                }
                request(
                {
                headers: headerJob , 
                uri:urlJob, 
                method:'GET'
                }, function (err, res, body) {
                //console.log("body",body)
               var  obj=JSON.parse(body)
                var outputAsset=obj.d.results[0].Id
                //console.log(outputAsset)
                var AccessPolicyId="**********"
                var urlLocater="https://*******.restv2.westeurope.media.azure.net/api/Locators"
                var headerLocater={
                'Accept': 'application/json',
                'Authorization':'Bearer '+accessToken,
                'Content-Type': 'application/json',
                'DataServiceVersion': '3.0',
                'MaxDataServiceVersion': '3.0',
                'x-ms-version': '2.17'
                }
                var dataLocater={"AccessPolicyId":AccessPolicyId, "AssetId":outputAsset,"Type":1}
                request(
                    {
                    headers: headerLocater , 
                    uri:urlLocater, 
                    method:'POST',
                    body: dataLocater,
                    json: true
                    }, function (err, res, body) {
                    var ContentAccessComponent=body.ContentAccessComponent
                    var BaseUri=body.BaseUri
                    var urlForOutputMediaAssets="https://******.restv2.westeurope.media.azure.net/api/Assets('"+outputAsset+"')"+"/Files"
                    var headerForOutputMediaAssets={
                        'Accept': 'application/json',
                        'Authorization':'Bearer '+accessToken,
                        'Content-Type': 'application/json',
                        'DataServiceVersion': '3.0',
                        'MaxDataServiceVersion': '3.0',
                        'x-ms-version': '2.15'
                    }
                    const timer = ms => new Promise( res => setTimeout(res, ms));
                    timer(180000).then(function(){

                    request(
                    {
                        headers: headerForOutputMediaAssets, 
                        uri:urlForOutputMediaAssets, 
                        method:'GET',
                        }, function (err, res, body) {
                            console.log("files",body)
                            var arr=[]
                            var OutputMediaAssetsList1=JSON.parse(body)
                            var OutputMediaAssetsList=OutputMediaAssetsList1.value
                        //     console.log("OutputMediaAssetsList",OutputMediaAssetsList)
                            OutputMediaAssetsList.forEach(function(elem){

                                var str=elem.Name
                                AssetId=elem.Id.substring(12)
                                if(str.includes("vtt")){  
                                    var urls=BaseUri+"/"+str+ContentAccessComponent
                                    var nameFile=AssetId+'.txt'
                                    arr.push("C:\\Users\\afsmadi\\Desktop\\mediaFunction Afaq\\allFilesOfVtt\\"+nameFile)
                                    var options = {
                                        directory: "C:\\Users\\afsmadi\\Desktop\\mediaFunction Afaq\\allFilesOfVtt",
                                        filename: nameFile
                                    } 
                                    download(urls, options, function(err){
                                        if (err) throw err
                                        console.log("save") 
                                    })
                                    timer(180000).then(function(){
                                        concat(arr,"C:\\Users\\afsmadi\\Desktop\\mediaFunction Afaq\\allFilesOfVtt\\NewFolderToUpload\\result.vtt", function(err) {
                                            if (err) throw err
                                            console.log('done');
                                        });

                                    })
                                    var urlForUpload=bodyLocaterForUpload.BaseUri+"\\"+str+bodyLocaterForUpload.ContentAccessComponent
                                    console.log("urlForUpload",urlForUpload)
                                    var FolderLocalToUpload="C:\\Users\\afsmadi\\Desktop\\mediaFunction Afaq\\allFilesOfVtt\\NewFolderToUpload"
                                    var headerForUploadFiles={
                                        "Content-Type":"text/plain",
                                            "Host":"shahiddevtest.blob.core.windows.net",
                                            "x-ms-blob-type":"BlockBlob"
                                    }
                                    timer(180000).then(function(){
                                    fs.readdir(FolderLocalToUpload, (err, files) => {
                                       for(var k=0;k<files.length;k++){
                                           var file="C:\\Users\\afsmadi\\Desktop\\mediaFunction Afaq\\allFilesOfVtt\\NewFolderToUpload\\"+files[k]
                                           console.log("fileVttConcat",file)
                                        request(
                                            {
                                            headers: headerForUploadFiles , 
                                            uri:urlForUpload, 
                                            method:'PUT',
                                            body:file
                                            }, function (err, res, body) {
                                            console.log("upload status","doneUpload")
                                            console.log("upload status res",res.statusCode)
                                            console.log("upload status body",body)
                                            console.log("err",err)
                                        
                                        });
        
                                       }
                                         
                                 
                                    })
                                })




                                }
                                if(str.includes("jpg")||str.includes("xml")){
                                    var urls=BaseUri+"/"+str+ContentAccessComponent
                                    var nameFile=str
                                    var options1 = {
                                        directory: "C:\\Users\\afsmadi\\Desktop\\mediaFunction Afaq\\allFilesOfVtt\\NewFolderToUpload",
                                        filename: nameFile
                                    }
                                    download(urls, options1, function(err){
                                        if (err) throw err
                                        console.log("save hhhhhh") 
                                    })
                                    var urlForUpload=bodyLocaterForUpload.BaseUri+"\\"+str+bodyLocaterForUpload.ContentAccessComponent
                                    console.log("urlForUpload",urlForUpload)
                                    var FolderLocalToUpload="C:\\Users\\afsmadi\\Desktop\\mediaFunction Afaq\\allFilesOfVtt\\NewFolderToUpload"
                                    var headerForUploadFiles={
                                        "Content-Type":"text/plain",
                                            "Host":"shahiddevtest.blob.core.windows.net",
                                            "x-ms-blob-type":"BlockBlob"
                                    }
                                    timer(180000).then(function(){
                                    fs.readdir(FolderLocalToUpload, (err, files) => {
                                       for(var k=0;k<files.length;k++){
                                           var file="C:\\Users\\afsmadi\\Desktop\\mediaFunction Afaq\\allFilesOfVtt\\NewFolderToUpload\\"+files[k]
                                           console.log("fileVttConcatJpg&xml",file)
                                        request(
                                            {
                                            headers: headerForUploadFiles , 
                                            uri:urlForUpload, 
                                            method:'PUT',
                                            body: file
                                            }, function (err, res, body) {
                                            console.log("upload status","doneUpload")
                                            console.log("upload status res",res.statusCode)
                                            console.log("upload status body",body)
                                            console.log("err",err)
                                        
                                        });
        
                                       }
                                         
                                 
                                    })
                                })
                                    
                                }

                        })
                        
                        });
                        })
                        });
                        })
                    });    

                    });

                });
                
            });

                }
            }
        ); 

    })(); Thank you
    Wednesday, July 10, 2019 9:59 AM