C# 将视频文件(不是来自ip摄像机的视频)从服务器广播到网页
服务器上的文件夹中有MP4格式的下载/录制视频文件。我需要远程连接到服务器并在客户端页面上播放文件C# 将视频文件(不是来自ip摄像机的视频)从服务器广播到网页,c#,angular,typescript,C#,Angular,Typescript,服务器上的文件夹中有MP4格式的下载/录制视频文件。我需要远程连接到服务器并在客户端页面上播放文件 >On client. ts: export class VideoLayoutPartComponent implements OnInit { @Input() part: LayoutPart; videoSource: SafeUrl; constructor(private httpService: HttpService, private configuratio
>On client. ts:
export class VideoLayoutPartComponent implements OnInit {
@Input() part: LayoutPart;
videoSource: SafeUrl;
constructor(private httpService: HttpService, private configurationService: ConfigurationService) { }
ngOnInit(): void {
this.configurationService.configurationUpdated.subscribe(() => this.configurationUpdated());
}
private configurationUpdated() {
return this.httpService.get('configuration/getVideo?videoUID='+ this.part.properties['referenceUID']).subscribe(videoData => {
this.videoSource = videoData;
});
}
>On client. html:
<video width="320" height="240" controls="controls" preload="auto">
<source src="{{videoSource}}}" type="video/mp4">
</video>
>On server
Configuration.cs:
[HttpGet]
public BitArray GetVideo(Guid? videoUid)
{
return VideoFactory.GetVideo(videoUid);
}
VideoFactory.cs:
public static BitArray GetVideo(Guid? videoUID)
{
if (videoUID.HasValue && videoUID != Guid.Empty)
{
foreach (var fileInfo in contentFolder.GetFiles())
{
if (Path.GetFileNameWithoutExtension(fileInfo.FullName) == videoUID.ToString())
{
byte[] bytes = File.ReadAllBytes(fileInfo.FullName);
return new BitArray(bytes);
}
}
}
}
客户端上的>。ts:
导出类VideoLayoutPartComponent实现OnInit{
@Input()部分:LayoutPart;
视频来源:SafeUrl;
构造函数(私有httpService:httpService,私有configurationService:configurationService){}
ngOnInit():void{
this.configurationService.configurationUpdated.subscribe(()=>this.configurationUpdated());
}
私有配置更新(){
返回此.httpService.get('configuration/getVideo?videoUID='+this.part.properties['referenceUID'])。订阅(videoData=>{
this.videoSource=视频数据;
});
}
>在client.html上:
>在服务器上
Configuration.cs:
[HttpGet]
公共位数组GetVideo(Guid?videoUid)
{
返回VideoFactory.GetVideo(videoUid);
}
VideoFactory.cs:
公共静态位数组GetVideo(Guid?videoUID)
{
if(videoUID.HasValue&&videoUID!=Guid.Empty)
{
foreach(contentFolder.GetFiles()中的var fileInfo)
{
if(Path.GetFileNameWithoutExtension(fileInfo.FullName)==videoUID.ToString())
{
byte[]bytes=File.ReadAllBytes(fileInfo.FullName);
返回新的位数组(字节);
}
}
}
}
参考UID来自客户端,服务器找到视频,在字节数组中成功处理并发送回。但是客户端没有感知到字节,浏览器冻结。请帮助我了解如何由客户端接受数组并播放视频。我解决了以下问题: 在client.html上:
<div class="main">
<video playsinline controlsList="nodownload" controls autoplay [src]="videoSource">
videoSource error
</video>
</div>
尝试将http请求设置为
responseType:'blob'
export class VideoLayoutPartComponent implements OnInit {
@Input() part: LayoutPart;
videoSource: SafeUrl;
constructor(private sanitizer: DomSanitizer, private httpService: HttpService, private configurationService: ConfigurationService) { }
ngOnInit(): void {
this.configurationService.configurationUpdated.subscribe(() => this.configurationUpdated());
}
private configurationUpdated() {
return this.httpService.get<string>('configuration/getVideo?videoUID=' + this.part.properties['referenceUID']).subscribe(result => {
this.videoSource = this.sanitizer.bypassSecurityTrustResourceUrl('data:video/mp4;base64,' + result);
});
}
}
[HttpGet]
public ActionResult GetVideo(Guid? videoUid)
{
return Json(VideoFactory.GetVideo(videoUid));
}
public class VideoFactory
{
public static string GetVideo(Guid? videoUID)
{
var contentFolder = new DirectoryInfo(AppDataFolderHelper.GetFolder("Server/Config/Resources"));
if (videoUID.HasValue && videoUID != Guid.Empty)
{
foreach (var fileInfo in contentFolder.GetFiles())
{
if (Path.GetFileNameWithoutExtension(fileInfo.FullName) == videoUID.ToString())
return Convert.ToBase64String(File.ReadAllBytes(fileInfo.FullName));
}
}
return null;
}
}