Android手机通过WiFi的流媒体声音

编程入门 行业动态 更新时间:2024-10-28 06:25:47
本文介绍了Android手机通过WiFi的流媒体声音的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我想从流麦克风音频从1机器人到另一个无线网络。 在看了一些例子我做了2应用程序中的每个单一的活动,1捕捉和发送音频和其他接受。

I'm trying to stream audio from the mic from 1 Android to another over WiFi. After looking at some examples I made 2 applications with a single activity in each, 1 to capture and send audio and the other to receive.

我已经使用了Audiorecord和Audiotrack类捕获和播放。但是,我只是听到一些噼里啪啦的声音(现已停止后,我做了一些改动,虽然我而恢复)

I've used the Audiorecord and Audiotrack classes to capture and play. However, i just hear some crackling sound (which has now stopped after i made some changes though i reverted back)

活动发出的声音。

public class VoiceSenderActivity extends Activity { private EditText target; private TextView streamingLabel; private Button startButton,stopButton; public byte[] buffer; public static DatagramSocket socket; private int port=50005; //which port?? AudioRecord recorder; //Audio Configuration. private int sampleRate = 8000; //How much will be ideal? private int channelConfig = AudioFormat.CHANNEL_CONFIGURATION_MONO; private int audioFormat = AudioFormat.ENCODING_PCM_16BIT; private boolean status = true; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); target = (EditText) findViewById (R.id.target_IP); streamingLabel = (TextView) findViewById(R.id.streaming_label); startButton = (Button) findViewById (R.id.start_button); stopButton = (Button) findViewById (R.id.stop_button); streamingLabel.setText("Press Start! to begin"); startButton.setOnClickListener (startListener); stopButton.setOnClickListener (stopListener); } private final OnClickListener stopListener = new OnClickListener() { @Override public void onClick(View arg0) { status = false; recorder.release(); Log.d("VS","Recorder released"); } }; private final OnClickListener startListener = new OnClickListener() { @Override public void onClick(View arg0) { status = true; startStreaming(); } }; public void startStreaming() { Thread streamThread = new Thread(new Runnable() { @Override public void run() { try { int minBufSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat); DatagramSocket socket = new DatagramSocket(); Log.d("VS", "Socket Created"); byte[] buffer = new byte[minBufSize]; Log.d("VS","Buffer created of size " + minBufSize); DatagramPacket packet; final InetAddress destination = InetAddress.getByName(target.getText().toString()); Log.d("VS", "Address retrieved"); recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,sampleRate,channelConfig,audioFormat,minBufSize); Log.d("VS", "Recorder initialized"); recorder.startRecording(); while(status == true) { //reading data from MIC into buffer minBufSize = recorder.read(buffer, 0, buffer.length); //putting buffer in the packet packet = new DatagramPacket (buffer,buffer.length,destination,port); socket.send(packet); } } catch(UnknownHostException e) { Log.e("VS", "UnknownHostException"); } catch (IOException e) { Log.e("VS", "IOException"); } } }); streamThread.start(); } }

活动接收语音

The activity to receive voice

public class VoiceReceiverActivity extends Activity { private Button receiveButton,stopButton; public static DatagramSocket socket; private AudioTrack speaker; //Audio Configuration. private int sampleRate = 8000; //How much will be ideal? private int channelConfig = AudioFormat.CHANNEL_CONFIGURATION_MONO; private int audioFormat = AudioFormat.ENCODING_PCM_16BIT; private boolean status = true; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); receiveButton = (Button) findViewById (R.id.receive_button); stopButton = (Button) findViewById (R.id.stop_button); findViewById(R.id.receive_label); receiveButton.setOnClickListener(receiveListener); stopButton.setOnClickListener(stopListener); } private final OnClickListener stopListener = new OnClickListener() { @Override public void onClick(View v) { status = false; speaker.release(); Log.d("VR","Speaker released"); } }; private final OnClickListener receiveListener = new OnClickListener() { @Override public void onClick(View arg0) { status = true; startReceiving(); } }; public void startReceiving() { Thread receiveThread = new Thread (new Runnable() { @Override public void run() { try { DatagramSocket socket = new DatagramSocket(50005); Log.d("VR", "Socket Created"); byte[] buffer = new byte[256]; //minimum buffer size. need to be careful. might cause problems. try setting manually if any problems faced int minBufSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat); speaker = new AudioTrack(AudioManager.STREAM_MUSIC,sampleRate,channelConfig,audioFormat,minBufSize,AudioTrack.MODE_STREAM); speaker.play(); while(status == true) { try { DatagramPacket packet = new DatagramPacket(buffer,buffer.length); socket.receive(packet); Log.d("VR", "Packet Received"); //reading content from packet buffer=packet.getData(); Log.d("VR", "Packet data read into buffer"); //sending data to the Audiotrack obj i.e. speaker speaker.write(buffer, 0, minBufSize); Log.d("VR", "Writing buffer content to speaker"); } catch(IOException e) { Log.e("VR","IOException"); } } } catch (SocketException e) { Log.e("VR", "SocketException"); } } }); receiveThread.start(); } }

我用Wireshark来检查数据包被发送,我可以看到的数据包。源然而,是发送设备和目标太类似的物理地址的MAC地址。不知道这是相关的,但。

I used wireshark to check if the packets are being sent and i can see the packets. The source however, is the MAC address of the sending device and destination too something like a physical address. Not sure if this is relevant though.

那么,有什么问题?

推荐答案

嘿那里是一个开源库称为Libstreaming是用于在使用WIFI网络流语音/视频。只要看一看吧:

Hey there is an Open Source library called "Libstreaming" that is used for streaming voice/video over the network using WIFI. Just Have a look at it:

github/fyhertz/libstreaming

有也提供了一些例子,请看看吧:

There are also some examples provided, kindly have a look at it:

github/fyhertz/libstreaming-examples

我已经使用图书馆RTSP流音频在网络上,希望对大家有用。

I have used the library to Stream RTSP Audio over the network,hope it may be useful.

更多推荐

Android手机通过WiFi的流媒体声音

本文发布于:2023-11-23 14:26:40,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1621772.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:流媒体   声音   手机   Android   WiFi

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!