Я создаю приложение, в котором музыка c воспроизводится на моем ноутбуке, а также переносится и воспроизводится в подключенных приложениях android. Я использую socket.io.
Я успешно синхронизировал буфер обмена всех устройств, но я не могу придумать способ передачи аудиопотока.
Есть ли способ передать аудиопоток или поток и получить его на стороне android (java) с помощью socket.io. Я провел много исследований и не смог ничего найти. Musi c должен синхронизироваться c со всеми устройствами, и он должен воспроизводиться одновременно. Если присоединяется новый клиент, musi c должен начинаться с того места, где он находится.
Есть ли что-то, предоставленное в socket.io, или мне нужно внести серьезные изменения и переключиться на сервер java, где я знаю несколько вещей. Это nodeJS сводит меня с ума.
Вот код моего сервера, и у меня есть файл "sargi.mp3" в той же папке, который я хочу передать.
(
function(){
var express = require('express')
var app = express()
var path = require('path');
var server = require('http').createServer(app)
const ss = require('socket.io-stream');
var fileSystem = require('file-system')
var io = require('socket.io')(server)
const clipMonit = require('clipboard-monitor');
const clipboardy = require('clipboardy');
let ifaces = require('os').networkInterfaces();
// Iterate over interfaces ...
var adresses = Object.keys(ifaces).reduce(function (result, dev) {
return result.concat(ifaces[dev].reduce(function (result, details) {
return result.concat(details.family === 'IPv4' && !details.internal ? [details.address] : []);
}, []));
});
//MY SERVER CODE START
app.use(express.static(__dirname+'./node_modules'));
server.listen(3000);
app.get("/", (req, res) => {
res.status(200).send("Connected");
});
var monitor = clipMonit(500);
const stream = ss.createStream();
io.on('connection', function(socket){
console.log('We got a user');
//Here the events will come by the user like audio and video sharing
//Sound and audio tesing ends here
socket.on("clipboard", (data)=>{
console.log(data);
clipboardy.writeSync(data)
});
socket.on('disconnect', function(){
socket.disconnect();
console.log("Disconnected");
});
monitor.on('copy', function(data){
console.log(data);
socket.emit('clipboard', {
clip: data
});
});
});
//MY SERVER CODE END
module.exports = { ip : adresses};
}()
)
Здесь мой java код на android стад ios до сих пор. Я надеюсь, что должен быть способ сделать это, потому что наоборот будет очень много времени убивать.
package com.rocketapp.mediumos;
import androidx.appcompat.app.AppCompatActivity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.os.Bundle;
import android.widget.Toast;
import com.github.nkzawa.emitter.Emitter;
import com.github.nkzawa.socketio.client.Socket;
import org.json.JSONException;
import org.json.JSONObject;
import static com.rocketapp.mediumos.MainActivity.getSocket;
public class SharingMedia extends AppCompatActivity {
private Emitter.Listener onNewClip = new Emitter.Listener() {
@Override
public void call(final Object... args) {
runOnUiThread(new Runnable() {
@Override
public void run() {
JSONObject data = (JSONObject) args[0];
String clipboard;
try {
clipboard = data.getString("clip");
} catch (JSONException e) {
return;
}
// add the message to view
Toast.makeText(SharingMedia.this, ""+clipboard, Toast.LENGTH_SHORT).show();
getClipToClipBoard(clipboard);
}
});
}
};
private void getClipToClipBoard(String data){
final ClipboardManager clipboard = (ClipboardManager) this.getSystemService(this.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("MediumOS", data);
clipboard.setPrimaryClip(clip);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sharing_media);
final Socket socket = getSocket();
final ClipboardManager clipboard = (ClipboardManager) this.getSystemService(this.CLIPBOARD_SERVICE);
clipboard.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {
public void onPrimaryClipChanged() {
String a = clipboard.getText().toString();
socket.emit("clipboard", a);
}
});
socket.on("clipboard", onNewClip);
}
}
Заранее спасибо.