我已经构建了一个Windows Phone类,将一些WriteableBitmap转换为AVI全帧(未压缩)。视频真的很大。是否存在一个简单的编解码器实现,比如只是压缩图像的编解码器,或者正在制作下一个/上一个XOR然后在jpeg中压缩它的东西?
Windows Phone不允许任何不安全的代码,并且大多数DLL无法包装到C#WP库中。所以这就是我从头开始编码的原因。请注意,我从头开始编码比学习C ++现有源代码更有效率(我不是C ++编码器),因此我所搜索的是关于压缩AVI格式的信息,无需编写100000行即可实现。我使用AVI是因为规格很简单。
[编辑]
我从2004年的一篇文章中发现了一些关于codeproject的非常有趣的here。将帧转换为mpeg-1是100%C#源。可悲的是,这是i帧,而不是p帧,所以文件比预期的mpeg-1平均文件大小大3倍。
[编辑]
为了描述更多我的项目,我要做的是对捕获的电影应用一些效果。这部电影将上传到Youtube或其他一些网站。因此,用户期望在电话上使用的精确分辨率,至少25帧/秒,良好的质量和短的上传时间。所以我不能停止使用Mpeg-1 I-Frames。我需要研究mpeg-1中的预测。
答案 0 :(得分:1)
我认为这是your previous question的延续/重新发布(但有更多细节)。正如我在该帖子的评论中所提到的,那里有一整套视频编解码器。这种扩散的一个原因是许多人喜欢重新发明轮子。但是,一个更为突出的原因是视频有很多不同的用例。
你似乎要求很多,但你还没有提出很多变数:
我对Windows Phone编程了解不多。但是,任何WP设备在技术上都具有硬件视频编码功能。我已经做了一些粗略的谷歌搜索,以确定您是否在应用程序编程级别获得任何访问权限,但我找不到任何可能的证据(以及this SO answer states该功能不存在)。
我希望给你留下深刻的印象,写一个视频编码器是一个很多的工作(看看我的用户名;我知道从哪里说话)。通常,它们需要相当大的CPU功率(因此,电池功率,尤其是在纯软件中实现时)。但是,您已经对使用标准zlib的编解码器做了一些猜测。实际上,有一些基于直接zlib的视频编解码器,即MSZH和ZLIB,统称为Lossless Codec Libraries。该wiki页面有一个基本的比特流描述(披露:我操作该wiki网站)。我确信WP库包含对zlib编码的访问权限,因此这可能是一个起点,YouTube应该能够消化生成的文件。
还有一个视频编解码器,在您猜测时(Dosbox Capture Codec)结合了XOR和zlib,但它可能不适合您的应用。
图书馆是否提供对标准JPEG的访问(即,它能编码JPEG文件)吗?另一种选择(取决于视频类型)是填充在AVI文件中的静止JPEG图像的连续帧。这称为Motion JPEG或MJPEG。但是,它在比特率上大致相当于仅限内部MPEG-1,你表示它是不合适的。
我希望我已经给你一些想法和有用的途径来寻求解决方案。