Coder Social home page Coder Social logo

bowser's People

Contributors

eelcocramer avatar pererikb avatar prussich avatar stefanalund avatar superdump avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bowser's Issues

Problems with Bowser

Hello,

I have some problems with my webapp. I want to build a web-based QR-Code-Scanner and there are issues, when i run it in Bowser. I have to use the environment camera to scan the code. Everything is working fine on mobile/desktop firefox/chrome.

I believe that there are some problems with MediaStreamTrack or the Canvas part.

What do i need to change to make it work on iOS with bowser?
I hope you can help me, because this is very important.

Live-View of the code: http://79.133.50.35:3000/qrcode (Site may change during development)

I use the following code:

<div class="select">
    <label for="videoSource">Video source:
      <select id="videoSource"></select><br><br>
    </label>
</div>
<video muted="" autoplay=""></video><br>
<canvas></canvas>

And javascript:

var videoElement = document.querySelector('video');
var videoSelect = document.querySelector('select#videoSource');

var canvas = window.canvas = document.querySelector('canvas');

videoElement.onplay = function() {
    setInterval(snapshot, 1000);
};


function snapshot() {
    var ratio_y = videoElement.videoHeight / videoElement.videoWidth;
    //Hier wird die größe des zu decodierenden Bildes festgelegt.
    var x = 200;
    canvas.width = x;
    canvas.height = x * ratio_y;
    canvas.getContext('2d').drawImage(videoElement, 0, 0, canvas.width, canvas.height);
    //qrcode.decode(canvas.toDataURL());
}

navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;

function gotSources(sourceInfos) {
    for (var i = 0; i !== sourceInfos.length; ++i) {
        var sourceInfo = sourceInfos[i];
        var option = document.createElement('option');
        option.value = sourceInfo.id;
        if (sourceInfo.kind === 'video') {
            option.text = sourceInfo.label || 'camera ' + (videoSelect.length + 1);
            videoSelect.appendChild(option);
        } else {
            console.log('Some other kind of source: ', sourceInfo);
        }
    }
}


if (typeof MediaStreamTrack.getSources === 'undefined') {
    console.log('This browser does not support MediaStreamTrack. Try Chrome.');
    var has_sources = false;
} else {
    MediaStreamTrack.getSources(gotSources);
    var has_sources = true;
}


//Mozilla/5.0 (iOS; like Mac OS X) AppleWebKit/536.36 (KHTML, like Gecko) not Chrome/27.0.1500.95 Mobile/10B141 Safari/537.36 Bowser/0.2.1

function successCallback(stream) {
    window.stream = stream; // make stream available to console
    videoElement.src = window.URL.createObjectURL(stream);
}

function errorCallback(error) {
    console.log('navigator.getUserMedia error: ', error);
}

function start() {
    if (window.stream) {
        videoElement.src = null;
        window.stream.stop();
    }
    var videoSource = videoSelect.value;

    if (has_sources) {
        var constraints = {
            audio: false,
            video: {
                optional: [{
                    sourceId: videoSource
                }]
            }
        };
    } else {
        var constraints = {
            "audio": false,
            "video": {
                "facingMode": "environment"
            }
        };
        document.querySelector('.select').remove();
    }

    navigator.getUserMedia(constraints, successCallback, errorCallback);
}
videoSelect.onchange = start;
start();

Possible to include screencasting as well?

I'm loving this demo, I'm wondering if theres an opportunity for a more 1 way type connection, where the phone would broadcast the camera, screencast the website, and audio. The viewer would only receive the phone camera, screencast, and audio and broadcast audio.

owr_bridge.h file not found

Maybe I made a mistake while running the app. When i try to build it it gaves me the error of '/Users/doe/bowser-master/bowser-ios/Bowser/BowserAppDelegate.m:32:10: 'owr_bridge.h' file not found'

Could you help me to find out what i am doing wrong? or any guide to follow?

iOS 9 App Transport Security policy issue

HTTP only sites can no longer load:

