Skip to content

Commit dbd9e0b

Browse files
committed
Replace POST with GET to easily play stream media on browser
1 parent fb8f7d9 commit dbd9e0b

File tree

4 files changed

+9
-79
lines changed

4 files changed

+9
-79
lines changed

grpc_gateway_demo/proto/demo_service.proto

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@ import "google/api/httpbody.proto";
2626
service Demo {
2727
rpc GetSomething(GetRequest) returns (stream google.api.HttpBody) {
2828
option (google.api.http) = {
29-
post: "/get"
30-
body: "*"
29+
get: "/get"
3130
};
3231
}
3332
}

grpc_gateway_demo/serving/demo_service_impl.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
namespace grpc_gateway_demo {
2727
namespace serving {
2828

29-
static const int kBufferSize = 32 * 1024;
29+
static const int kBufferSize = 64 * 1024;
3030

3131
::grpc::Status DemoServiceImpl::GetSomething(
3232
::grpc::ServerContext* context,
@@ -57,7 +57,7 @@ ::grpc::Status DemoServiceImpl::GetSomething(
5757
reply.set_data(buffer, byte_read);
5858
writer->Write(reply);
5959
LOG(INFO) << "Send " << byte_read << " bytes";
60-
usleep(500 * 1000);
60+
usleep(100 * 1000);
6161
}
6262
input.close();
6363
return ::grpc::Status::OK;

public/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
</form>
2525
</div>
2626
<div>
27-
<audio id="player" autoplay="autoplay"></audio>
27+
<audio id="player"></audio>
2828
</div>
2929
</div>
3030
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>

public/js/index.js

Lines changed: 5 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -3,84 +3,15 @@ function trim(s) {
33
return s.replace(/(^\s*)|(\s*$)/g, "");
44
}
55

6-
/*async function fetchAudio(filename) {
7-
const requestOptions = {
8-
method: 'POST',
9-
headers: {
10-
'Content-Type': 'application/json'
11-
},
12-
body: JSON.stringify({"filename": filename})
13-
};
14-
15-
let url = "http://" + window.location.hostname + ":8080" + "/get";
16-
// fetch() returns a promise that resolved once headers have been received
17-
return fetch(url, requestOptions)
18-
.then(res => {
19-
if (!res.ok)
20-
throw new Error(`${res.status} = ${res.statusText}`);
21-
// response.body is a readable stream.
22-
// Calling getReader() gives us exclusive access to
23-
// the stream's content
24-
var reader = res.body.getReader();
25-
26-
// read() returns a promise that resolves when a value has been received
27-
return reader
28-
.read()
29-
.then((result) => {
30-
return result;
31-
});
32-
})
33-
}*/
34-
35-
function fetchAudio(filename, callback) {
36-
var url = "http://" + window.location.hostname + ":8080" + "/get";
37-
var xhr = new XMLHttpRequest();
38-
xhr.open('POST', url, true);
39-
xhr.setRequestHeader("Content-Type", "application/json");
40-
xhr.responseType = "arraybuffer";
41-
xhr.onload = function() {
42-
try {
43-
switch(this.status) {
44-
case 200:
45-
callback(xhr.response);
46-
break;
47-
case 404:
48-
throw 'File Not Found';
49-
default:
50-
throw 'Failed to fetch the file';
51-
}
52-
} catch(e) {
53-
console.error(e);
54-
}
55-
};
56-
var data = JSON.stringify({"filename": filename})
57-
xhr.send(data);
58-
}
59-
606
function getSomething() {
617
var filename = document.getElementById('filename').value;
62-
var player = document.getElementById('player');
638
if (trim(filename).length == 0) {
649
alert("Please input the file name");
6510
} else {
66-
var mediaSource = new MediaSource();
67-
player.src = URL.createObjectURL(mediaSource);
68-
mediaSource.addEventListener('sourceopen', function() {
69-
var sourceBuffer = mediaSource.addSourceBuffer('audio/mpeg');
70-
71-
fetchAudio(filename, buffer => {
72-
sourceBuffer.appendBuffer(buffer);
73-
});
74-
75-
/*fetchAudio(filename)
76-
.then((response) => {
77-
sourceBuffer.appendBuffer(response.value);
78-
})
79-
.catch((error) => {
80-
this.setState({
81-
error: error.message
82-
});
83-
});*/
84-
});
11+
var url = "http://" + window.location.hostname + ":8080" + "/get?";
12+
url += encodeURI("filename=" + filename)
13+
var player = document.getElementById('player');
14+
player.src = url;
15+
player.play();
8516
}
8617
}

0 commit comments

Comments
 (0)