您的问题太宽泛,要求场外资源在 stackoverflow 上被认为是偏离主题的。为了避免容易发表意见的陈述,我将把答案限制在一般概念上。
闪存/RTMP
WebRTC
尚未在所有浏览器上可用,因此从当前使用的浏览器捕获网络摄像头输入的最广泛使用的方法是通过插件。最常见的解决方案使用Adobe Flash 播放器 http://www.adobe.com/devnet/adobe-media-server/articles/encoding-live-video-h264.html,无论人们喜欢与否。这是由于H.264
最新版本中的编码支持,以及AAC
, MP3
等音频。
流式传输是使用以下方式完成的RTMP https://en.wikipedia.org/wiki/Real_Time_Messaging_Protocol协议最初是为Flash通信而设计的。该协议适用于TCP
并且有多种口味,例如RTMPS
(RTMP
over TLS/SSL
用于加密),RTMPT
(RTMP
封装在HTTP
用于防火墙穿越)。
流通常使用FLV https://en.wikipedia.org/wiki/Comparison_of_video_container_formats容器格式。
您可以轻松找到使用 Flash 捕获网络摄像头输入并将其流式传输到RTMP
server.
在服务器端,您有两个选择:
- 实施基本的
RTMP
服务器直接与发送库对话并读取流
- 使用开源之一
RTMP
服务器并仅实现一个客户端ASP
(您还可以根据您尝试对应用程序执行的操作即时对传入流进行转码)。
WebRTC
With WebRTC
您可以:
- 在计时器上记录小媒体块并将它们上传到重建流的服务器上(需要连接并重新标记块以避免不连续)。请参阅此答案的链接 https://stackoverflow.com/questions/25523289/sending-a-mediastream-to-host-server-with-webrtc-after-it-is-captured-by-getuser.
- 使用点对点通信功能
WebRTC
服务器是对等方之一。
Adam Roach 提供了第二种情况的可能解决方案,我还没有亲自测试过:
- 浏览器检索其中包含 JavaScript 的网页。
- Browser executes javascript, which:
- 使用获取相机句柄
getUserMedia
,
- 创建一个
RTCPeerConnection
- Calls
createOffer
and setLocalDescription
在RTCPeerConnection
- 向包含报价的服务器发送请求(在
SDP
格式)
- 服务器处理报价
SDP
并生成自己的答案SDP
,
它在响应中返回给浏览器。
- JavaScript 调用
setRemoteDescription
on the RTCPeerConnection
开始媒体流动。
- 服务器开始接收
DTLS/SRTP
来自浏览器的数据包,
然后它会做任何它想做的事情,包括存储
以本地硬盘上易于读取的格式。
Source https://groups.google.com/forum/#!topic/mozilla.dev.media/pos7woJMimo
这将使用VP8
and Vorbis
inside WebM
over SRTP
(UDP
,也可以使用TCP
).
除非你能实现RTCPeerConnection
直接在ASP
使用包装器,您需要一种将流转发到服务器应用程序的方法。
The PeerConnection API
是一个强大的功能WebRTC
。它目前由 Google Hangouts 的 WebRTC 版本使用。你可以阅读:环聊如何使用 WebRTC https://webrtchacks.com/hangout-analysis-philipp-hancke/.