使用HTTP Live Streaming方法播放实时流时,是否可以读取当前元数据(例如标题和艺术家)?这是一个iPhone收音机应用程序.
描述:
我有一个音频播放器的代码.我可以通过单击进度条(在0到mediaplayer.getDuration()之间)从任何持续时间继续音频播放.它非常适合音频播放.
音频流中的问题:
问题:
码:
public class MyAudioPlayer extends Activity
implements OnClickListener{
MediaPlayer mediaPlayer = null;
private boolean isPaused=false;
private boolean isStop = true;
String filePath = null;
String productName = null;
ImageButton btnPlay = null;
ImageButton btnPause = null;
ImageButton btnReset = null;
ImageButton btnStop = null;
AudioManager audioManager = null;
SeekBar volControl = null;
SeekBar progressControl = null;
TextView progressText = null;
long durationInMillis = -1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); …Run Code Online (Sandbox Code Playgroud) 我正在开发一个项目,需要通过HTTP向/从服务器流式传输音频数据.
我们需要使用SPEEX压缩音频数据.
在Flash中,我们可以使用Alchemy和LibSpeex,但我们如何在JavaScript中完成它.可以使用HTML5.
谢谢.
彼得
每次视频/音频流启动时,Internet Download Manager(IDM)都会感觉页面上有多媒体内容,并允许您下载该多媒体内容.
我不认为有可能阻止IDM抓取视频/音频,但有没有办法欺骗IDM来取代错误的视频,或者让IDM很难猜出哪个是真正的视频/音频播放?
编辑:实际上我的问题是从服务器端的角度来看,而不是运行IDM的客户端.所以我想这里的误解是我的错.这里有很多好的答案,但不是我想要的那个
我成功地通过TCP套接字发送和读取文本和图像数据.但我无法发送和读取音频流数据.
服务器上的示例代码:
public class ServerAudio {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
ServerSocket serverSocker = new ServerSocket();
Socket client = null;
serverSocker.bind(new InetSocketAddress(6666));
if (serverSocker.isBound()) {
client = serverSocker.accept();
OutputStream out = client.getOutputStream();
while (true) {
AudioInputStream ain = testPlay("C:/Users/Public/Music/Sample Music/adios.wav");
if (ain != null) {
AudioSystem.write(ain, AudioFileFormat.Type.WAVE, out);
}
}
}
serverSocker.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static AudioInputStream testPlay(String filename) {
AudioInputStream …Run Code Online (Sandbox Code Playgroud) 我已经成功地在我的ubuntu机器上安装了icecast和darkice,并能够在我的局域网上直播.但令我失望的是它有15秒到20秒的延迟.这是非常糟糕的表现.我不认为这是因为我的局域网连接,因为即使我试图在同一台ubuntu机器上听也有延迟!
我试图将icecast配置为没有突发大小,这意味着没有缓冲,这有助于我将延迟减少到大约6秒到8秒.所以,如果您有任何建议或非常好的配置值,那将对我有很大的帮助.
PS我正在播放的格式是mp3.有人建议我应该使用opus编解码器,但我不认为icecast或darkice支持它.
我正在实现从MIC到另一台PC上的java服务器的实时流媒体.但我只听到白噪声.
我已经附加了客户端和服务器程序
Client:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.TargetDataLine;
public class Mic
{
public byte[] buffer;
private int port;
static AudioInputStream ais;
public static void main(String[] args)
{
TargetDataLine line;
DatagramPacket dgp;
AudioFormat.Encoding encoding = AudioFormat.Encoding.PCM_SIGNED;
float rate = 44100.0f;
int channels = 2;
int sampleSize = 16;
boolean bigEndian = true;
InetAddress addr;
AudioFormat format = new AudioFormat(encoding, rate, sampleSize, channels, …Run Code Online (Sandbox Code Playgroud) 我正在使用NAudio库来记录系统麦克风输入 - 连续.
private void RecordStart() {
try {
_sourceStream = new WaveIn {
DeviceNumber = _recordingInstance.InputDeviceIndex,
WaveFormat =
new WaveFormat(
44100,
WaveIn.GetCapabilities(_recordingInstance.InputDeviceIndex).Channels)
};
_sourceStream.DataAvailable += SourceStreamDataAvailable;
_sourceStream.StartRecording();
} catch (Exception exception) {
Log.Error("Recording failes", exception);
}
}
Run Code Online (Sandbox Code Playgroud)
有一个事件处理程序,只要有数据,它就会从记录流中获取数据.
我能够使用现有的音频文件创建一个音频(mp3)HTTP流媒体,并在我的系统中安装VLC播放器.
const int portNumber = 8089;
const string streamName = "fstream_1789846";
const string audio = "C:\\Recording\\Audio\\1789846.wav";
const string windowQuiet = "-I dummy --dummy-quiet";
const string tanscode = ":sout=#transcode{vcodec=none,acodec=mp3,ab=128,channels=2,samplerate=44100}";
var stream = String.Format(@":http{{mux=mp3,dst=:{0}/{1}}}", portNumber, streamName);
const string keep = ":sout-keep"; …Run Code Online (Sandbox Code Playgroud) 我想用ffmpeg直接将音频(opus编解码器)流式传输到android设备.
在PC上我开始流:
./ffmpeg -re -stream_loop -1 -i akgld-c8mxm.opus -acodec libopus -ac 1 -ab 96k -vn -f rtp rtp://192.168.0.100:6000
Run Code Online (Sandbox Code Playgroud)
其中192.168.0.100 - 我手机的本地wifi地址.
在Android设备上我尝试播放流:
public void tryPlayStream() {
String ip = Utils.wifiIpAddress(this);
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitNetwork().build();
StrictMode.setThreadPolicy(policy);
AudioManager audio = (AudioManager) getSystemService(AUDIO_SERVICE);
audio.setMode(AudioManager.MODE_IN_COMMUNICATION);
audioGroup = new AudioGroup();
audioGroup.setMode(AudioGroup.MODE_ECHO_SUPPRESSION);
InetAddress inetAddress;
try {
inetAddress = InetAddress.getByName(ip);
audioStream = new AudioStream(inetAddress);
audioStream.setCodec(AudioCodec.PCMA);
audioStream.setMode(RtpStream.MODE_RECEIVE_ONLY);
InetAddress inetAddressRemote = InetAddress.getByName(ip);
audioStream.associate(inetAddressRemote, 6000);
audioStream.join(audioGroup);
} catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
在logcat中我看到下一行:
E/AudioRecord: AudioFlinger could not …Run Code Online (Sandbox Code Playgroud) 我正在尝试为互联网广播电台建立一个网站.我想加入一项功能,允许访问者在网站上播放实时音频流.
我应该开始考虑哪些技术?这通常是怎么做的?有没有一种方法通常被认为是最好的直播?
audio-streaming ×10
android ×2
java ×2
sockets ×2
audio ×1
bass ×1
c# ×1
ffmpeg ×1
html5 ×1
icecast ×1
iphone ×1
javascript ×1
low-latency ×1
metadata ×1
objective-c ×1
opus ×1
speex ×1
tcp ×1
vlc ×1