Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
NotesChapter
ijkplayer
提交
6ce7af47
I
ijkplayer
项目概览
NotesChapter
/
ijkplayer
与 Fork 源项目一致
从无法访问的项目Fork
通知
5
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
I
ijkplayer
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
6ce7af47
编写于
8月 22, 2013
作者:
B
bbcallen
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ffplay: support options
上级
c225a139
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
113 addition
and
17 deletion
+113
-17
android/ijkmediademo/.classpath
android/ijkmediademo/.classpath
+4
-4
android/ijkmediademo/src/tv/danmaku/ijk/media/demo/VideoPlayerActivity.java
...mo/src/tv/danmaku/ijk/media/demo/VideoPlayerActivity.java
+4
-1
android/ijkmediaplayer/.classpath
android/ijkmediaplayer/.classpath
+2
-2
android/ijkmediaplayer/src/tv/danmaku/ijk/media/player/IjkMediaPlayer.java
...layer/src/tv/danmaku/ijk/media/player/IjkMediaPlayer.java
+11
-1
android/ijkmediaplayer/src/tv/danmaku/ijk/media/player/option/AvFormatOption.java
...rc/tv/danmaku/ijk/media/player/option/AvFormatOption.java
+7
-0
android/ijkmediaplayer/src/tv/danmaku/ijk/media/player/option/format/AvFormatOption_HttpDetectRangeSupport.java
.../option/format/AvFormatOption_HttpDetectRangeSupport.java
+25
-0
android/ijkmediawidget/.classpath
android/ijkmediawidget/.classpath
+3
-3
android/ijkmediawidget/src/tv/danmaku/ijk/media/widget/VideoView.java
...ediawidget/src/tv/danmaku/ijk/media/widget/VideoView.java
+6
-1
ijkmedia/ijkplayer/android/ijkplayer_android.c
ijkmedia/ijkplayer/android/ijkplayer_android.c
+11
-0
ijkmedia/ijkplayer/android/ijkplayer_android.h
ijkmedia/ijkplayer/android/ijkplayer_android.h
+2
-0
ijkmedia/ijkplayer/android/ijkplayer_jni.c
ijkmedia/ijkplayer/android/ijkplayer_jni.c
+28
-2
ijkmedia/ijkplayer/ff_ffplay.c
ijkmedia/ijkplayer/ff_ffplay.c
+8
-3
ijkmedia/ijkplayer/ff_ffplay.h
ijkmedia/ijkplayer/ff_ffplay.h
+2
-0
未找到文件。
android/ijkmediademo/.classpath
浏览文件 @
6ce7af47
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry
kind=
"src"
path=
"src"
/>
<classpathentry
kind=
"src"
path=
"gen"
/>
<classpathentry
kind=
"con"
path=
"com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"
/>
<classpathentry
exported=
"true"
kind=
"con"
path=
"com.android.ide.eclipse.adt.LIBRARIES"
/>
<classpathentry
exported=
"true"
kind=
"con"
path=
"com.android.ide.eclipse.adt.DEPENDENCIES"
/>
<classpathentry
combineaccessrules=
"false"
kind=
"src"
path=
"/ijkmediawidget"
/>
<classpathentry
combineaccessrules=
"false"
kind=
"src"
path=
"/ijkmediaplayer"
/>
<classpathentry
kind=
"src"
path=
"src"
/>
<classpathentry
kind=
"src"
path=
"gen"
/>
<classpathentry
combineaccessrules=
"false"
exported=
"true"
kind=
"src"
path=
"/ijkmediawidget"
/>
<classpathentry
combineaccessrules=
"false"
exported=
"true"
kind=
"src"
path=
"/ijkmediaplayer"
/>
<classpathentry
kind=
"output"
path=
"bin/classes"
/>
</classpath>
android/ijkmediademo/src/tv/danmaku/ijk/media/demo/VideoPlayerActivity.java
浏览文件 @
6ce7af47
...
...
@@ -66,6 +66,9 @@ public class VideoPlayerActivity extends Activity {
// invalid variant
mVideoPath = "http://64k.kankanews.com/hls-smgvod/2013/06/30/f969bb5169365989b2e9bace44353a2b.m3u8";
// segment 404
mVideoPath = "http://live.gslb.letv.com/gslb?stream_id=btv6_800&tag=live&ext=m3u8"
// 720p sina
mVideoPath = "http://edge.v.iask.com/101692214.hlv?KID=sina,viask&Expires=1374249600&ssig=8dvnUJ%2Fb2n"
...
...
@@ -78,7 +81,7 @@ public class VideoPlayerActivity extends Activity {
super
.
onCreate
(
savedInstanceState
);
setContentView
(
R
.
layout
.
activity_player
);
mVideoPath
=
"http://
v.youku.com/player/getM3U8/vid/XNTY1ODE5NjMy/type//v.
m3u8"
;
mVideoPath
=
"http://
live.gslb.letv.com/gslb?stream_id=btv6_800&tag=live&ext=
m3u8"
;
Intent
intent
=
getIntent
();
String
intentAction
=
intent
.
getAction
();
...
...
android/ijkmediaplayer/.classpath
浏览文件 @
6ce7af47
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry
kind=
"src"
path=
"src"
/>
<classpathentry
kind=
"src"
path=
"gen"
/>
<classpathentry
kind=
"con"
path=
"com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"
/>
<classpathentry
exported=
"true"
kind=
"con"
path=
"com.android.ide.eclipse.adt.LIBRARIES"
/>
<classpathentry
exported=
"true"
kind=
"con"
path=
"com.android.ide.eclipse.adt.DEPENDENCIES"
/>
<classpathentry
kind=
"src"
path=
"src"
/>
<classpathentry
kind=
"src"
path=
"gen"
/>
<classpathentry
kind=
"output"
path=
"bin/classes"
/>
</classpath>
android/ijkmediaplayer/src/tv/danmaku/ijk/media/player/IjkMediaPlayer.java
浏览文件 @
6ce7af47
...
...
@@ -22,7 +22,7 @@ import java.io.IOException;
import
java.lang.ref.WeakReference
;
import
tv.danmaku.ijk.media.player.annotations.AccessedByNative
;
import
tv.danmaku.ijk.media.player.option.AvFormatOption
;
import
android.annotation.SuppressLint
;
import
android.content.Context
;
import
android.graphics.SurfaceTexture
;
...
...
@@ -323,6 +323,16 @@ public final class IjkMediaPlayer extends SimpleMediaPlayer {
}
private
native
void
_reset
();
public
void
setAvOption
(
AvFormatOption
option
)
{
setAvFormatOption
(
option
.
getName
(),
option
.
getValue
());
}
public
void
setAvFormatOption
(
String
name
,
String
value
)
{
_setAvFormatOption
(
name
,
value
);
}
private
native
void
_setAvFormatOption
(
String
name
,
String
value
);
@Override
public
void
setAudioStreamType
(
int
streamtype
)
{
...
...
android/ijkmediaplayer/src/tv/danmaku/ijk/media/player/option/AvFormatOption.java
0 → 100644
浏览文件 @
6ce7af47
package
tv.danmaku.ijk.media.player.option
;
public
interface
AvFormatOption
{
public
abstract
String
getName
();
public
abstract
String
getValue
();
}
android/ijkmediaplayer/src/tv/danmaku/ijk/media/player/option/format/AvFormatOption_HttpDetectRangeSupport.java
0 → 100644
浏览文件 @
6ce7af47
package
tv.danmaku.ijk.media.player.option.format
;
import
tv.danmaku.ijk.media.player.option.AvFormatOption
;
// some video servers do not accept "Range: bytes=0-"
public
final
class
AvFormatOption_HttpDetectRangeSupport
implements
AvFormatOption
{
public
static
AvFormatOption_HttpDetectRangeSupport
Enable
=
new
AvFormatOption_HttpDetectRangeSupport
(
"1"
);
public
static
AvFormatOption_HttpDetectRangeSupport
Disable
=
new
AvFormatOption_HttpDetectRangeSupport
(
"0"
);
private
final
String
mValue
;
public
AvFormatOption_HttpDetectRangeSupport
(
String
value
)
{
mValue
=
value
;
}
public
String
getName
()
{
return
"http-detect-range-support"
;
}
public
String
getValue
()
{
return
mValue
;
}
}
android/ijkmediawidget/.classpath
浏览文件 @
6ce7af47
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry
kind=
"src"
path=
"src"
/>
<classpathentry
kind=
"src"
path=
"gen"
/>
<classpathentry
kind=
"con"
path=
"com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"
/>
<classpathentry
exported=
"true"
kind=
"con"
path=
"com.android.ide.eclipse.adt.LIBRARIES"
/>
<classpathentry
exported=
"true"
kind=
"con"
path=
"com.android.ide.eclipse.adt.DEPENDENCIES"
/>
<classpathentry
kind=
"src"
path=
"src"
/>
<classpathentry
kind=
"src"
path=
"gen"
/>
<classpathentry
combineaccessrules=
"false"
kind=
"src"
path=
"/ijkmediaplayer"
/>
<classpathentry
combineaccessrules=
"false"
exported=
"true"
kind=
"src"
path=
"/ijkmediaplayer"
/>
<classpathentry
kind=
"output"
path=
"bin/classes"
/>
</classpath>
android/ijkmediawidget/src/tv/danmaku/ijk/media/widget/VideoView.java
浏览文件 @
6ce7af47
...
...
@@ -31,6 +31,7 @@ import tv.danmaku.ijk.media.player.AbstractMediaPlayer.OnSeekCompleteListener;
import
tv.danmaku.ijk.media.player.AbstractMediaPlayer.OnVideoSizeChangedListener
;
import
tv.danmaku.ijk.media.player.AndroidMediaPlayer
;
import
tv.danmaku.ijk.media.player.IjkMediaPlayer
;
import
tv.danmaku.ijk.media.player.option.format.AvFormatOption_HttpDetectRangeSupport
;
import
android.app.Activity
;
import
android.app.AlertDialog
;
import
android.content.Context
;
...
...
@@ -244,7 +245,10 @@ public class VideoView extends SurfaceView implements
mDuration
=
-
1
;
mCurrentBufferPercentage
=
0
;
// mMediaPlayer = new AndroidMediaPlayer();
mMediaPlayer
=
new
IjkMediaPlayer
();
IjkMediaPlayer
ijkMediaPlayer
=
new
IjkMediaPlayer
();
ijkMediaPlayer
.
setAvOption
(
AvFormatOption_HttpDetectRangeSupport
.
Disable
);
mMediaPlayer
=
ijkMediaPlayer
;
mMediaPlayer
.
setOnPreparedListener
(
mPreparedListener
);
mMediaPlayer
.
setOnVideoSizeChangedListener
(
mSizeChangedListener
);
mMediaPlayer
.
setOnCompletionListener
(
mCompletionListener
);
...
...
@@ -255,6 +259,7 @@ public class VideoView extends SurfaceView implements
mMediaPlayer
.
setDataSource
(
mUri
.
toString
());
mMediaPlayer
.
setDisplay
(
mSurfaceHolder
);
mMediaPlayer
.
setScreenOnWhilePlaying
(
true
);
mMediaPlayer
.
prepareAsync
();
mCurrentState
=
STATE_PREPARING
;
attachMediaController
();
...
...
ijkmedia/ijkplayer/android/ijkplayer_android.c
浏览文件 @
6ce7af47
...
...
@@ -160,6 +160,17 @@ void ijkmp_reset(IjkMediaPlayer *mp)
MPTRACE
(
"ijkmp_reset()=void"
);
}
void
ijkmp_set_format_option
(
IjkMediaPlayer
*
mp
,
const
char
*
name
,
const
char
*
value
)
{
assert
(
mp
);
MPTRACE
(
"ijkmp_reset()"
);
pthread_mutex_lock
(
&
mp
->
mutex
);
ffp_set_format_option
(
mp
->
ffplayer
,
name
,
value
);
pthread_mutex_unlock
(
&
mp
->
mutex
);
MPTRACE
(
"ijkmp_reset()=void"
);
}
void
ijkmp_inc_ref
(
IjkMediaPlayer
*
mp
)
{
assert
(
mp
);
...
...
ijkmedia/ijkplayer/android/ijkplayer_android.h
浏览文件 @
6ce7af47
...
...
@@ -169,6 +169,8 @@ long ijkmp_get_current_position(IjkMediaPlayer *mp);
long
ijkmp_get_duration
(
IjkMediaPlayer
*
mp
);
void
ijkmp_reset
(
IjkMediaPlayer
*
mp
);
void
ijkmp_set_format_option
(
IjkMediaPlayer
*
mp
,
const
char
*
name
,
const
char
*
value
);
void
ijkmp_set_android_surface
(
JNIEnv
*
env
,
IjkMediaPlayer
*
mp
,
jobject
android_surface
);
void
*
ijkmp_set_weak_thiz
(
IjkMediaPlayer
*
mp
,
void
*
weak_thiz
);
...
...
ijkmedia/ijkplayer/android/ijkplayer_jni.c
浏览文件 @
6ce7af47
...
...
@@ -261,6 +261,31 @@ IjkMediaPlayer_reset(JNIEnv *env, jobject thiz)
ijkmp_dec_ref_p
(
&
mp
);
}
static
void
IjkMediaPlayer_setAvFormatOption
(
JNIEnv
*
env
,
jobject
thiz
,
jobject
name
,
jobject
value
)
{
MPTRACE
(
"IjkMediaPlayer_setAvFormatOption"
);
IjkMediaPlayer
*
mp
=
jni_get_media_player
(
env
,
thiz
);
const
char
*
c_name
=
NULL
;
const
char
*
c_value
=
NULL
;
JNI_CHECK_GOTO
(
mp
,
env
,
"java/lang/IllegalStateException"
,
"mpjni: setAvFormatOption: null mp"
,
LABEL_RETURN
);
c_name
=
(
*
env
)
->
GetStringUTFChars
(
env
,
name
,
NULL
);
JNI_CHECK_GOTO
(
c_name
,
env
,
"java/lang/OutOfMemoryError"
,
"mpjni: setAvFormatOption: name.string oom"
,
LABEL_RETURN
);
c_value
=
(
*
env
)
->
GetStringUTFChars
(
env
,
value
,
NULL
);
JNI_CHECK_GOTO
(
c_name
,
env
,
"java/lang/OutOfMemoryError"
,
"mpjni: setAvFormatOption: name.string oom"
,
LABEL_RETURN
);
ijkmp_set_format_option
(
mp
,
c_name
,
c_value
);
LABEL_RETURN:
if
(
c_name
)
(
*
env
)
->
ReleaseStringUTFChars
(
env
,
name
,
c_name
);
if
(
c_value
)
(
*
env
)
->
ReleaseStringUTFChars
(
env
,
value
,
c_value
);
ijkmp_dec_ref_p
(
&
mp
);
}
static
void
IjkMediaPlayer_native_init
(
JNIEnv
*
env
)
{
...
...
@@ -282,10 +307,9 @@ IjkMediaPlayer_native_setup(JNIEnv *env, jobject thiz, jobject weak_this)
}
static
void
IjkMediaPlayer_native_finalize
(
JNIEnv
*
env
,
jobject
thiz
)
IjkMediaPlayer_native_finalize
(
JNIEnv
*
env
,
jobject
thiz
,
jobject
name
,
jobject
value
)
{
MPTRACE
(
"IjkMediaPlayer_native_finalize"
);
// TODO: 9 is there any thing not released ?
IjkMediaPlayer_release
(
env
,
thiz
);
}
...
...
@@ -408,6 +432,8 @@ static JNINativeMethod g_methods[] = {
{
"native_init"
,
"()V"
,
(
void
*
)
IjkMediaPlayer_native_init
},
{
"native_setup"
,
"(Ljava/lang/Object;)V"
,
(
void
*
)
IjkMediaPlayer_native_setup
},
{
"native_finalize"
,
"()V"
,
(
void
*
)
IjkMediaPlayer_native_finalize
},
{
"_setAvFormatOption"
,
"(Ljava/lang/String;Ljava/lang/String;)V"
,
(
void
*
)
IjkMediaPlayer_setAvFormatOption
},
};
JNIEXPORT
jint
JNI_OnLoad
(
JavaVM
*
vm
,
void
*
reserved
)
...
...
ijkmedia/ijkplayer/ff_ffplay.c
浏览文件 @
6ce7af47
...
...
@@ -1871,9 +1871,6 @@ static int read_thread(void *arg)
is
->
last_subtitle_stream
=
is
->
subtitle_stream
=
-
1
;
#endif
// TODO: 8 set options from java side
// av_dict_set(&ffp->format_opts, "timeout", "10000000", 0);
ic
=
avformat_alloc_context
();
ic
->
interrupt_callback
.
callback
=
decode_interrupt_cb
;
ic
->
interrupt_callback
.
opaque
=
is
;
...
...
@@ -2496,6 +2493,14 @@ void ffp_destroy_p(FFPlayer **pffp)
*
pffp
=
NULL
;
}
void
ffp_set_format_option
(
FFPlayer
*
ffp
,
const
char
*
name
,
const
char
*
value
)
{
if
(
!
ffp
)
return
;
av_dict_set
(
&
ffp
->
format_opts
,
name
,
value
,
0
);
}
int
ffp_prepare_async_l
(
FFPlayer
*
ffp
,
const
char
*
file_name
)
{
assert
(
ffp
);
...
...
ijkmedia/ijkplayer/ff_ffplay.h
浏览文件 @
6ce7af47
...
...
@@ -36,6 +36,8 @@ void ffp_destroy(FFPlayer *ffp);
void
ffp_destroy_p
(
FFPlayer
**
pffp
);
void
ffp_reset
(
FFPlayer
*
ffp
);
void
ffp_set_format_option
(
FFPlayer
*
ffp
,
const
char
*
name
,
const
char
*
value
);
int
ffp_prepare_async_l
(
FFPlayer
*
ffp
,
const
char
*
file_name
);
int
ffp_start_from_l
(
FFPlayer
*
ffp
,
long
msec
);
int
ffp_start_l
(
FFPlayer
*
ffp
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录