1
로컬 멀티 캐스트 스트림이 있습니다. 비디오는 MPEG4 형식입니다. IP 주소를 호스트 (호스트) 및 멀티 캐스트 스트림 (포트) 얻을 수있는 포트 번호가 있습니다. 콘텐츠를 얻으려면 콘텐츠를 얻기 위해 멀티 캐스트 참가 요청을 보내고 연결해야합니다. Android에서 vitamio를 사용하여 멀티 캐스트 스트림 재생
import io.vov.vitamio.MediaPlayer;
import io.vov.vitamio.widget.MediaController;
import io.vov.vitamio.widget.VideoView;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.MulticastSocket;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Enumeration;
import android.app.Activity;
import android.content.Context;
import android.net.Uri;
import android.net.wifi.WifiManager;
import android.os.AsyncTask;
import android.os.Bundle;
public class MainActivity extends Activity {
private static final String HOST = "192.168.1.1";
private static final int PORT = 1234;
int port;
InetAddress address;
DatagramSocket socket = null;
DatagramPacket packet;
byte[] sendBuf = new byte[256];
private VideoView mVideoView;
private MediaController mMediaController;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
if (wifi != null) {
WifiManager.MulticastLock lock = wifi.createMulticastLock("mylock");
lock.acquire();
}
mVideoView = (VideoView) findViewById(R.id.video);
mMediaController = new MediaController(this);
mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
// optional need Vitamio 4.0
mediaPlayer.setPlaybackSpeed(1.0f);
}
});
}
@Override
protected void onResume() {
super.onResume();
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
try {
Enumeration<NetworkInterface> enumeration = NetworkInterface.getNetworkInterfaces();
NetworkInterface eth0 = null;
while (enumeration.hasMoreElements()) {
eth0 = enumeration.nextElement();
if (eth0.getName().equals("eth0")) {
// there is probably a better way to find ethernet
// interface
break;
}
}
InetAddress group = InetAddress.getByName(HOST);
MulticastSocket s = new MulticastSocket(PORT);
s.setReuseAddress(true);
s.setTimeToLive(1);
s.setSoTimeout(10000);
s.joinGroup(new InetSocketAddress(group, PORT), eth0);
Log.log("JOINED GROUP");
byte[] msg = {
'H', 'e', 'l', 'l', 'o'
};
DatagramPacket hi = new DatagramPacket(msg, msg.length, group, TVP_HD_PORT);
s.send(hi);
Log.log("SENT HI TO GROUP")
mVideoView.setVideoURI(Uri.parse("udp://" + HOST + ":" + PORT));
mVideoView.setMediaController(mMediaController);
mVideoView.requestFocus();
} catch (SocketException e) {
Log.log("FAIL");
e.printStackTrace();
} catch (UnknownHostException e) {
Log.log("FAIL");
e.printStackTrace();
} catch (IOException e) {
Log.log("FAIL");
e.printStackTrace();
}
return null;
}
}.execute();
}
}
}
은 내가 Vitamio에서 어떤 오류가 발생하지 않는 다른 게시물 게시물 등 에의 전에 코드베이스의 일부를 몇 가지 문제가 있었지만, 나도 어떤 사진을하지 않습니다. 내 안드로이드 장치가 eth0 장치를 선택한 이유는 이더넷 소켓입니다. (다시, 장치 선택은 다른 게시물을 기반으로하므로 연결할 수 없습니다.) 어쩌면 누군가가 이것을 위해 Vitamio를 사용해 보았나요? 많은 스레드에서 Vitamio가 udp 스트림을 재생할 수있는 사람의 대답을 발견했지만, 결코 메신저가 아닌 방법, Vitamio 라이브러리 src 코드의 샘플 코드를 사용했습니다. 운없이.