Error Domain=NSURLErrorDomain Code=-1022 "The resource could not be loaded because the App Transport Security policy requires the use of a secure connection." UserInfo={NSUnderlyingError=0x160c74290 {Error Domain=kCFErrorDomainCFNetwork Code=-1022 "The resource could not be loaded because the App Transport Security policy requires the use of a secure connection." UserInfo={NSErrorFailingURLStringKey=http://demo.openwebrtc.org/, NSLocalizedDescription=The resource could not be loaded because the App Transport Security policy requires the use of a secure connection., NSErrorFailingURLKey=http://demo.openwebrtc.org/}}, NSErrorFailingURLStringKey=http://demo.openwebrtc.org/, NSErrorFailingURLKey=http://demo.openwebrtc.org/, NSLocalizedDescription=The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.}

OpenTok / TokBox support

After compiling and running it on my iPhone, I attempted to load a page that I've been working on that uses the OpenTok/TokBox libraries (WebRTC-based video chat platform).

The page loads with no errors, but the pre-detection of whether or not WebRTC is present fails. The variables/objects that it's looking for are below:

if (!navigator.mozGetUserMedia && !navigator.webkitGetUserMedia) {
...
return false;
}

If I remove the pre-detection, I get a JS error that prevents the page from fully loading.

I'm assuming that perhaps the functions are implemented differently in Bowser, so I have the following questions about the WebRTC implementation in Bowser:

  1. Were navigator.mozGetUserMedia or nagivator.webkitGetUserMedia implemented under different object/method names?

  2. Is there any documentation regarding the potential differences in building web pages for Bowser?

  3. Where in the source would the definition of the methods attached to the nagivator object be found?

It's possible that TokBox/OpenTok would not be compatible with your WebRTC implementation or that perhaps only some minor shims would be required to use the correct object/method names - I'm just trying to determine in which direction I should go.

iceConnectionState and iceGatheringState are never updated

These two fields always remain in the NEW state and never change on Bowser, which makes it difficult to know if a connection has been established or not.

Please implement those state machines as specified.

Also, as I noted #53 onaddstream never gets called on Bowser, this might be related?

Error using RecordRTC to record videos using getUserMedia

Hi, Hopefully you can help me to solve my issue

I saw the main problem is when the library tries to take the picture of the canvas, canvas.toDataURL('image/webp') it returns a 'image/png'. For that reason it's impossible to create a video. I had to create a gif but again the gif is not shown in Bowser al least the blob:url gif (and it doesn't have sound).

Could you tell me how I can record a video with sound using a video format that I can use to upload to youtube?

Thank you

Leonardo

Bowser 0.3.1 from App Store fails to start on iPad Mini

Bowser 0.3.1 installed from the App Store fails to start on my iPad Mini.

The same iPad Mini is able to run Bowser that I compile and run from Xcode.

The crash log is located at: https://gist.github.com/paericksen/799106ff44f7097a95d3

The output on the console is:

Feb  6 14:20:20 Andys-iPad-Mini Bowser[437] <Error>: assertion failed: 12B466: libxpc.dylib + 51955 [63E5390F-F156-3BDC-AD59-B826676CE6D0]: 0x7d
Feb  6 14:20:20 Andys-iPad-Mini Unknown[437] <Error>: 
Feb  6 14:20:40 Andys-iPad-Mini SpringBoard[43] <Warning>: Forcing crash report of <FBApplicationProcess: 0x164663d0; Bowser; pid: 437> (reason: 1, description: com.ericsson.research.mario.appstore.Bowser failed to scene-create in time)
Feb  6 14:20:40 Andys-iPad-Mini ReportCrash[438] <Error>: task_set_exception_ports(B07, 400, D03, 0, 0) failed with error (4: (os/kern) invalid argument)
Feb  6 14:20:40 Andys-iPad-Mini SpringBoard[43] <Warning>: Finished crash reporting.
Feb  6 14:20:40 Andys-iPad-Mini SpringBoard[43] <Warning>: BSXPCMessage received error for message: Connection invalid
Feb  6 14:20:40 Andys-iPad-Mini com.apple.xpc.launchd[1] (UIKitApplication:com.ericsson.research.mario.appstore.Bowser[0x7968][437]) <Notice>: Service exited due to signal: Killed: 9
Feb  6 14:20:40 Andys-iPad-Mini ReportCrash[438] <Notice>: Saved report to /var/mobile/Library/Logs/CrashReporter/Bowser_2015-02-06-142040_Andys-iPad-Mini.ips
Feb  6 14:20:41 Andys-iPad-Mini SpringBoard[43] <Warning>: Application 'UIKitApplication:com.ericsson.research.mario.appstore.Bowser[0x7968]' exited abnormally via signal.
Feb  6 14:20:41 Andys-iPad-Mini assertiond[58] <Warning>: Could not set priority of <BKNewProcess: 0x17e597a0; com.ericsson.research.mario.appstore.Bowser; pid: 437; hostpid: -1> to 2, priority: No such process
Feb  6 14:20:41 Andys-iPad-Mini assertiond[58] <Warning>: Could not set priority of <BKNewProcess: 0x17e597a0; com.ericsson.research.mario.appstore.Bowser; pid: 437; hostpid: -1> to 4096, priority: No such process
Feb  6 14:20:41 Andys-iPad-Mini SpringBoard[43] <Warning>: Unable to deliver -[UIRemoteApplication showTopMostMiniAlertWithSynchronizationPort:] message to port 0: (ipc/send) invalid destination port

Failed to set remote offer sdp: Called with SDP without DTLS fingerprint.

I've been developing a webapp (entirely in the browser, no native app build) and have been using Bowser to test on iOS. A couple of months ago I had a connection working between Bowser and Chrome, but am returning to it now and failing. Chrome is throwing an error when processing an offer coming from Bowser: "Failed to set remote offer sdp: Called with SDP without DTLS fingerprint." I'm using the simplepeer library (https://github.com/feross/simple-peer) as a javascript wrapper. I'm not sure if there is a config option I'm missing or if Chrome has moved on to a newer protocol and Bowser's offers haven't caught up... anyone have advice?

Swipe navigation

Use edge swipe gestures to navigate back and forth between pages.

Installation and configuration for work

I was walking around with a bad hands: I do not know develop for iOS only javascript, and I use javascript functions that need camera, audio .. there is a time I had seen the bowser but it was removed so I went back and to my surprise he is alive and free.

My intention is to just use the webview to access my website and run my normal functions and functioning as a native application (thanks to the resources that this porporsiona framework)

that's the problem, I do not know where to start! I read the wiki but feel lost, someone to guide me?

I have Mac OS Yosemite, xCode latest version

I think this will be very useful for future lays

Performance bottleneck in image copying

I've been testing OpenWebRTC in combination with Bowser on an iPad Mini Gen 1 (armv7), and noticed that image buffer copying/moving takes up a significant portion of time on this particular device.

When profiling with Time Analyzer, a _platform_memmove call that originates from WebCore seems to take up at least 12% of CPU when displaying local video on demo.openwebrtc.io:38080 (not calling), and this only gets worse once a call is initiated.

I'm not quite sure why this bottleneck is appearing for local video, as the video screen is very small in comparison to the window size. Can anybody shine some light on this?

None of the test pages is working when using iOS SDK 8.1

After spending a few days, and I finally managed to build openwebrtc successfully and got Bowser to work using iOS SDK 8.1
Happy days, but not for too long, I installed the Bowser app on my iPhone 6+ and iPad mini 2, none of the links below is working:
http://googlechrome.github.io/webrtc/samples/web/content/getusermedia/gum/
http://demo.openwebrtc.io:38080/
https://apprtc.appspot.com/

We have a WebRTC test page, which falls back to use flash if WebRTC is not available, the Bowser app keeps complaining for no flash plugin installed
http://docs.learnosity.com/demos/products/questionsapi/webrtc/index.php

Could anyone shed some light on this? I am really stuck here now.

Error processing ICE candidates

Hi,

I have a problem running the sample project for a 2-peers connection: iPhone 5 running the browser project and Chrome accessing the demo page.

Scenario:

Output:

  • notice on Chrome a black div created, but unable to establish the connection
  • 'Error processing ICE candidates' error printed on Chrome demo page

Does anyone how to fix this problem?

Thanks,
Dorin

Fix console.log

The JavaScript console.log() is currently not visible in Bowser. Adding this feature will be significantly easier after we have moved to WKWebView as it is very simple to bridge JS and native code.

Speech recognition?

Although getUserMedia is helpful for getting camera input, I'm developing a web app that uses speech recognition. I looked into Pocketsphinx.js, but it's dictionary seems small and when I tried running the demo in Bowser, it responded in the Status section of the page "No live audio input in this browser."

So, since getUserMedia won't cut it, is there any way to use webkitSpeechRecognition in Bowser?

onaddstream never called

I've been debugging this for days now but can't figure it out. We are building a server that does some video processing on the video that clients send to it via WebRTC.

After the SDP offer and answer are exchanged and the setRemoteDescription was called on the client (Bowser), I expect an onaddstream event so that I can attach the remote stream to my video element, but that event is never called. I made sure that my handler is attached correctly and waiting, but it's never called. This happens only on Bowser, on FF and Chrome everything happens as expected.

Here are the SDP messages (I suppose it must have something to do with those). On Chrome for example they look different.

Bowser's offer:
v=0
o=- 1442807039473499600 1 IN IP4 127.0.0.1
s=-
t=0 0
a=msid-semantic:WMS F+fGCqttcKBXfUsLIdWML4xXyM8gGTGFpG01
m=audio 1 RTP/SAVPF 111 8 0
c=IN IP4 0.0.0.0
a=rtcp-mux
a=sendrecv
a=rtpmap:111 OPUS/48000/2
a=rtpmap:8 PCMA/8000
a=rtpmap:0 PCMU/8000
a=ssrc:3363789318 cname:user1957962398@host-8460443c
a=ssrc:3363789318 msid:F+fGCqttcKBXfUsLIdWML4xXyM8gGTGFpG01 pZvECFn0dXRZRT+BZzQ6ZfwQ9d+2ELO81S+Z
a=ice-ufrag:xVdc
a=ice-pwd:xc4CvnmGQqWBT2YjD5QgJz
a=candidate:19 1 UDP 2013266431 fe80::e864:66ff:fe5c:5f54 50283 typ host
a=fingerprint:sha-256 0F:05:9D:19:74:57:4C:A7:4C:1F:D1:A7:5B:95:F5:42:9C:19:D7:EA:C4:CC:72:34:49:A1:3C:94:E6:41:8C:76
a=setup:actpass
m=video 61126 RTP/SAVPF 103 100 120
c=IN IP4 192.168.0.128
a=rtcp:50280 IN IP4 192.168.0.128
a=rtcp-mux
a=sendrecv
a=rtpmap:103 H264/90000
a=rtpmap:100 VP8/90000
a=rtpmap:120 RTX/90000
a=fmtp:103 packetization-mode=1
a=fmtp:120 apt=100;rtx-time=200
a=rtcp-fb:100 nack
a=rtcp-fb:103 nack pli
a=rtcp-fb:100 nack pli
a=rtcp-fb:103 ccm fir
a=rtcp-fb:100 ccm fir
a=ssrc:2177512475 cname:user1957962398@host-8460443c
a=ssrc:2177512475 msid:F+fGCqttcKBXfUsLIdWML4xXyM8gGTGFpG01 jotyiYbInfwDlI31dQuwGs5RcHIuznTt+ggO
a=ice-ufrag:i93T
a=ice-pwd:1RTqS/xZ0F97gTehEbixct
a=candidate:10 1 UDP 2013266431 fe80::e864:66ff:fe5c:5f54 54152 typ host
a=candidate:11 1 TCP 1019216383 fe80::e864:66ff:fe5c:5f54 9 typ host tcptype active
a=candidate:12 1 TCP 1015022079 fe80::e864:66ff:fe5c:5f54 63778 typ host tcptype passive
a=candidate:13 1 UDP 2013266431 192.168.0.128 61126 typ host
a=candidate:14 1 TCP 1019216383 192.168.0.128 9 typ host tcptype active
a=candidate:15 1 TCP 1015022079 192.168.0.128 63780 typ host tcptype passive
a=candidate:16 1 UDP 2013266431 fe80::886:2c8a:72d3:b27e 50281 typ host
a=candidate:17 1 TCP 1019216383 fe80::886:2c8a:72d3:b27e 9 typ host tcptype active
a=candidate:18 1 TCP 1015022079 fe80::886:2c8a:72d3:b27e 63782 typ host tcptype passive
a=candidate:10 2 UDP 2013266430 fe80::e864:66ff:fe5c:5f54 54153 typ host
a=candidate:11 2 TCP 1019216382 fe80::e864:66ff:fe5c:5f54 9 typ host tcptype active
a=candidate:12 2 TCP 1015022078 fe80::e864:66ff:fe5c:5f54 63779 typ host tcptype passive
a=candidate:13 2 UDP 2013266430 192.168.0.128 50280 typ host
a=candidate:14 2 TCP 1019216382 192.168.0.128 9 typ host tcptype active
a=candidate:15 2 TCP 1015022078 192.168.0.128 63781 typ host tcptype passive
a=candidate:16 2 UDP 2013266430 fe80::886:2c8a:72d3:b27e 50282 typ host
a=candidate:17 2 TCP 1019216382 fe80::886:2c8a:72d3:b27e 9 typ host tcptype active
a=candidate:18 2 TCP 1015022078 fe80::886:2c8a:72d3:b27e 63783 typ host tcptype passive
a=fingerprint:sha-256 0F:05:9D:19:74:57:4C:A7:4C:1F:D1:A7:5B:95:F5:42:9C:19:D7:EA:C4:CC:72:34:49:A1:3C:94:E6:41:8C:76
a=setup:actpass
m=application 54150 DTLS/SCTP 5000
c=IN IP4 192.168.0.128
a=sendrecv
a=ice-ufrag:pNu8
a=ice-pwd:gcQrmt7D5o3g4NVzI08sos
a=candidate:1 1 UDP 2013266431 fe80::e864:66ff:fe5c:5f54 54308 typ host
a=candidate:2 1 TCP 1019216383 fe80::e864:66ff:fe5c:5f54 9 typ host tcptype active
a=candidate:3 1 TCP 1015022079 fe80::e864:66ff:fe5c:5f54 63775 typ host tcptype passive
a=candidate:4 1 UDP 2013266431 192.168.0.128 54150 typ host
a=candidate:5 1 TCP 1019216383 192.168.0.128 9 typ host tcptype active
a=candidate:6 1 TCP 1015022079 192.168.0.128 63776 typ host tcptype passive
a=candidate:7 1 UDP 2013266431 fe80::886:2c8a:72d3:b27e 54151 typ host
a=candidate:8 1 TCP 1019216383 fe80::886:2c8a:72d3:b27e 9 typ host tcptype active
a=candidate:9 1 TCP 1015022079 fe80::886:2c8a:72d3:b27e 63777 typ host tcptype passive
a=fingerprint:sha-256 0F:05:9D:19:74:57:4C:A7:4C:1F:D1:A7:5B:95:F5:42:9C:19:D7:EA:C4:CC:72:34:49:A1:3C:94:E6:41:8C:76
a=setup:actpass
a=sctpmap:5000 webrtc-datachannel 1024

Server answer:

v=0
o=- 6072310859396819853 2 IN IP4 127.0.0.1
s=-
t=0 0
a=msid-semantic: WMS stream
m=audio 9 RTP/SAVPF 111 8 0
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:okovvEM0l16vrnz+
a=ice-pwd:S/krXmc+Z4lb/ymNUNI2zzNg
a=fingerprint:sha-256 5C:E6:6B:C6:5A:9A:E3:B1:63:0E:3C:A1:26:CE:CC:5B:92:0F:EF:6D:E1:2A:A9:E6:6E:71:67:E4:2E:B3:AD:CC
a=setup:active
a=mid:audio
a=recvonly
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10; useinbandfec=1
a=rtpmap:8 PCMA/8000
a=rtpmap:0 PCMU/8000
a=maxptime:60
m=video 9 RTP/SAVPF 100 120
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:wUxPz7k7sbjNCSzA
a=ice-pwd:0P84nOudZszipWr24T0CtZNp
a=fingerprint:sha-256 5C:E6:6B:C6:5A:9A:E3:B1:63:0E:3C:A1:26:CE:CC:5B:92:0F:EF:6D:E1:2A:A9:E6:6E:71:67:E4:2E:B3:AD:CC
a=setup:active
a=mid:video
a=sendrecv
a=rtcp-mux
a=rtpmap:100 VP8/90000
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=rtpmap:120 rtx/90000
a=fmtp:120 apt=100
a=ssrc-group:FID 887725331 3859995201
a=ssrc:887725331 cname:yf6wM/0S+1bFCmDJ
a=ssrc:887725331 msid:stream video
a=ssrc:887725331 mslabel:stream
a=ssrc:887725331 label:video
a=ssrc:3859995201 cname:yf6wM/0S+1bFCmDJ
a=ssrc:3859995201 msid:stream video
a=ssrc:3859995201 mslabel:stream
a=ssrc:3859995201 label:video
m=application 9 DTLS/SCTP 5000
c=IN IP4 0.0.0.0
b=AS:30
a=ice-ufrag:EjZEUl43cdDDR12/
a=ice-pwd:HljuqfGkPplx/wynIEQPGrIz
a=fingerprint:sha-256 5C:E6:6B:C6:5A:9A:E3:B1:63:0E:3C:A1:26:CE:CC:5B:92:0F:EF:6D:E1:2A:A9:E6:6E:71:67:E4:2E:B3:AD:CC
a=setup:active
a=mid:data
a=sctpmap:5000 webrtc-datachannel 1024

Version 0.5 doesn't ask for camera, doesn't work

I'm running Bowser, as downloaded from the App Store, on an iPad Mini 2 running the latest iOS (8.3) and I'm having difficulty finding even a simple test page that uses OpenWebRTC and works. http://webrtc.github.io/samples/src/content/getusermedia/gum/ for example seems pretty simple but all I see in Bowser is a black rectangle and no prompt to allow use of the camera. Are there any test pages that will definitely work in Bowser and use the camera capabilities?

Explore addition of Custom URL Scheme for Bowser

Enhancement: Custom URL Scheme for Bowser

Candidates:

bowser:// or webrtc:// or ...

I wanted to float the idea of adding a custom scheme for bowser into the App config.

For recap:
A custom scheme would allow an app to be opened by the user clicking on a URL that contains the registered scheme.

Example

<a href="bowser://room/join?ABCD1234">Chat to Dave now</a>

  • this would open bowser, kick off the client chat session and try to join room named 'ABCD1234'

or perhaps,

<a href="webrtc://room/join?ABCD1234">Chat to Dave now</a>

<a href="fb://">Open FB App on your iPhone</a>

There are a bunch of examples on the web and some examples from the big players like facebook, pinterest etc., here Custom URL Schemes (iOS): Pintrest, Google+, Instagram, tumblr

A Comprehensive Guide to URL Schemes

I am thinking that from an adoption or pervasive acceptance perspective, that building in the ability to share, create and prompt users to engage in WebRTC session offers by having something as simple as clicking on a link in demos would be useful. Especially as the avenues we have to distribute HTML embedded links is available via all the usual suspects as SMS, iMessage, IM type apps etc.

Bowser is unable to open secure web pages

When attempting to open a web page using https, Bowser is unable to verify the validity of the SSL certificate.

Tested and confirmed on iPad Mini and iPhone 6+ with various different common web sites (www.msn.com, www.cnn.com, www.google.com, www.yahoo.com).

console log output:

Feb  6 14:24:21 Andy--iPhone-6 Bowser[164] <Warning>: webViewDidStartLoading...
Feb  6 14:24:21 Andy--iPhone-6 Bowser[164] <Warning>: creating timer
Feb  6 14:24:22 Andy--iPhone-6 Bowser[164] <Error>:  SecTrustEvaluate  [leaf SSLHostname]
Feb  6 14:24:22 Andy--iPhone-6 Bowser[164] <Warning>: NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9843)
Feb  6 14:24:22 Andy--iPhone-6 Bowser[164] <Warning>: WEBVIEW LOADING ERROR ---- Error Domain=NSURLErrorDomain Code=-1202 "The certificate for this server is invalid. You might be connecting to a server that is pretending to be “www.cnn.com” which could put your confidential information at risk." UserInfo=0x146bdcc0 {NSErrorFailingURLStringKey=https://www.cnn.com/, NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, NSErrorFailingURLKey=https://www.cnn.com/, NSLocalizedDescription=The certificate for this server is invalid. You might be connecting to a server that is pretending to be “www.cnn.com” which could put your confidential information at risk., NSUnderlyingError=0x182540b0 "The certificate for this server is invalid. You might be connecting to a server that is pretending to be “www.cnn.com” which could put your confidential information at risk.", NSURLErrorFailingURLPeerTrustErrorKey=<SecTrustRef: 0x181505b0>}

Bowser as packaging option for Cordova apps

Cordova iOS seems to be simple to be integrated into bowser. It may save your work from an unknown questionable browser to a very helpful mobile app packager. I wonder if you are going to make it as a packing option for Cordova or not.

Version 0.5 crashes on load

Whether it's opened by tapping the home screen icon or using the "bowser://" URL scheme, the app crashes before finishing initializing.

Tabs

Add support for tabs.

Bowser ICE offer SDP cannot be parsed by server?

We are building a server that does some video processing on the video that clients send to it via WebRTC. It works well with Chrome on desktops and on Android, but we can't get it to work on Bowser...

The server side webrtc implementation complains when receiving the first ICE offer:

[000:943] Ignored line: c=IN IP4 0.0.0.0
[000:944] Ignored line: c=IN IP4 192.168.0.124
[000:944] Ignored line: c=IN IP4 192.168.0.124
[000:945] Error(webrtcsdp.cc:371): Failed to parse: "". Reason: Failed to AddTransportInfo with content name: audio

This is running on an iPad Air 2 which is a 64bit device. I installed Bowser from the App store, I don't have access to an ios development environment so I cannot build it myself...

When looking over the offer I can't see anything that might trigger this, have you guys ever seen something like this before? It fails to parse an empty string, but where, how, why? For completeness here is the offer SDP (with empty lines between blocks for readability):

v=0
o=- 1442288273838514200 1 IN IP4 127.0.0.1
s=-
t=0 0
a=msid-semantic:WMS 0bUMqllvZ+38dekVJb9fOu/YyeMlSpOf+SLC

m=audio 1 RTP/SAVPF 111 8 0
c=IN IP4 0.0.0.0
a=rtcp-mux
a=sendrecv
a=rtpmap:111 OPUS/48000/2
a=rtpmap:8 PCMA/8000
a=rtpmap:0 PCMU/8000
a=ssrc:76579041 cname:user2965996170@host-17fe929f
a=ssrc:76579041 msid:0bUMqllvZ+38dekVJb9fOu/YyeMlSpOf+SLC WtrAwG2WrzvMpe+xmPNkSGcErzI2Q7q7xzVV
a=ice-ufrag:Pw3J
a=ice-pwd:aViTPywUvC8FiK7tmZcfrv
a=candidate:37 1 UDP 2013266431 fe80::e864:66ff:fe5c:5f54 57970 typ host
a=fingerprint:sha-256 1D:67:82:2E:1D:35:12:1C:CC:47:F0:A6:35:44:F6:F2:26:34:93:5B:95:98:25:2C:35:44:9A:5F:7E:7F:05:37
a=setup:actpass

m=video 59119 RTP/SAVPF 103 100 120
c=IN IP4 192.168.0.124
a=rtcp:57967 IN IP4 192.168.0.124
a=rtcp-mux
a=sendrecv
a=rtpmap:103 H264/90000
a=rtpmap:100 VP8/90000
a=rtpmap:120 RTX/90000
a=fmtp:103 packetization-mode=1
a=fmtp:120 apt=100;rtx-time=200
a=rtcp-fb:100 nack
a=rtcp-fb:103 nack pli
a=rtcp-fb:100 nack pli
a=rtcp-fb:103 ccm fir
a=rtcp-fb:100 ccm fir
a=ssrc:4154056881 cname:user2965996170@host-17fe929f
a=ssrc:4154056881 msid:0bUMqllvZ+38dekVJb9fOu/YyeMlSpOf+SLC o/3Q6yktomtKq9Uns+4vi0JukCwPk5506HxT
a=ice-ufrag:9XcU
a=ice-pwd:HAmvUFKb78nWxjso2GaHtG
a=candidate:28 1 UDP 2013266431 fe80::e864:66ff:fe5c:5f54 52997 typ host
a=candidate:29 1 TCP 1019216383 fe80::e864:66ff:fe5c:5f54 9 typ host tcptype active
a=candidate:30 1 TCP 1015022079 fe80::e864:66ff:fe5c:5f54 63721 typ host tcptype passive
a=candidate:31 1 UDP 2013266431 192.168.0.124 59119 typ host
a=candidate:32 1 TCP 1019216383 192.168.0.124 9 typ host tcptype active
a=candidate:33 1 TCP 1015022079 192.168.0.124 63723 typ host tcptype passive
a=candidate:34 1 UDP 2013266431 fe80::886:2c8a:72d3:b27e 57968 typ host
a=candidate:35 1 TCP 1019216383 fe80::886:2c8a:72d3:b27e 9 typ host tcptype active
a=candidate:36 1 TCP 1015022079 fe80::886:2c8a:72d3:b27e 63725 typ host tcptype passive
a=candidate:28 2 UDP 2013266430 fe80::e864:66ff:fe5c:5f54 52998 typ host
a=candidate:29 2 TCP 1019216382 fe80::e864:66ff:fe5c:5f54 9 typ host tcptype active
a=candidate:30 2 TCP 1015022078 fe80::e864:66ff:fe5c:5f54 63722 typ host tcptype passive
a=candidate:31 2 UDP 2013266430 192.168.0.124 57967 typ host
a=candidate:32 2 TCP 1019216382 192.168.0.124 9 typ host tcptype active
a=candidate:33 2 TCP 1015022078 192.168.0.124 63724 typ host tcptype passive
a=candidate:34 2 UDP 2013266430 fe80::886:2c8a:72d3:b27e 57969 typ host
a=candidate:35 2 TCP 1019216382 fe80::886:2c8a:72d3:b27e 9 typ host tcptype active
a=candidate:36 2 TCP 1015022078 fe80::886:2c8a:72d3:b27e 63726 typ host tcptype passive
a=fingerprint:sha-256 1D:67:82:2E:1D:35:12:1C:CC:47:F0:A6:35:44:F6:F2:26:34:93:5B:95:98:25:2C:35:44:9A:5F:7E:7F:05:37
a=setup:actpass

m=audio 60502 RTP/SAVPF 111 8 0
c=IN IP4 192.168.0.124
a=rtcp:52994 IN IP4 192.168.0.124
a=rtcp-mux
a=recvonly
a=rtpmap:111 OPUS/48000/2
a=rtpmap:8 PCMA/8000
a=rtpmap:0 PCMU/8000
a=ssrc:2025735048 cname:user2965996170@host-17fe929f
a=ice-ufrag:Zhfy
a=ice-pwd:T3PIjicvPuz14iBOosmbTF
a=candidate:19 1 UDP 2013266431 fe80::e864:66ff:fe5c:5f54 63127 typ host
a=candidate:20 1 TCP 1019216383 fe80::e864:66ff:fe5c:5f54 9 typ host tcptype active
a=candidate:21 1 TCP 1015022079 fe80::e864:66ff:fe5c:5f54 63715 typ host tcptype passive
a=candidate:22 1 UDP 2013266431 192.168.0.124 60502 typ host
a=candidate:23 1 TCP 1019216383 192.168.0.124 9 typ host tcptype active
a=candidate:24 1 TCP 1015022079 192.168.0.124 63717 typ host tcptype passive
a=candidate:25 1 UDP 2013266431 fe80::886:2c8a:72d3:b27e 52995 typ host
a=candidate:26 1 TCP 1019216383 fe80::886:2c8a:72d3:b27e 9 typ host tcptype active
a=candidate:27 1 TCP 1015022079 fe80::886:2c8a:72d3:b27e 63719 typ host tcptype passive
a=candidate:19 2 UDP 2013266430 fe80::e864:66ff:fe5c:5f54 63128 typ host
a=candidate:20 2 TCP 1019216382 fe80::e864:66ff:fe5c:5f54 9 typ host tcptype active
a=candidate:21 2 TCP 1015022078 fe80::e864:66ff:fe5c:5f54 63716 typ host tcptype passive
a=candidate:22 2 UDP 2013266430 192.168.0.124 52994 typ host
a=candidate:23 2 TCP 1019216382 192.168.0.124 9 typ host tcptype active
a=candidate:24 2 TCP 1015022078 192.168.0.124 63718 typ host tcptype passive
a=candidate:25 2 UDP 2013266430 fe80::886:2c8a:72d3:b27e 52996 typ host
a=candidate:26 2 TCP 1019216382 fe80::886:2c8a:72d3:b27e 9 typ host tcptype active
a=candidate:27 2 TCP 1015022078 fe80::886:2c8a:72d3:b27e 63720 typ host tcptype passive
a=fingerprint:sha-256 1D:67:82:2E:1D:35:12:1C:CC:47:F0:A6:35:44:F6:F2:26:34:93:5B:95:98:25:2C:35:44:9A:5F:7E:7F:05:37
a=setup:actpass

m=video 62024 RTP/SAVPF 103 100 120
c=IN IP4 192.168.0.124
a=rtcp:63124 IN IP4 192.168.0.124
a=rtcp-mux
a=recvonly
a=rtpmap:103 H264/90000
a=rtpmap:100 VP8/90000
a=rtpmap:120 RTX/90000
a=fmtp:103 packetization-mode=1
a=fmtp:120 apt=100;rtx-time=200
a=rtcp-fb:100 nack
a=rtcp-fb:103 nack pli
a=rtcp-fb:100 nack pli
a=rtcp-fb:103 ccm fir
a=rtcp-fb:100 ccm fir
a=ssrc:608919872 cname:user2965996170@host-17fe929f
a=ice-ufrag:kTRX
a=ice-pwd:eBqB/vmye8ly/Xnt1ItgjD
a=candidate:10 1 UDP 2013266431 fe80::e864:66ff:fe5c:5f54 54108 typ host
a=candidate:11 1 TCP 1019216383 fe80::e864:66ff:fe5c:5f54 9 typ host tcptype active
a=candidate:12 1 TCP 1015022079 fe80::e864:66ff:fe5c:5f54 63709 typ host tcptype passive
a=candidate:13 1 UDP 2013266431 192.168.0.124 62024 typ host
a=candidate:14 1 TCP 1019216383 192.168.0.124 9 typ host tcptype active
a=candidate:15 1 TCP 1015022079 192.168.0.124 63711 typ host tcptype passive
a=candidate:16 1 UDP 2013266431 fe80::886:2c8a:72d3:b27e 63125 typ host
a=candidate:17 1 TCP 1019216383 fe80::886:2c8a:72d3:b27e 9 typ host tcptype active
a=candidate:18 1 TCP 1015022079 fe80::886:2c8a:72d3:b27e 63713 typ host tcptype passive
a=candidate:10 2 UDP 2013266430 fe80::e864:66ff:fe5c:5f54 54109 typ host
a=candidate:11 2 TCP 1019216382 fe80::e864:66ff:fe5c:5f54 9 typ host tcptype active
a=candidate:12 2 TCP 1015022078 fe80::e864:66ff:fe5c:5f54 63710 typ host tcptype passive
a=candidate:13 2 UDP 2013266430 192.168.0.124 63124 typ host
a=candidate:14 2 TCP 1019216382 192.168.0.124 9 typ host tcptype active
a=candidate:15 2 TCP 1015022078 192.168.0.124 63712 typ host tcptype passive
a=candidate:16 2 UDP 2013266430 fe80::886:2c8a:72d3:b27e 63126 typ host
a=candidate:17 2 TCP 1019216382 fe80::886:2c8a:72d3:b27e 9 typ host tcptype active
a=candidate:18 2 TCP 1015022078 fe80::886:2c8a:72d3:b27e 63714 typ host tcptype passive
a=fingerprint:sha-256 1D:67:82:2E:1D:35:12:1C:CC:47:F0:A6:35:44:F6:F2:26:34:93:5B:95:98:25:2C:35:44:9A:5F:7E:7F:05:37
a=setup:actpass

m=application 54106 DTLS/SCTP 5000
c=IN IP4 192.168.0.124
a=sendrecv
a=ice-ufrag:h55z
a=ice-pwd:LT2SfJ9lrsrYD6XfjFe5gJ
a=candidate:1 1 UDP 2013266431 fe80::e864:66ff:fe5c:5f54 65164 typ host
a=candidate:2 1 TCP 1019216383 fe80::e864:66ff:fe5c:5f54 9 typ host tcptype active
a=candidate:3 1 TCP 1015022079 fe80::e864:66ff:fe5c:5f54 63706 typ host tcptype passive
a=candidate:4 1 UDP 2013266431 192.168.0.124 54106 typ host
a=candidate:5 1 TCP 1019216383 192.168.0.124 9 typ host tcptype active
a=candidate:6 1 TCP 1015022079 192.168.0.124 63707 typ host tcptype passive
a=candidate:7 1 UDP 2013266431 fe80::886:2c8a:72d3:b27e 54107 typ host
a=candidate:8 1 TCP 1019216383 fe80::886:2c8a:72d3:b27e 9 typ host tcptype active
a=candidate:9 1 TCP 1015022079 fe80::886:2c8a:72d3:b27e 63708 typ host tcptype passive
a=fingerprint:sha-256 1D:67:82:2E:1D:35:12:1C:CC:47:F0:A6:35:44:F6:F2:26:34:93:5B:95:98:25:2C:35:44:9A:5F:7E:7F:05:37
a=setup:actpass
a=sctpmap:5000 webrtc-datachannel 1024

error with existing webrtc app

The app is built with easyrtc and running well in chrome and ff. but when i try to connect with bowser i get the following error:
set-remote-description: Failed to set remote offer sdp: Called with SDP without DTLS fingerprint.

App crashes when trying to join a room

Hi,

I downloaded and built the openwebrtc framework for iOS on the 18th of October and then ran the Bowser app via Xcode on a first generation iPad mini running iOS 8.0.2.

The app starts alright and it opens the camera fine. The video orientation is always set to landscape but that's not a major issue. I've tried establishing a call with a browser on a computer on the openwebrtc demo page, http://demo.openwebrtc.io. Most of the times the app crashes when trying to join a room already set up, or when the other party is about to join the room set up on bowser.

I've also gotten an 'error processing ICE candidates' which has already been mentioned in another issue.

Any ideas? Any help would be greatly appreciated.

Thanks,
Nikos

Application crashes on startup on older devices

Hi I am not sure this belongs here so delete it if its not supposed to be here. I have installed bowser from the appstore and it crashes on startup on my ipad 2 with the latest version of iOS 8.1.

Browser spoofing feature

I am attempting to use Bowser with Firefox Hello, but at this time Firefox Hello is seeing my iOS user agent string and giving me an error about iOS not supporting WebRTC. Normally this would be a correct assumption, but thanks to Bowser this is not the case. I plan to send feedback to Mozilla in regards to this, but I also suggest a user agent spoofing feature for Bowser. This will ensure users won't encounter similar issues and be stuck without a solution.

Bookmarks

Add support for bookmarking pages.

IPhone 4 - ios 7.x bowser is always showing blackscreen only

Can anyone please fix the bowser to make it at-least work with openwebrtc or simplewebrtc or apprtc? Since day 1 i was not able to make Bowser ever work. Please see following screen shot:

Google Hangout - audio/video works perfectly
Talky - audio works perfectly.
With Bowser - nothing works

20150327_144750

After execute of Bowser this is what my screen shows and then suddently while after it shows the previous screen.

20150327_144815

I am the saddest guy in the planet who tried every-time with Bowser and not yet seen it working.

build issue with new openwebrtc update

ld: warning: ARM function not 4-byte aligned: _ffi_call_SYSV from ../../openwebrtc/openwebrtc-deps-armv7-ios/lib/libffi.a(sysv.o)
ld: warning: ARM function not 4-byte aligned: .ffi_call_SYSV_end from ../../openwebrtc/openwebrtc-deps-armv7-ios/lib/libffi.a(sysv.o)
ld: warning: ARM function not 4-byte aligned: _ffi_closure_SYSV from ../../openwebrtc/openwebrtc-deps-armv7-ios/lib/libffi.a(sysv.o)
ld: warning: ARM function not 4-byte aligned: .Lclosure_epilogue from ../../openwebrtc/openwebrtc-deps-armv7-ios/lib/libffi.a(sysv.o)
ld: warning: ARM function not 4-byte aligned: .Lretint from ../../openwebrtc/openwebrtc-deps-armv7-ios/lib/libffi.a(sysv.o)
ld: warning: ARM function not 4-byte aligned: .Lretlonglong from ../../openwebrtc/openwebrtc-deps-armv7-ios/lib/libffi.a(sysv.o)
ld: warning: ARM function not 4-byte aligned: .ffi_closure_SYSV_end from ../../openwebrtc/openwebrtc-deps-armv7-ios/lib/libffi.a(sysv.o)
ld: warning: ARM function not 4-byte aligned: _ffi_arm_trampoline from ../../openwebrtc/openwebrtc-deps-armv7-ios/lib/libffi.a(sysv.o)
Undefined symbols for architecture armv7:
"_kVTCompressionPropertyKey_MaxKeyFrameInterval", referenced from:
_gst_vtenc_session_configure_max_keyframe_interval in libgstapplemedia.a(libgstapplemedia_la-vtenc.o)
"_kVTCompressionPropertyKey_ExpectedFrameRate", referenced from:
_gst_vtenc_session_configure_expected_framerate in libgstapplemedia.a(libgstapplemedia_la-vtenc.o)
"_kVTCompressionPropertyKey_AverageBitRate", referenced from:
_gst_vtenc_session_configure_bitrate in libgstapplemedia.a(libgstapplemedia_la-vtenc.o)
"_kVTProfileLevel_H264_Baseline_AutoLevel", referenced from:
_gst_vtenc_create_session in libgstapplemedia.a(libgstapplemedia_la-vtenc.o)
"_kVTCompressionPropertyKey_AllowTemporalCompression", referenced from:
_gst_vtenc_create_session in libgstapplemedia.a(libgstapplemedia_la-vtenc.o)
"_VTSessionCopyProperty", referenced from:
_gst_vtenc_session_dump_property in libgstapplemedia.a(libgstapplemedia_la-vtenc.o)
"_VTCompressionSessionCreate", referenced from:
_plugin_init in libgstapplemedia.a(libgstapplemedia_la-plugin.o)
_gst_vtenc_create_session in libgstapplemedia.a(libgstapplemedia_la-vtenc.o)
"_VTCompressionSessionEncodeFrame", referenced from:
_gst_vtenc_encode_frame in libgstapplemedia.a(libgstapplemedia_la-vtenc.o)
"_VTSessionCopySupportedPropertyDictionary", referenced from:
_gst_vtenc_session_dump_properties in libgstapplemedia.a(libgstapplemedia_la-vtenc.o)
"_VTDecompressionSessionCreate", referenced from:
_gst_vtdec_create_session in libgstapplemedia.a(libgstapplemedia_la-vtdec.o)
"_VTCompressionSessionPrepareToEncodeFrames", referenced from:
_gst_vtenc_create_session in libgstapplemedia.a(libgstapplemedia_la-vtenc.o)
_gst_vtenc_create_session in libgstapplemedia.a(libgstapplemedia_la-vtenc.o)
"_VTCompressionSessionInvalidate", referenced from:
_gst_vtenc_destroy_session in libgstapplemedia.a(libgstapplemedia_la-vtenc.o)
"_kVTCompressionPropertyKey_MaxKeyFrameIntervalDuration", referenced from:
_gst_vtenc_session_configure_max_keyframe_interval_duration in libgstapplemedia.a(libgstapplemedia_la-vtenc.o)
"_VTSessionSetProperty", referenced from:
_gst_vtenc_create_session in libgstapplemedia.a(libgstapplemedia_la-vtenc.o)
_gst_vtenc_session_configure_property_int in libgstapplemedia.a(libgstapplemedia_la-vtenc.o)
_gst_vtenc_session_configure_property_double in libgstapplemedia.a(libgstapplemedia_la-vtenc.o)
"_VTDecompressionSessionInvalidate", referenced from:
_gst_vtdec_invalidate_session in libgstapplemedia.a(libgstapplemedia_la-vtdec.o)
"_kVTCompressionPropertyKey_ProfileLevel", referenced from:
_gst_vtenc_create_session in libgstapplemedia.a(libgstapplemedia_la-vtenc.o)
"_VTCompressionSessionCompleteFrames", referenced from:
_gst_vtenc_finish in libgstapplemedia.a(libgstapplemedia_la-vtenc.o)
"_kVTEncodeFrameOptionKey_ForceKeyFrame", referenced from:
_gst_vtenc_encode_frame in libgstapplemedia.a(libgstapplemedia_la-vtenc.o)
"_VTDecompressionSessionWaitForAsynchronousFrames", referenced from:
_gst_vtdec_push_frames_if_needed in libgstapplemedia.a(libgstapplemedia_la-vtdec.o)
"_VTDecompressionSessionDecodeFrame", referenced from:
_gst_vtdec_handle_frame in libgstapplemedia.a(libgstapplemedia_la-vtdec.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.