如何在不使用 H264 或 H265 编码的情况下从 .avi 容器进行流式传输
Posted
技术标签:
【中文标题】如何在不使用 H264 或 H265 编码的情况下从 .avi 容器进行流式传输【英文标题】:How to streaming from an .avi container without encoding it in H264 or H265 【发布时间】:2022-01-19 09:17:49 【问题描述】:我想流式传输一个 .avi 容器,并且在编码过程中不使用任何编解码器,也就是说,我不希望它以 H264 或 H265 编码,只需上传视频而不对其进行编码,我正在使用.NET 中的 Azure SDK 媒体服务。 azure media services的预设例如在他们的sdk中,他们都使用h264或h265编码并返回一个mp4,我只想上传.avi,看看它是否有可能不应用任何压缩然后下载.avi 谢谢!
【问题讨论】:
AVI 里面有什么? AVI 只是一种容器文件格式 - 它包含某种类型的音频编解码器或视频编解码器。在考虑任何不需要转码的解决方案之前,您需要先了解其中的内容。原因是 - 您要播放的设备可能根本没有编解码器。此外,AVI 不是流式容器格式。充其量,您可以下载它并希望有人拥有其中的编解码器。 @johndeu .avi 容器包含一个比特序列(我们可以说是 rgb24 像素格式的图像)并且没有使用任何编解码器进行编码,也就是说,它是 rawvideo。实际上,一旦我在流式传输时下载了块(分辨率的视频),我自己就知道如何重建它......但问题是 Azure 媒体服务在流式传输过程中将 h264 应用于我,而这就是我不想做... 我只是想使用Azure媒体服务使用的预设,但是当我使用h264编码时我做到了没有损失,即crf 0 我对您要达到的用例感到非常困惑。你能解释更多吗?你现在可以转码了吗?您是否尝试以 HLS 或 DASH 格式将其发送到支持它的设备/播放器?您是否打算使用自定义流媒体协议构建自己的播放器?您想逐步下载文件并播放吗?这是大规模流式传输,还是一个到几个?检查这个 - howvideo.works 我想流式传输我构建的mp4,并且它拥有的信息是正确的,我不希望丢失比它更多的字节,所以在应用azure媒体服务的sdk时,它使用 h264 它正在压缩我并且我正在丢失我以后不知道如何重建的字节(我无法提供视频包含的许多细节,这是我正在从事的项目的机密),我的问题是,你可以使用azure media services SDK,在编码时使用crf = 0,即编码不丢失??? 【参考方案1】:在此处添加答案。看起来您想要使用 CRF(恒定速率因子编码)进行无损或接近无损的编码传递。目前在 AMS 的标准编码器中不支持设置 CRF 编码,但近期会在 SDK 中添加 CRF 编码设置。
目前,您只能使用 H264 或 H265 图层中变换预设中可用的设置。 您可以在 REST API 中最轻松地查看所有可用的编码设置
https://github.com/Azure/azure-rest-api-specs/blob/main/specification/mediaservices/resource-manager/Microsoft.Media/stable/2021-06-01/Encoding.json
或者,如果您查看自己喜欢的 SDK 中的 Transform 对象。查看模型中的 H264Video 和 H264 Layer 类,以及可以在代码中控制的设置的 H265 等效类。
https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.management.media.models.h264video?view=azure-dotnet
https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.management.media.models.h264layer?view=azure-dotnet
【讨论】:
好的,非常感谢您的回答,然后我们将不得不等待与 azure .net sdk 一起发布的新配置。谢谢!以上是关于如何在不使用 H264 或 H265 编码的情况下从 .avi 容器进行流式传输的主要内容,如果未能解决你的问题,请参考以下文章