Передача live musi c с сервера узла клиенту android с помощью socket.io - PullRequest
0 голосов
/ 10 марта 2020

Я создаю приложение, в котором музыка 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);
    }
}

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...