pull/137/head
FongMi 3 years ago
parent 1e1c7eb060
commit da198b19fd
  1. 1
      ijkplayer/build.gradle
  2. 15
      ijkplayer/src/main/java/tv/danmaku/ijk/media/player/IMediaPlayer.java
  3. 38
      ijkplayer/src/main/java/tv/danmaku/ijk/media/player/IjkMediaPlayer.java
  4. 2
      ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java

@ -13,4 +13,5 @@ android {
dependencies {
implementation 'androidx.annotation:annotation:1.5.0'
api 'com.hierynomus:smbj:0.11.5'
}

@ -17,11 +17,9 @@
package tv.danmaku.ijk.media.player;
import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Build;
import android.view.Surface;
import android.view.SurfaceHolder;
@ -70,18 +68,13 @@ public interface IMediaPlayer {
void setDisplay(SurfaceHolder sh);
void setDataSource(Context context, Uri uri)
throws IOException, IllegalArgumentException, SecurityException, IllegalStateException;
void setDataSource(Context context, Uri uri) throws IOException, IllegalArgumentException, SecurityException, IllegalStateException;
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
void setDataSource(Context context, Uri uri, Map<String, String> headers)
throws IOException, IllegalArgumentException, SecurityException, IllegalStateException;
void setDataSource(Context context, Uri uri, Map<String, String> headers) throws IOException, IllegalArgumentException, SecurityException, IllegalStateException;
void setDataSource(FileDescriptor fd)
throws IOException, IllegalArgumentException, IllegalStateException;
void setDataSource(FileDescriptor fd) throws IOException, IllegalArgumentException, IllegalStateException;
void setDataSource(String path)
throws IOException, IllegalArgumentException, SecurityException, IllegalStateException;
void setDataSource(String path) throws IOException, IllegalArgumentException, SecurityException, IllegalStateException;
String getDataSource();

@ -20,12 +20,10 @@ package tv.danmaku.ijk.media.player;
import android.content.ContentResolver;
import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.graphics.Bitmap;
import android.graphics.SurfaceTexture;
import android.media.MediaCodecInfo;
import android.media.MediaCodecList;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
@ -33,14 +31,12 @@ import android.os.Looper;
import android.os.Message;
import android.os.ParcelFileDescriptor;
import android.os.PowerManager;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
import android.view.Surface;
import android.view.SurfaceHolder;
import java.io.FileDescriptor;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.lang.ref.WeakReference;
@ -329,39 +325,9 @@ public final class IjkMediaPlayer extends AbstractMediaPlayer {
String scheme = uri.getScheme();
if (ContentResolver.SCHEME_FILE.equals(scheme)) {
setDataSource(uri.getPath());
return;
} else if (ContentResolver.SCHEME_CONTENT.equals(scheme) && Settings.AUTHORITY.equals(uri.getAuthority())) {
// Redirect ringtones to go directly to underlying provider
uri = RingtoneManager.getActualDefaultRingtoneUri(context, RingtoneManager.getDefaultType(uri));
if (uri == null) {
throw new FileNotFoundException("Failed to resolve default ringtone");
}
}
AssetFileDescriptor fd = null;
try {
ContentResolver resolver = context.getContentResolver();
fd = resolver.openAssetFileDescriptor(uri, "r");
if (fd == null) {
return;
}
// Note: using getDeclaredLength so that our behavior is the same
// as previous versions when the content provider is returning
// a full file.
if (fd.getDeclaredLength() < 0) {
setDataSource(fd.getFileDescriptor());
} else {
setDataSource(fd.getFileDescriptor(), fd.getStartOffset(), fd.getDeclaredLength());
}
return;
} catch (SecurityException | IOException ignored) {
} finally {
if (fd != null) {
fd.close();
}
} else {
setDataSource(encodeSpaceChinese(uri.toString()), headers);
}
setDataSource(encodeSpaceChinese(uri.toString()), headers);
}
private String encodeSpaceChinese(String str) throws UnsupportedEncodingException {

@ -407,7 +407,7 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl
mPlayer.setOption(player, "soundtouch", 1);
mPlayer.setOption(player, "start-on-prepared", 1);
mPlayer.setOption(player, "subtitle", 1);
mPlayer.setOption(format, "protocol_whitelist", "async,cache,crypto,file,http,https,ijkhttphook,ijkinject,ijklivehook,ijklongurl,ijksegment,ijktcphook,pipe,rtmp,rtp,tcp,tls,udp,ijkurlhook,data");
mPlayer.setOption(format, "protocol_whitelist", "async,cache,crypto,file,http,https,pipe,rtmp,rtp,tcp,tls,udp,data,ijkinject,ijklongurl,ijksegment,ijkhttphook,ijklivehook,ijktcphook,ijkurlhook,ijkmediadatasource");
if (url.contains("rtsp") || url.contains("udp") || url.contains("rtp")) {
mPlayer.setOption(format, "infbuf", 1);
mPlayer.setOption(format, "rtsp_transport", "tcp");

Loading…
Cancel
Save