Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xuqlei
easyipcamera
提交
5a50a250
E
easyipcamera
项目概览
xuqlei
/
easyipcamera
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
easyipcamera
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
5a50a250
编写于
4月 17, 2017
作者:
jinlong0603
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修复sps、pps错误、重复问题
上级
2032abc3
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
25 addition
and
21 deletion
+25
-21
Android/app/src/main/java/org/easydarwin/easyipcamera/activity/RecordService.java
...a/org/easydarwin/easyipcamera/activity/RecordService.java
+6
-9
Android/app/src/main/java/org/easydarwin/easyipcamera/camera/EasyIPCamera.java
...java/org/easydarwin/easyipcamera/camera/EasyIPCamera.java
+1
-1
Android/app/src/main/java/org/easydarwin/easyipcamera/camera/MediaStream.java
.../java/org/easydarwin/easyipcamera/camera/MediaStream.java
+7
-8
Android/app/src/main/java/org/easydarwin/easyipcamera/hw/EncoderDebugger.java
.../java/org/easydarwin/easyipcamera/hw/EncoderDebugger.java
+11
-3
未找到文件。
Android/app/src/main/java/org/easydarwin/easyipcamera/activity/RecordService.java
浏览文件 @
5a50a250
...
@@ -64,7 +64,7 @@ public class RecordService extends Service implements EasyIPCamera.IPCameraCallB
...
@@ -64,7 +64,7 @@ public class RecordService extends Service implements EasyIPCamera.IPCameraCallB
private
int
mChannelId
=
1
;
private
int
mChannelId
=
1
;
private
int
mChannelState
=
0
;
private
int
mChannelState
=
0
;
private
int
mFrameRate
=
2
5
;
private
int
mFrameRate
=
2
0
;
private
int
mBitRate
;
private
int
mBitRate
;
private
Context
mApplicationContext
;
private
Context
mApplicationContext
;
private
boolean
codecAvailable
=
false
;
private
boolean
codecAvailable
=
false
;
...
@@ -109,7 +109,7 @@ public class RecordService extends Service implements EasyIPCamera.IPCameraCallB
...
@@ -109,7 +109,7 @@ public class RecordService extends Service implements EasyIPCamera.IPCameraCallB
Log
.
d
(
TAG
,
String
.
format
(
"kim createEnvironment Size=%dx%d"
,
windowWidth
,
windowHeight
));
Log
.
d
(
TAG
,
String
.
format
(
"kim createEnvironment Size=%dx%d"
,
windowWidth
,
windowHeight
));
EncoderDebugger
debugger
=
EncoderDebugger
.
debug
(
mApplicationContext
,
windowWidth
,
windowHeight
);
EncoderDebugger
debugger
=
EncoderDebugger
.
debug
(
mApplicationContext
,
windowWidth
,
windowHeight
,
mFrameRate
);
mSps
=
Base64
.
decode
(
debugger
.
getB64SPS
(),
Base64
.
NO_WRAP
);
mSps
=
Base64
.
decode
(
debugger
.
getB64SPS
(),
Base64
.
NO_WRAP
);
mPps
=
Base64
.
decode
(
debugger
.
getB64PPS
(),
Base64
.
NO_WRAP
);
mPps
=
Base64
.
decode
(
debugger
.
getB64PPS
(),
Base64
.
NO_WRAP
);
mH264Buffer
=
new
byte
[(
int
)
(
windowWidth
*
windowHeight
*
1.5
)];
mH264Buffer
=
new
byte
[(
int
)
(
windowWidth
*
windowHeight
*
1.5
)];
...
@@ -119,9 +119,9 @@ public class RecordService extends Service implements EasyIPCamera.IPCameraCallB
...
@@ -119,9 +119,9 @@ public class RecordService extends Service implements EasyIPCamera.IPCameraCallB
* 初始化编码器
* 初始化编码器
*/
*/
private
void
initMediaCodec
()
{
private
void
initMediaCodec
()
{
mFrameRate
=
2
5
;
mFrameRate
=
2
0
;
mBitRate
=
1200000
;
mBitRate
=
1200000
;
EncoderDebugger
debugger
=
EncoderDebugger
.
debug
(
mApplicationContext
,
windowWidth
,
windowHeight
);
EncoderDebugger
debugger
=
EncoderDebugger
.
debug
(
mApplicationContext
,
windowWidth
,
windowHeight
,
mFrameRate
);
mSps
=
Base64
.
decode
(
debugger
.
getB64SPS
(),
Base64
.
NO_WRAP
);
mSps
=
Base64
.
decode
(
debugger
.
getB64SPS
(),
Base64
.
NO_WRAP
);
mPps
=
Base64
.
decode
(
debugger
.
getB64PPS
(),
Base64
.
NO_WRAP
);
mPps
=
Base64
.
decode
(
debugger
.
getB64PPS
(),
Base64
.
NO_WRAP
);
}
}
...
@@ -195,11 +195,8 @@ public class RecordService extends Service implements EasyIPCamera.IPCameraCallB
...
@@ -195,11 +195,8 @@ public class RecordService extends Service implements EasyIPCamera.IPCameraCallB
outputBuffer
.
get
(
outData
);
outputBuffer
.
get
(
outData
);
mPpsSps
=
outData
;
mPpsSps
=
outData
;
}
else
if
(
type
==
5
)
{
}
else
if
(
type
==
5
)
{
//在关键帧前面加上pps和sps数据
outputBuffer
.
get
(
mH264Buffer
,
0
,
mBufferInfo
.
size
);
//在关键帧前面加上pps和sps数据
mEasyIPCamera
.
pushFrame
(
mChannelId
,
EasyIPCamera
.
FrameFlag
.
EASY_SDK_VIDEO_FRAME_FLAG
,
System
.
currentTimeMillis
(),
mH264Buffer
,
0
,
mBufferInfo
.
size
);
System
.
arraycopy
(
mPpsSps
,
0
,
mH264Buffer
,
0
,
mPpsSps
.
length
);
outputBuffer
.
get
(
mH264Buffer
,
mPpsSps
.
length
,
mBufferInfo
.
size
);
mEasyIPCamera
.
pushFrame
(
mChannelId
,
EasyIPCamera
.
FrameFlag
.
EASY_SDK_VIDEO_FRAME_FLAG
,
System
.
currentTimeMillis
(),
mH264Buffer
,
0
,
mPpsSps
.
length
+
mBufferInfo
.
size
);
}
else
{
}
else
{
outputBuffer
.
get
(
mH264Buffer
,
0
,
mBufferInfo
.
size
);
outputBuffer
.
get
(
mH264Buffer
,
0
,
mBufferInfo
.
size
);
if
(
System
.
currentTimeMillis
()
-
timeStamp
>=
3000
)
{
if
(
System
.
currentTimeMillis
()
-
timeStamp
>=
3000
)
{
...
...
Android/app/src/main/java/org/easydarwin/easyipcamera/camera/EasyIPCamera.java
浏览文件 @
5a50a250
...
@@ -109,7 +109,7 @@ public class EasyIPCamera {
...
@@ -109,7 +109,7 @@ public class EasyIPCamera {
}
}
public
int
active
(
Context
context
){
public
int
active
(
Context
context
){
String
key
=
"6D72754B7A4A36526D343
041344B68597031636670
655276636D63755A57467A65575268636E64706269356C59584E356158426A5957316C636D4658444661672F365867523246326157346D516D466962334E68514449774D545A4659584E355247467964326C75564756686257566863336B3D"
;
String
key
=
"6D72754B7A4A36526D343
24142665259707776364A
655276636D63755A57467A65575268636E64706269356C59584E356158426A5957316C636D4658444661672F365867523246326157346D516D466962334E68514449774D545A4659584E355247467964326C75564756686257566863336B3D"
;
int
iRet
=
active
(
key
,
context
);
int
iRet
=
active
(
key
,
context
);
if
(
iRet
!=
0
){
if
(
iRet
!=
0
){
Log
.
e
(
TAG
,
"Key invalid! active failed!!! return : "
+
iRet
);
Log
.
e
(
TAG
,
"Key invalid! active failed!!! return : "
+
iRet
);
...
...
Android/app/src/main/java/org/easydarwin/easyipcamera/camera/MediaStream.java
浏览文件 @
5a50a250
...
@@ -44,7 +44,7 @@ public class MediaStream implements EasyIPCamera.IPCameraCallBack {
...
@@ -44,7 +44,7 @@ public class MediaStream implements EasyIPCamera.IPCameraCallBack {
EasyIPCamera
mEasyIPCamera
;
EasyIPCamera
mEasyIPCamera
;
static
final
String
TAG
=
"MediaStream"
;
static
final
String
TAG
=
"MediaStream"
;
int
width
=
640
,
height
=
480
;
int
width
=
640
,
height
=
480
;
int
framerate
=
2
5
;
int
framerate
=
2
0
;
int
bitrate
;
int
bitrate
;
int
mCameraId
=
Camera
.
CameraInfo
.
CAMERA_FACING_BACK
;
int
mCameraId
=
Camera
.
CameraInfo
.
CAMERA_FACING_BACK
;
MediaCodec
mMediaCodec
;
MediaCodec
mMediaCodec
;
...
@@ -279,11 +279,9 @@ public class MediaStream implements EasyIPCamera.IPCameraCallBack {
...
@@ -279,11 +279,9 @@ public class MediaStream implements EasyIPCamera.IPCameraCallBack {
outputBuffer
.
get
(
outData
,
0
,
bufferInfo
.
size
);
outputBuffer
.
get
(
outData
,
0
,
bufferInfo
.
size
);
mPpsSps
=
outData
;
mPpsSps
=
outData
;
}
else
if
(
type
==
5
)
{
}
else
if
(
type
==
5
)
{
//在关键帧前面加上pps和sps数据
outputBuffer
.
get
(
h264
,
0
,
bufferInfo
.
size
);
System
.
arraycopy
(
mPpsSps
,
0
,
h264
,
0
,
mPpsSps
.
length
);
outputBuffer
.
get
(
h264
,
mPpsSps
.
length
,
bufferInfo
.
size
);
if
(
mChannelState
==
EasyIPCamera
.
ChannelState
.
EASY_IPCAMERA_STATE_REQUEST_PLAY_STREAM
)
{
if
(
mChannelState
==
EasyIPCamera
.
ChannelState
.
EASY_IPCAMERA_STATE_REQUEST_PLAY_STREAM
)
{
mEasyIPCamera
.
pushFrame
(
mChannelId
,
EasyIPCamera
.
FrameFlag
.
EASY_SDK_VIDEO_FRAME_FLAG
,
bufferInfo
.
presentationTimeUs
/
1000
,
h264
,
0
,
mPpsSps
.
length
+
bufferInfo
.
size
);
mEasyIPCamera
.
pushFrame
(
mChannelId
,
EasyIPCamera
.
FrameFlag
.
EASY_SDK_VIDEO_FRAME_FLAG
,
bufferInfo
.
presentationTimeUs
/
1000
,
h264
,
0
,
bufferInfo
.
size
);
}
}
}
else
{
}
else
{
outputBuffer
.
get
(
h264
,
0
,
bufferInfo
.
size
);
outputBuffer
.
get
(
h264
,
0
,
bufferInfo
.
size
);
...
@@ -508,9 +506,9 @@ public class MediaStream implements EasyIPCamera.IPCameraCallBack {
...
@@ -508,9 +506,9 @@ public class MediaStream implements EasyIPCamera.IPCameraCallBack {
* 初始化编码器
* 初始化编码器
*/
*/
private
void
initMediaCodec
()
{
private
void
initMediaCodec
()
{
framerate
=
2
5
;
framerate
=
2
0
;
bitrate
=
2
*
width
*
height
*
framerate
/
20
;
bitrate
=
2
*
width
*
height
*
framerate
/
20
;
EncoderDebugger
debugger
=
EncoderDebugger
.
debug
(
mApplicationContext
,
width
,
height
);
EncoderDebugger
debugger
=
EncoderDebugger
.
debug
(
mApplicationContext
,
height
,
width
,
framerate
);
mConvertor
=
debugger
.
getNV21Convertor
();
mConvertor
=
debugger
.
getNV21Convertor
();
mSps
=
Base64
.
decode
(
debugger
.
getB64SPS
(),
Base64
.
NO_WRAP
);
mSps
=
Base64
.
decode
(
debugger
.
getB64SPS
(),
Base64
.
NO_WRAP
);
...
@@ -518,7 +516,7 @@ public class MediaStream implements EasyIPCamera.IPCameraCallBack {
...
@@ -518,7 +516,7 @@ public class MediaStream implements EasyIPCamera.IPCameraCallBack {
}
}
private
void
startMediaCodec
()
{
private
void
startMediaCodec
()
{
EncoderDebugger
debugger
=
EncoderDebugger
.
debug
(
mApplicationContext
,
width
,
height
);
EncoderDebugger
debugger
=
EncoderDebugger
.
debug
(
mApplicationContext
,
height
,
width
,
framerate
);
try
{
try
{
mMediaCodec
=
MediaCodec
.
createByCodecName
(
debugger
.
getEncoderName
());
mMediaCodec
=
MediaCodec
.
createByCodecName
(
debugger
.
getEncoderName
());
MediaFormat
mediaFormat
;
MediaFormat
mediaFormat
;
...
@@ -672,6 +670,7 @@ public class MediaStream implements EasyIPCamera.IPCameraCallBack {
...
@@ -672,6 +670,7 @@ public class MediaStream implements EasyIPCamera.IPCameraCallBack {
buffer
.
putInt
(
mSps
.
length
);
buffer
.
putInt
(
mSps
.
length
);
buffer
.
putInt
(
mPps
.
length
);
buffer
.
putInt
(
mPps
.
length
);
buffer
.
putInt
(
0
);
buffer
.
putInt
(
0
);
buffer
.
put
(
mVps
);
buffer
.
put
(
mVps
);
buffer
.
put
(
mSps
,
0
,
mSps
.
length
);
buffer
.
put
(
mSps
,
0
,
mSps
.
length
);
...
...
Android/app/src/main/java/org/easydarwin/easyipcamera/hw/EncoderDebugger.java
浏览文件 @
5a50a250
...
@@ -82,12 +82,12 @@ public class EncoderDebugger {
...
@@ -82,12 +82,12 @@ public class EncoderDebugger {
/**
/**
* Bitrate that will be used with the encoder.
* Bitrate that will be used with the encoder.
*/
*/
private
final
static
int
BITRATE
=
1000000
;
private
static
int
BITRATE
=
1000000
;
/**
/**
* Framerate that will be used to test the encoder.
* Framerate that will be used to test the encoder.
*/
*/
private
final
static
int
FRAMERATE
=
20
;
private
static
int
FRAMERATE
=
20
;
private
final
static
String
MIME_TYPE
=
"video/avc"
;
private
final
static
String
MIME_TYPE
=
"video/avc"
;
...
@@ -121,9 +121,11 @@ public class EncoderDebugger {
...
@@ -121,9 +121,11 @@ public class EncoderDebugger {
}).
start
();
}).
start
();
}
}
public
synchronized
static
EncoderDebugger
debug
(
Context
context
,
int
width
,
int
height
)
{
public
synchronized
static
EncoderDebugger
debug
(
Context
context
,
int
width
,
int
height
,
int
framerate
)
{
SharedPreferences
prefs
=
PreferenceManager
SharedPreferences
prefs
=
PreferenceManager
.
getDefaultSharedPreferences
(
context
);
.
getDefaultSharedPreferences
(
context
);
FRAMERATE
=
framerate
;
BITRATE
=
2
*
width
*
height
*
FRAMERATE
/
20
;
return
debug
(
prefs
,
width
,
height
);
return
debug
(
prefs
,
width
,
height
);
}
}
...
@@ -240,6 +242,12 @@ public class EncoderDebugger {
...
@@ -240,6 +242,12 @@ public class EncoderDebugger {
reset
();
reset
();
mEncoderName
=
encoders
[
i
].
name
;
mEncoderName
=
encoders
[
i
].
name
;
//2017.02.20
// fix: ignore sw encoder
if
(
mEncoderName
.
contains
(
"google.h264.encoder"
))
continue
;
mEncoderColorFormat
=
encoders
[
i
].
formats
[
j
];
mEncoderColorFormat
=
encoders
[
i
].
formats
[
j
];
if
(
VERBOSE
)
if
(
VERBOSE
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录