使用Microsoft.Azure.Management.Media v6.0.0上传轨道时如何正确设置LanguageCode?
解决Microsoft.Azure.Management.Media v6.0.0文本轨道languageCode设置无效的问题
问题情况
使用Tracks.BeginCreateOrUpdateAsync方法上传文本轨道时,无论传入"fi"还是"fi-FI",返回的轨道信息里languageCode始终为空。但直接调用REST API提交相同参数时,languageCode却能正常设置。
SDK代码示例:
await client.Tracks.BeginCreateOrUpdateAsync( config.ResourceGroup, config.AccountName, foundAsset.Name, "M0508826_FI.vtt", new TextTrack("M0508826_FI.vtt", "suomi", "fi") );
返回的轨道信息片段:
{ "name": "M0508826_FI.vtt", "properties": { "track": { "@odata.type": "#Microsoft.Media.TextTrack", "fileName": "M0508826_FI.vtt", "displayName": "suomi", "languageCode": "", "playerVisibility": "Visible" } } }
可正常生效的REST请求体:
{ "properties": { "track": { "@odata.type": "#Microsoft.Media.TextTrack", "displayName": "suomi", "fileName": "M0508826_FI.vtt", "languageCode": "fi", "playerVisibility": "Visible" } } }
问题原因
v6.0.0版本的TextTrack构造函数存在参数映射错误,第三个参数并不对应languageCode字段,导致传入的语言代码无法被正确赋值到目标属性。
解决办法
不要通过构造函数传递语言代码,创建TextTrack实例后直接给LanguageCode属性赋值即可,修改后的代码如下:
// 创建实例后手动设置LanguageCode var textTrack = new TextTrack("M0508826_FI.vtt", "suomi") { LanguageCode = "fi" }; await client.Tracks.BeginCreateOrUpdateAsync( config.ResourceGroup, config.AccountName, foundAsset.Name, "M0508826_FI.vtt", textTrack );
或者使用无参构造函数,手动设置所有属性,更稳妥:
var textTrack = new TextTrack { FileName = "M0508826_FI.vtt", DisplayName = "suomi", LanguageCode = "fi", PlayerVisibility = TrackPlayerVisibility.Visible }; await client.Tracks.BeginCreateOrUpdateAsync( config.ResourceGroup, config.AccountName, foundAsset.Name, "M0508826_FI.vtt", textTrack );
这样设置后,languageCode就能被服务端正常接收并返回,效果和REST API一致。
内容的提问来源于stack exchange,提问作者Jussi Palo
相关产品推荐
相关产品推荐

