如何使用"自定义"视频捕获器来创建VideoTrack并提供帧?
创建VideoTrack的经典方法是:
1 - 获取VideoCapturer实例
VideoCapturer capturer = VideoCapturer.create(name);
Run Code Online (Sandbox Code Playgroud)
2 - 创建一个VideoSource
VideoSource videoSource = peerconnectionFactory.createVideoSource(capturer, videoConstraints);
Run Code Online (Sandbox Code Playgroud)
3 - 使用视频源创建VideoTrack
VideoTrack videoTrack = peerconnectionFactory.createVideoTrack("Label", videoSource);
Run Code Online (Sandbox Code Playgroud)
4 - 将轨道添加到MediaStream
我想知道是否有办法改变第一步.不使用本机Capturer实例,而是使用Android版本,并使用回调为VideoTrack提供框架:
public void onPreviewFrame(byte[] data, Camera camera) {
// provide the frames to the VideoTrack
}
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我正在使用Android Play Games - Real Time Multiplayer
我的应用程序.当我创建一个新房间时,回调onRoomCreated()
返回STATUS_NETWORK_ERROR_NO_DATA
5%的时间.我不知道为什么我偶然发现这个错误.
某些帖子建议应在创建新帖子之前关闭.我总是在super.onstop()
打电话之前离开我的房间.我也在onLeftRoom()
创建一个新房间之前等待回调.
堆栈跟踪
02-20 22:57:07.208: I/libjingle(1763): Token type:OAuth2
02-20 22:57:07.208: I/libjingle(1763): Final XMPP server hostname talk.google.com port to 5222
02-20 22:57:07.316: I/libjingle(1763): OpenSSLAdapter::OnConnectEvent
02-20 22:57:07.416: I/libjingle(1763): BeginSSL: talk.google.com
02-20 22:57:07.476: W/libjingle(1763): Warning(openssladapter.cc:388): ContinueSSL -- error -1
02-20 22:57:07.480: W/libjingle(1763): Warning(openssladapter.cc:397): OpenSSLAdapter::Error(ContinueSSL, -1)
02-20 22:57:07.504: I/libjingle(1763): SSL Cleanup
02-20 22:57:07.532: I/libjingle(1763): Token type:OAuth2
02-20 22:57:07.532: I/libjingle(1763): Final XMPP server hostname talk.google.com port to 5222
02-20 …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用WebRtc Native apis创建一个用于视频聊天和消息传递的Android应用程序.我已经通过几个链接,发现android的大部分文档都很模糊,特别是如果你不知道从哪里开始.我按照以下链接,
https://webrtc.org/native-code/android/#
https://www.chromium.org/developers/how-tos/android-build-instructions
但上面提到的链接没有任何意义,因为我想开发一个Android应用程序,这些链接建议下载铬然后构建它.我知道最终的结果将是一个apk,但如果我想编码自己怎么办.我也查看了pubnub和OpenTokRtc,但我也不想使用某些elses信令服务(以及pub和sub键).我尝试了以下链接,
https://github.com/pristineio/webrtc-build-scripts
但对于WebRTC的新手而言,这似乎有点不完整,因为它建议通过以下命令获取WebRtc,
# Pull WebRTC
get_webrtc
Run Code Online (Sandbox Code Playgroud)
最后我尝试了以下链接,
http://simonguest.com/2013/08/06/building-a-webrtc-client-for-android/
但是本教程的问题在于它根本没有更新.Libjingle现在已经转移到github,我不知道如何使用gclient从github获取libjingle.
我的这场斗争是一场灾难.任何人都可以帮我一些更新的文档或教程,我可以用它来了解我需要使用webRTC native apis开发应用程序到底需要什么?请不要给我任何OpenTokRtc或PubNub的链接.
谢谢
我正在尝试将libjingle_peerconnection
框架导入我的Xcode项目,但由于某种原因,我无法import RTCICEServer
在Swift源文件中导入Objective-C头.我试图使用头文件等.我做错了什么?
# Uncomment this line to define a global platform for your project
# platform :ios, '8.0'
# Uncomment this line if you're using Swift
use_frameworks!
target 'VideoRTCTest' do
pod "libjingle_peerconnection"
end
target 'VideoRTCTestTests' do
end
target 'VideoRTCTestUITests' do
end
Run Code Online (Sandbox Code Playgroud)
你知道任何记录良好的库来处理Ruby中Jabber的Jingle(音频/视频)扩展吗?
我下载并安装了libjingle-0.5.2.zip,并根据README还下载并安装了swtoolkit.0.9.1.zip,scons-local-2.1.0.alpha.20101125.tar.gz和expat-2.0. 1.tar.gz,并通过cvs下载获得nrtp.在覆盖了我的Makefile两次,尝试按照写得很差的自述文件后,我想出了几乎可以工作的以下Makefile:
# First, make sure the SCONS_DIR environment variable is set correctly.
SCONS_DIR ?= /usr/src/scons-local/scons-local-2.1.0.alpha.20101125/
#SCONS_DIR ?= /usr/src/scons-local/
export
default: build
# Second, run talk/third_party/expat-2.0.1/configure...
talk/third_party/expat-2.0.1/Makefile:
cd talk/third_party/expat-2.0.1 && ./configure
# ...and talk/third_party/srtp/configure.
talk/third_party/srtp/Makefile:
cd talk/third_party/srtp && ./configure
# Third, go to the talk/ directory and run $path_to_swtoolkit/hammer.sh. Run
# $path_to_swtoolkit/hammer.sh --help for information on how to build for
# different modes.
build: talk/third_party/expat-2.0.1/Makefile talk/third_party/srtp/Makefile
cd talk && ../../swtoolkit/hammer.sh
help:
../swtoolkit/hammer.sh --help
Run Code Online (Sandbox Code Playgroud)
但是,make
给我以下错误:
jcomeau@intrepid:/usr/src/libjingle-0.5.2$ make cd talk …
有人可以提供基于libjingle 0.5.x的一小部分代码,我可以看到如何在不使用XMPP的情况下建立用于传输数据的P2P通道吗?我打算通过非基于XML的协议或通过非libjingle XMPP库提供信令.
对于初学者,我想更多地了解libjingle的功能,这样的例子对我来说是最好的方式.
到目前为止,这是我的研究:
我认为我非常接近让我的Java服务器应用程序通过WebRTC与浏览器页面通信,但我无法让它工作.我觉得我错过了一些小事,所以我希望这里有人可能会有一个建议.
我仔细研究了WebRTC示例 - Java单元测试(org.webrtc.PeerConnectionTest
)和示例Android app(trunk/talk/examples/android
).根据我的经验,我整理了一个使用WebSockets进行信号传输并尝试向Chrome发送视频流的Java应用程序.
问题是浏览器中没有视频,即使我的所有代码(包括Javascript和Java)都按照我期望的顺序执行,也会触及所有正确的日志记录语句.控制台日志中有一些来自本机libjingle代码的可疑输出,但我不知道该怎么做.我在下面的">>"中突出显示了日志中的可疑行.例如,似乎视频端口分配器在创建后不久就被销毁,因此显然有些错误.此外," Changing video state, recv=1 send=0
"似乎也不正确,因为Java方应该发送视频,而不是接收......也许我滥用了这个OfferToReceiveVideo
选项?
如果查看下面的日志,您会看到WebSocket与浏览器的通信工作正常,并且我能够成功将SDP Offer发送到浏览器并从浏览器接收SDP应答.在PeerConnections上设置本地和远程描述似乎也可以正常工作.HTML5视频元素将源集设置为BLOB URL,就像它应该的那样.那么,我能错过什么?我是否需要对ICE候选人做任何事情,即使我的客户端和服务器现在在同一台机器上?
任何建议将不胜感激!
1.134: Java Offer:
v=0
o=- 5893945934600346864 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE video
a=msid-semantic: WMS JavaMediaStream
m=video 1 RTP/SAVPF 100 116 117
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:dJxTlMlXy7uASrDU
a=ice-pwd:r8BRkXVnc4dqCABUDhuRjpp7
a=ice-options:google-ice
a=mid:video
a=extmap:2 urn:ietf:params:rtp-hdrext:toffset
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=sendrecv
a=rtcp-mux
a=crypto:0 AES_CM_128_HMAC_SHA1_80 inline:yq6wOHhk/QfsWuh+1oOEqfB4GjKZzz8XfQnGCDP3
a=rtpmap:100 VP8/90000
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 goog-remb
a=rtpmap:116 red/90000
a=rtpmap:117 ulpfec/90000 …
Run Code Online (Sandbox Code Playgroud) 我有一个Android应用程序作为运行在Node.js服务器上的WebRTC服务器的客户端运行.该应用程序的当前状态是我可以进行视频通话,但无法在DataChannel上发送消息.
这是我的Android应用程序的完整代码.
Home.java
public class Home extends Activity {
public List<PeerConnection.IceServer> iceServers;
private GLSurfaceView videoView;
public static SocketIO socket;
ArrayList<String> userIDs = new ArrayList<>();
private static final String FIELD_TRIAL_VP9 = "WebRTC-SupportVP9/Enabled/";
String RoomId = "";
String sreverURL = "http://xx.xx.xx.xx:xxxx/";
private EditText roomid;
private VideoRenderer.Callbacks remote_view;
private VideoRenderer.Callbacks local_view;
protected PeerConnectionFactory factory;
PeerConnectionFactory.Options options = null;
Events pc_events;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
videoView = (GLSurfaceView) findViewById(R.id.glview_call_remote);
VideoRendererGui.setView(videoView, new Runnable() {
@Override
public void run() {
createPeerConnectionFactory();
} …
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个Android应用程序,该应用程序利用libjingle WebRTC原生Android库,使用WebRTC将用户Android桌面投影到对等方.为此,我已成功使用pristine.io libjingle镜像重新创建Android apprtc示例应用程序:
compile 'io.pristine:libjingle:10531@aar'
Run Code Online (Sandbox Code Playgroud)
在我的应用程序build.gradle文件中.apprtc示例适用于https://apprtc.appspot.com/演示网站.我还创建了一个单独的应用程序,使用MediaProjection
Android API 21中引入的库,按照此处发布的示例,将用户的屏幕记录为H.264编码的mp4文件.
现在,我想将这两个想法结合到一个应用程序中,该应用程序利用来自MediaProjection
和MediaRecorder
/或至少H.264编码文件的原始流作为WebRTC对等连接的视频/音频流.这甚至可能吗?PeerConnection.addStream
libjingle中的方法需要一个实例MediaStream
.如何MediaStream
从原始流或生成的mp4文件创建类型对象?
感谢您提供的任何见解!
libjingle ×10
android ×5
webrtc ×5
cocoapods ×1
google-code ×1
html5-video ×1
ios ×1
java ×1
multiplayer ×1
objective-c ×1
openwebrtc ×1
p2p ×1
python ×1
ruby ×1
signaling ×1
socket.io ×1
swift2 ×1
xmpp ×1