我们期待开发一个非常有趣的社区门户网站,帮助用户在整个社区内播放他们的实时视频。 我一直在检查像ustream.tv,justin.tv这样的网站,并想知道他们使用的技术是什么/如何。
我在过去几天进行了大量的研究,检查了媒体,以便有效地做到这一点,并找出一些领域的领先公司,如Ooyala.com,brightcove.com提供服务器/技术无缝播放视频在全球范围内。 我很快就会与这些提供商签约。
所以我的问题是,我的网站究竟会如何抓住用户cam的实时Feed,将流发送到ooyala / brightcove,并进一步将其广播给其他社区用户。
到目前为止,我已经发现Flash 8 / Flex确实提供了一些从用户cam获取流的输入。
我想知道你们之前是否有人在研究这个问题之前/可以对我的方法究竟应该是什么有所了解。
提前致谢。 DEV-drupal的
答案 0 :(得分:0)
简单的方法是使用Red5 http://osflash.org/red5
的Flash / Flex客户端Flash Player有一种使用摄像机的方法,Red5服务器是一个开源Flash服务器,可以记录客户端流。
我建议设置Red5并使用它。它可以满足您的一切需求。只需查看API并开始编写测试应用程序。
如何从用户摄像头获取视频:
package {
import flash.display.Sprite;
import flash.media.Camera;
import flash.media.Video;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.events.StatusEvent;
import flash.events.MouseEvent;
import flash.system.SecurityPanel;
import flash.system.Security;
public class Camera_getCameraExample extends Sprite {
private var myTextField:TextField;
private var cam:Camera;
private var t:Timer = new Timer(1000);
public function Camera_getCameraExample() {
myTextField = new TextField();
myTextField.x = 10;
myTextField.y = 10;
myTextField.background = true;
myTextField.selectable = false;
myTextField.autoSize = TextFieldAutoSize.LEFT;
cam = Camera.getCamera();
if (!cam) {
myTextField.text = "No camera is installed.";
} else if (cam.muted) {
myTextField.text = "To enable the use of the camera,\n"
+ "please click on this text field.\n"
+ "When the Flash Player Settings dialog appears,\n"
+ "make sure to select the Allow radio button\n"
+ "to grant access to your camera.";
myTextField.addEventListener(MouseEvent.CLICK, clickHandler);
}else {
myTextField.text = "Connecting";
connectCamera();
}
addChild(myTextField);
t.addEventListener(TimerEvent.TIMER, timerHandler);
}
private function clickHandler(e:MouseEvent):void {
Security.showSettings(SecurityPanel.PRIVACY);
cam.addEventListener(StatusEvent.STATUS, statusHandler);
myTextField.removeEventListener(MouseEvent.CLICK, clickHandler);
}
private function statusHandler(event:StatusEvent):void {
if (event.code == "Camera.Unmuted") {
connectCamera();
cam.removeEventListener(StatusEvent.STATUS, statusHandler);
}
}
private function connectCamera():void {
var vid:Video = new Video(cam.width, cam.height);
vid.x = 10;
vid.y = 10;
vid.attachCamera(cam);
addChild(vid);
t.start();
}
private function timerHandler(event:TimerEvent):void {
myTextField.y = cam.height + 20;
myTextField.text = "";
myTextField.appendText("bandwidth: " + cam.bandwidth + "\n");
myTextField.appendText("currentFPS: " + Math.round(cam.currentFPS) + "\n");
myTextField.appendText("fps: " + cam.fps + "\n");
myTextField.appendText("keyFrameInterval: " + cam.keyFrameInterval + "\n");
}
}
}
如何将视频发送到明亮的海湾
他们有一个API只是阅读它。