微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从Silverlight 4(Beta)流式传输摄像头

Silverlight 4中的新的网络摄像头材料很酷。通过将其作为画笔来显示,它允许超出Flash所有内容的场景。

同时,在本地访问网络摄像头似乎只是一半的故事。没有人购买网络摄像头,所以他们可以拍摄自己的照片,并使他们的滑稽的脸孔。他们购买网络摄像机是因为他们希望其他人看到所产生的视频流,即他们想将视频流传输到互联网,Skype或其他数十个视频聊天网站/应用程序中的任何一个。到目前为止,我还没有想到如何做到这一点

事实证明,如here所示,获得原始(Format32bppArgb格式化)bytestream是非常简单的。

但是,除非我们要将这个原始的字节流传输到一个服务器上(这会使得带宽太多),我们需要以某种方式进行编码。这更复杂。 MS已经在Silverlight中实现了几种编解码器,但据我所知,他们都专注于解码视频流,而不是首先对其进行编码。除了我无法弄清楚如何直接访问H.264编解码器的事实之外,这是事实。

有大量的开源编解码器(例如,在ffmpeg项目here中),但是它们都是用C编写的,并且它们看起来不容易移植到C#。除非翻译10000行代码,看起来像这样,你的想法很有趣:-)

const int b_xy= h->mb2b_xy[left_xy[i]] + 3;
const int b8_xy= h->mb2b8_xy[left_xy[i]] + 1;
*(uint32_t*)h->mv_cache[list][cache_idx ]= *(uint32_t*)s->current_picture.motion_val[list][b_xy + h->b_stride*left_block[0+i*2]];
*(uint32_t*)h->mv_cache[list][cache_idx+8]= *(uint32_t*)s->current_picture.motion_val[list][b_xy + h->b_stride*left_block[1+i*2]];
h->ref_cache[list][cache_idx ]= s->current_picture.ref_index[list][b8_xy + h->b8_stride*(left_block[0+i*2]>>1)];
h->ref_cache[list][cache_idx+8]= s->current_picture.ref_index[list][b8_xy + h->b8_stride*(left_block[1+i*2]>>1)];

Mono项目(here)中的mooncodecs文件夹在C#(ADPCM和Ogg Vorbis)中有多个音频编解码器,还有一个视频编解码器(Dirac),但它们似乎只是实现各自格式的解码部分,如java他们被移植的实现。

我发现Ogg Theora(csTheora,http://www.wreckedgames.com/forum/index.php?topic=1053.0)的C#编解码器,但是再次,它只是解码,它基于它的jheora编解码器。

当然,从Java或者C开始,可能会更容易地从Java端口传输编解码器,但是我发现的唯一的java视频编解码器是仅解码的(如jheora或jirac)。

所以我回到广场一回。看起来像我们通过Silverlight将网络摄像头(或麦克风)连接到互联网的选项如下:

(1)等待微软为此提供指导;

(2)花费大脑周期将C或C编解码器之一移植到Silverlight兼容的C#上;

(3)将原始的未压缩字节流发送到服务器(或者可能像zlib那样稍微压缩),然后将其编码到服务器端;要么

(4)等一下比我聪明得多的人来解决这个问题。

有没有其他人有更好的指导?我错过了一切对其他人来说很明显的东西吗? (例如,Silverlight 4在某个地方有一些我错过了这样的课程吗?)

@H_404_38@解决方法
我刚刚收到了Jason Clary在我博客上的回复

在Mike Taulty的博客中看到关于Silverlight 4测试版中的Videosink / AudioSink的信息。

我以为我会指出,Videosink的OnSample为您提供了一个单独的未压缩的32bpp ARGB框架,可以直接复制到WritableBitmap中。

用手抓住FJCore,C#中的一个jpeg编解码器,并修改它不输出JFIF头。然后,一个一个地写出来,你就有了一个Motion JPEG编解码器。 RFC2435解释了如何将其填充到RTSP流的RTP数据包中。

将PCM音频压缩到ADPCM也是很容易的,但是我还没有找到一个现成的实现。 RFC3551解释了如何将PCM或ADPCM放入RTP数据包中。

将MJPEG和PCM或ADPCM填充到AVI文件中也是相当容易的。 MS对AVI修改的RIFF格式有一些体面的文档,MJPEG和ADPCM都是广泛支持的编解码器。

无论如何,这是一个开始。

当然,一旦遇到了所有这些麻烦,下一个测试版可能会出现在本地支持压缩和流式传输到WMS与更好的WMV编解码器。

以为我会发贴。这是迄今为止所见过的最好的建议。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