Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当我有原始H264帧和时间戳时,如何创建视频流?_C#_Video Streaming_H.264_Video Processing - Fatal编程技术网

C# 当我有原始H264帧和时间戳时,如何创建视频流?

C# 当我有原始H264帧和时间戳时,如何创建视频流?,c#,video-streaming,h.264,video-processing,C#,Video Streaming,H.264,Video Processing,我从第三方应用程序收到一个包含原始H264帧和时间戳的包流。我想获取原始帧和时间戳,然后重新流,这样我就可以在像VLC这样的播放器中看到视频 我试图在原始H264帧到达时将其通过TCP套接字传输,实际上我能够在VLC中看到视频。但当然,如果没有时间戳,视频以最大速度播放,然后停止等待其他帧,然后以最大速度再次开始。 我想我需要把这些原始帧放在一个容器中,并用时间戳标记每个帧,但我不知道怎么做。 收到任何帮助(如果使用C#,则更好) 谢谢(1)选项1:计时器 只需使用定时器发送您的单个H264帧

我从第三方应用程序收到一个包含原始H264帧和时间戳的包流。我想获取原始帧和时间戳,然后重新流,这样我就可以在像VLC这样的播放器中看到视频

我试图在原始H264帧到达时将其通过TCP套接字传输,实际上我能够在VLC中看到视频。但当然,如果没有时间戳,视频以最大速度播放,然后停止等待其他帧,然后以最大速度再次开始。 我想我需要把这些原始帧放在一个容器中,并用时间戳标记每个帧,但我不知道怎么做。 收到任何帮助(如果使用C#,则更好)

谢谢

(1)选项1:计时器

只需使用定时器发送您的单个H264帧

timer_delay = (1000/FPS); //if FPS is 30, then sends a frame every 33 milliseconds.
帧(NAL单元)的起始代码为四个字节,即
00 00
,因此在另一个
00
序列开始之前,从一个序列抓取所有字节,包括
00 00 00
,直到最后一个字节。这应该是要发送的帧数据

注意:
我之所以说“应该”,是因为H264有时会对图像进行切片,所以如果您发送一帧而只得到半张图片,这意味着您必须发送两到三个NAL单元序列作为一个完整项(例如:在一个字节数组中)才能看到完整的图像。你将通过积极的实验来学习

(2)选项2:管道
尝试一个免费的命令行工具。实际上,它也是VLC的音频/视频解码器。您可以使用C#的标准输入/输出将接收到的字节发送到FFmpeg(作为一个进程,FFmpeg使用编码器设置运行,例如:输出格式和分辨率等)

以本文为起点: