Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
GB28181Android
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
规范查询wiki:
http://gitlab.anweitech.com/root/AW-Project-Manage/wikis/pages
Open sidebar
Administrator
GB28181Android
Commits
4a1d99a1
Unverified
提交
4a1d99a1
authored
9月 21, 2018
作者:
autulin
提交者:
GitHub
9月 21, 2018
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #1 from autulin/code_optimation
Code optimation
上级
880da58b
de9ef06d
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
12 个修改的文件
包含
94 行增加
和
57 行删除
+94
-57
build.gradle
gb28181library/build.gradle
+5
-0
GB28181_sender.cpp
gb28181library/src/main/cpp/GB28181_sender.cpp
+40
-9
GB28181_sender.h
gb28181library/src/main/cpp/GB28181_sender.h
+1
-1
gb28181_muxer.cpp
gb28181library/src/main/cpp/gb28181_muxer.cpp
+0
-0
gb28181_muxer.h
gb28181library/src/main/cpp/gb28181_muxer.h
+12
-4
native-lib.cpp
gb28181library/src/main/cpp/native-lib.cpp
+2
-3
user_arguments.h
gb28181library/src/main/cpp/user_arguments.h
+1
-2
DemoActivity.java
...rc/main/java/com/autulin/gb28181library/DemoActivity.java
+8
-22
JNIBridge.java
...y/src/main/java/com/autulin/gb28181library/JNIBridge.java
+2
-1
MediaOutput.java
...src/main/java/com/autulin/gb28181library/MediaOutput.java
+11
-1
MediaRecorderBase.java
...in/java/com/autulin/gb28181library/MediaRecorderBase.java
+5
-5
MediaRecorderNative.java
.../java/com/autulin/gb28181library/MediaRecorderNative.java
+7
-9
没有找到文件。
gb28181library/build.gradle
浏览文件 @
4a1d99a1
...
@@ -13,6 +13,11 @@ android {
...
@@ -13,6 +13,11 @@ android {
testInstrumentationRunner
"android.support.test.runner.AndroidJUnitRunner"
testInstrumentationRunner
"android.support.test.runner.AndroidJUnitRunner"
// 指定ndk编译的平台
ndk
{
abiFilters
"armeabi-v7a"
,
"arm64-v8a"
}
externalNativeBuild
{
externalNativeBuild
{
cmake
{
cmake
{
cppFlags
"-std=c++14"
cppFlags
"-std=c++14"
...
...
gb28181library/src/main/cpp/GB28181_sender.cpp
浏览文件 @
4a1d99a1
...
@@ -46,15 +46,15 @@ void *GB28181_sender::processSend(void *obj) {
...
@@ -46,15 +46,15 @@ void *GB28181_sender::processSend(void *obj) {
uint16_t
len
=
bytes2short
(
pkt_buf
);
uint16_t
len
=
bytes2short
(
pkt_buf
);
uint64_t
t1
=
getCurrentTime
();
uint64_t
t1
=
getCurrentTime
();
// char strBuf[16];
ssize_t
n
;
// sprintf(strBuf, "get pkt len: %d", len);
int
n
;
switch
(
gb28181Sender
->
args
->
outType
)
{
switch
(
gb28181Sender
->
args
->
outType
)
{
case
0
:
// udp
case
0
:
// udp
n
=
gb28181Sender
->
sendData
(
pkt_buf
+
2
,
len
);
n
=
gb28181Sender
->
sendData
(
pkt_buf
+
2
,
len
);
LOG
E
(
"[sender]get pkt len: %d. sent %
d. (queue left size: %d)"
,
len
,
n
,
gb28181Sender
->
pkt_queue
.
size
());
LOG
I
(
"[sender][udp]get pkt len: %d. sent %l
d. (queue left size: %d)"
,
len
,
n
,
gb28181Sender
->
pkt_queue
.
size
());
break
;
break
;
case
1
:
// tcp
case
1
:
// tcp
n
=
gb28181Sender
->
sendData
(
pkt_buf
,
len
+
2
);
LOGI
(
"[sender][tcp]get pkt len: %d. sent %ld. (queue left size: %d)"
,
len
,
n
,
gb28181Sender
->
pkt_queue
.
size
());
break
;
break
;
case
2
:
// file
case
2
:
// file
gb28181Sender
->
fout
.
write
((
const
char
*
)
(
pkt_buf
+
2
),
len
);
gb28181Sender
->
fout
.
write
((
const
char
*
)
(
pkt_buf
+
2
),
len
);
...
@@ -104,13 +104,23 @@ int GB28181_sender::closeSender() {
...
@@ -104,13 +104,23 @@ int GB28181_sender::closeSender() {
}
}
int
GB28181_sender
::
initSocket
(
char
*
hostname
,
int
port
)
{
int
GB28181_sender
::
initSocket
(
char
*
hostname
,
int
port
)
{
//todo
switch
(
args
->
outType
)
{
sockfd
=
socket
(
AF_INET
,
SOCK_DGRAM
,
0
);
case
0
:
// udp
sockfd
=
socket
(
AF_INET
,
SOCK_DGRAM
,
0
);
break
;
case
1
:
// tcp
sockfd
=
socket
(
AF_INET
,
SOCK_STREAM
,
0
);
break
;
default
:
sockfd
=
-
99
;
}
if
(
sockfd
<
0
){
if
(
sockfd
<
0
){
LOGE
(
"ERROR opening socket
"
);
LOGE
(
"ERROR opening socket
.(%d)"
,
sockfd
);
return
sockfd
;
return
sockfd
;
}
}
// 域名解析相关
// struct hostent *server;
// struct hostent *server;
// server = gethostbyname(hostname);
// server = gethostbyname(hostname);
// if (server == NULL) {
// if (server == NULL) {
...
@@ -127,11 +137,32 @@ int GB28181_sender::initSocket(char *hostname, int port) {
...
@@ -127,11 +137,32 @@ int GB28181_sender::initSocket(char *hostname, int port) {
serveraddr
.
sin_port
=
htons
(
port
);
serveraddr
.
sin_port
=
htons
(
port
);
serverlen
=
sizeof
(
serveraddr
);
serverlen
=
sizeof
(
serveraddr
);
if
(
args
->
outType
==
1
)
{
// tcp
int
ret
=
connect
(
sockfd
,
(
const
sockaddr
*
)
&
serveraddr
,
serverlen
);
if
(
ret
<
0
){
LOGE
(
"ERROR connect.(%d)"
,
ret
);
return
ret
;
}
}
return
0
;
return
0
;
}
}
int
GB28181_sender
::
sendData
(
uint8_t
*
buf
,
int
len
)
{
ssize_t
GB28181_sender
::
sendData
(
uint8_t
*
buf
,
int
len
)
{
int
n
=
sendto
(
sockfd
,
buf
,
len
,
0
,
(
const
sockaddr
*
)
&
serveraddr
,
serverlen
);
ssize_t
n
=
0
;
switch
(
args
->
outType
)
{
case
0
:
// udp
n
=
sendto
(
sockfd
,
buf
,
len
,
0
,
(
const
sockaddr
*
)
&
serveraddr
,
serverlen
);
break
;
case
1
:
// tcp
n
=
send
(
sockfd
,
buf
,
len
,
0
);
break
;
default
:
return
-
1
;
}
if
(
n
<
0
)
{
LOGE
(
"send error.(%ld)"
,
n
);
}
return
n
;
return
n
;
}
}
...
...
gb28181library/src/main/cpp/GB28181_sender.h
浏览文件 @
4a1d99a1
...
@@ -47,7 +47,7 @@ private:
...
@@ -47,7 +47,7 @@ private:
int
serverlen
;
int
serverlen
;
int
initSocket
(
char
*
hostname
,
int
port
);
int
initSocket
(
char
*
hostname
,
int
port
);
in
t
sendData
(
uint8_t
*
buf
,
int
len
);
ssize_
t
sendData
(
uint8_t
*
buf
,
int
len
);
int
closeSocket
();
int
closeSocket
();
...
...
gb28181library/src/main/cpp/gb28181_muxer.cpp
浏览文件 @
4a1d99a1
差异被折叠。
点击展开。
gb28181library/src/main/cpp/gb28181_muxer.h
浏览文件 @
4a1d99a1
...
@@ -21,6 +21,7 @@ public:
...
@@ -21,6 +21,7 @@ public:
int
initMuxer
();
int
initMuxer
();
static
void
*
startMux
(
void
*
obj
);
static
void
*
startMux
(
void
*
obj
);
static
void
*
startEncode
(
void
*
obj
);
int
sendVideoFrame
(
uint8_t
*
buf
);
int
sendVideoFrame
(
uint8_t
*
buf
);
...
@@ -31,8 +32,7 @@ public:
...
@@ -31,8 +32,7 @@ public:
int
endMux
();
int
endMux
();
void
custom_filter
(
const
GB28181Muxer
*
gb28181Muxer
,
const
uint8_t
*
picture_buf
,
void
custom_filter
(
const
GB28181Muxer
*
gb28181Muxer
,
const
uint8_t
*
picture_buf
,
int
in_y_size
,
AVFrame
*
pFrame
);
int
format
);
~
GB28181Muxer
()
{
~
GB28181Muxer
()
{
}
}
...
@@ -44,6 +44,7 @@ private:
...
@@ -44,6 +44,7 @@ private:
GB28181_sender
*
gb28181Sender
;
GB28181_sender
*
gb28181Sender
;
int
is_end
=
START_STATE
;
int
is_end
=
START_STATE
;
int
is_release
=
RELEASE_FALSE
;
int
is_release
=
RELEASE_FALSE
;
threadsafe_queue
<
AVFrame
*>
vFrame_queue
;
threadsafe_queue
<
uint8_t
*>
video_queue
;
threadsafe_queue
<
uint8_t
*>
video_queue
;
threadsafe_queue
<
uint8_t
*>
audio_queue
;
threadsafe_queue
<
uint8_t
*>
audio_queue
;
AVFormatContext
*
pFormatCtx
;
AVFormatContext
*
pFormatCtx
;
...
@@ -55,15 +56,22 @@ private:
...
@@ -55,15 +56,22 @@ private:
AVPacket
nPkt
;
AVPacket
nPkt
;
AVPacket
*
nowPkt
;
AVPacket
*
nowPkt
;
AVPacket
*
nextPkt
;
AVPacket
*
nextPkt
;
AVFrame
*
pFrame
;
int
picture_size
;
int
picture_size
;
int
out_y_size
;
int
out_y_size
;
int
audioFrameCnt
=
0
;
int
audioFrameCnt
=
0
;
int
videoFrameCnt
=
0
;
int
videoFrameCnt
=
0
;
int64_t
startTime
=
0
;
int64_t
startTime
=
0
;
int
in_y_size
;
int
mux
(
GB28181Muxer
*
gb28181Muxer
);
//合成相关的参数
int
g711aFrameLen
=
0
;
int64_t
lastPts
=
0
;
int64_t
frameAppend
=
0
;
int
scrPerFrame
;
int
muxCnt
=
0
;
int
mux
(
GB28181Muxer
*
gb28181Muxer
);
AVFrame
*
genFrame
(
uint8_t
*
rawData
);
};
};
#endif //GB281818_MUXER_H
#endif //GB281818_MUXER_H
gb28181library/src/main/cpp/native-lib.cpp
浏览文件 @
4a1d99a1
...
@@ -32,7 +32,7 @@ Java_com_autulin_gb28181library_JNIBridge_initMuxer(JNIEnv *env, jclass type, js
...
@@ -32,7 +32,7 @@ Java_com_autulin_gb28181library_JNIBridge_initMuxer(JNIEnv *env, jclass type, js
jstring
mediaBasePath_
,
jstring
mediaName_
,
jstring
mediaBasePath_
,
jstring
mediaName_
,
jint
filter
,
jint
in_width
,
jint
in_height
,
jint
filter
,
jint
in_width
,
jint
in_height
,
jint
out_width
,
jint
out_height
,
jint
frameRate
,
jint
out_width
,
jint
out_height
,
jint
frameRate
,
jlong
bit_rate
,
jint
audioFrameLen
)
{
jlong
bit_rate
,
jint
audioFrameLen
,
jint
ssrc
)
{
const
char
*
ip
=
env
->
GetStringUTFChars
(
ip_
,
0
);
const
char
*
ip
=
env
->
GetStringUTFChars
(
ip_
,
0
);
const
char
*
mediaBasePath
=
env
->
GetStringUTFChars
(
mediaBasePath_
,
0
);
const
char
*
mediaBasePath
=
env
->
GetStringUTFChars
(
mediaBasePath_
,
0
);
const
char
*
mediaName
=
env
->
GetStringUTFChars
(
mediaName_
,
0
);
const
char
*
mediaName
=
env
->
GetStringUTFChars
(
mediaName_
,
0
);
...
@@ -44,8 +44,7 @@ Java_com_autulin_gb28181library_JNIBridge_initMuxer(JNIEnv *env, jclass type, js
...
@@ -44,8 +44,7 @@ Java_com_autulin_gb28181library_JNIBridge_initMuxer(JNIEnv *env, jclass type, js
strcpy
(
arguments
->
ip_addr
,
ip
);
strcpy
(
arguments
->
ip_addr
,
ip
);
arguments
->
port
=
port
;
arguments
->
port
=
port
;
arguments
->
outType
=
outType
;
arguments
->
outType
=
outType
;
arguments
->
media_base_path
=
mediaBasePath
;
arguments
->
ssrc
=
ssrc
;
arguments
->
media_name
=
mediaName
;
size_t
m_path_size
=
strlen
(
mediaBasePath
)
+
strlen
(
mediaName
)
+
strlen
(
MEDIA_FORMAT
)
+
1
;
size_t
m_path_size
=
strlen
(
mediaBasePath
)
+
strlen
(
mediaName
)
+
strlen
(
MEDIA_FORMAT
)
+
1
;
arguments
->
media_path
=
(
char
*
)
malloc
(
m_path_size
+
1
);
arguments
->
media_path
=
(
char
*
)
malloc
(
m_path_size
+
1
);
...
...
gb28181library/src/main/cpp/user_arguments.h
浏览文件 @
4a1d99a1
...
@@ -9,8 +9,6 @@ typedef struct UserArguments {
...
@@ -9,8 +9,6 @@ typedef struct UserArguments {
char
*
ip_addr
;
char
*
ip_addr
;
int
port
;
int
port
;
int
outType
;
int
outType
;
const
char
*
media_base_path
;
//文件储存地址
const
char
*
media_name
;
// 文件命令前缀
char
*
media_path
;
//合成后的MP4储存地址
char
*
media_path
;
//合成后的MP4储存地址
int
in_width
;
//输出宽度
int
in_width
;
//输出宽度
int
in_height
;
//输入高度
int
in_height
;
//输入高度
...
@@ -20,6 +18,7 @@ typedef struct UserArguments {
...
@@ -20,6 +18,7 @@ typedef struct UserArguments {
int64_t
video_bit_rate
;
//视频比特率控制
int64_t
video_bit_rate
;
//视频比特率控制
int
v_custom_format
;
//一些滤镜操作控制
int
v_custom_format
;
//一些滤镜操作控制
int
a_frame_len
;
int
a_frame_len
;
int
ssrc
;
JNIEnv
*
env
;
//env全局指针
JNIEnv
*
env
;
//env全局指针
JavaVM
*
javaVM
;
//jvm指针
JavaVM
*
javaVM
;
//jvm指针
jclass
java_class
;
//java接口类的calss对象
jclass
java_class
;
//java接口类的calss对象
...
...
gb28181library/src/main/java/com/autulin/gb28181library/DemoActivity.java
浏览文件 @
4a1d99a1
...
@@ -52,27 +52,12 @@ public class DemoActivity extends AppCompatActivity implements
...
@@ -52,27 +52,12 @@ public class DemoActivity extends AppCompatActivity implements
// new Thread(runnable).start();
// new Thread(runnable).start();
}
}
});
});
}
try
{
Runtime
.
getRuntime
().
exec
(
"logcat -f /sdcard/DCIM/pstest/log.txt"
);
private
Runnable
runnable
=
new
Runnable
()
{
}
catch
(
IOException
e
)
{
@Override
e
.
printStackTrace
();
public
void
run
()
{
try
{
DatagramSocket
socket
=
new
DatagramSocket
(
8888
);
InetAddress
serverAddress
=
InetAddress
.
getByName
(
"10.112.181.160"
);
String
str
=
"hello"
;
DatagramPacket
pkt
=
new
DatagramPacket
(
str
.
getBytes
()
,
str
.
getBytes
().
length
,
serverAddress
,
8888
);
socket
.
send
(
pkt
);
socket
.
close
();
}
catch
(
SocketException
e
)
{
e
.
printStackTrace
();
}
catch
(
UnknownHostException
e
)
{
e
.
printStackTrace
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
}
}
;
}
@Override
@Override
public
void
onResume
()
{
public
void
onResume
()
{
...
@@ -119,8 +104,9 @@ public class DemoActivity extends AppCompatActivity implements
...
@@ -119,8 +104,9 @@ public class DemoActivity extends AppCompatActivity implements
// 设置输出
// 设置输出
// String fileName = String.valueOf(System.currentTimeMillis());
// String fileName = String.valueOf(System.currentTimeMillis());
String
fileName
=
"tttttt"
;
String
fileName
=
"tttttt"
;
// mediaOutput = mMediaRecorder.setFileOutPut(fileName); //输出到文件,这里demo是/sdcard/DCIM/pstest/tttttt.ps
mediaOutput
=
mMediaRecorder
.
setFileOutPut
(
fileName
);
//输出到文件,这里demo是/sdcard/DCIM/pstest/tttttt.ps
mediaOutput
=
mMediaRecorder
.
setUdpOutPut
(
"10.112.181.160"
,
8888
);
// int ssrc = 1;
// mediaOutput = mMediaRecorder.setUdpOutPut("10.112.181.160", 8888, ssrc);
mMediaRecorder
.
setSurfaceHolder
(
mSurfaceView
.
getHolder
());
mMediaRecorder
.
setSurfaceHolder
(
mSurfaceView
.
getHolder
());
mMediaRecorder
.
prepare
();
mMediaRecorder
.
prepare
();
...
...
gb28181library/src/main/java/com/autulin/gb28181library/JNIBridge.java
浏览文件 @
4a1d99a1
...
@@ -64,7 +64,8 @@ public class JNIBridge {
...
@@ -64,7 +64,8 @@ public class JNIBridge {
int
out_height
,
int
out_height
,
int
frameRate
,
int
frameRate
,
long
bit_rate
,
long
bit_rate
,
int
audioFrameLen
int
audioFrameLen
,
int
ssrc
);
);
public
static
native
int
sendOneVideoFrame
(
byte
[]
data
);
public
static
native
int
sendOneVideoFrame
(
byte
[]
data
);
...
...
gb28181library/src/main/java/com/autulin/gb28181library/MediaOutput.java
浏览文件 @
4a1d99a1
...
@@ -6,13 +6,15 @@ public class MediaOutput {
...
@@ -6,13 +6,15 @@ public class MediaOutput {
private
String
outputDir
;
private
String
outputDir
;
private
String
outputName
;
private
String
outputName
;
private
int
outputType
;
private
int
outputType
;
private
int
ssrc
;
public
MediaOutput
(
String
ip
,
int
port
,
String
outputDir
,
String
outputName
,
int
outputType
)
{
public
MediaOutput
(
String
ip
,
int
port
,
String
outputDir
,
String
outputName
,
int
outputType
,
int
ssrc
)
{
this
.
ip
=
ip
;
this
.
ip
=
ip
;
this
.
port
=
port
;
this
.
port
=
port
;
this
.
outputDir
=
outputDir
;
this
.
outputDir
=
outputDir
;
this
.
outputName
=
outputName
;
this
.
outputName
=
outputName
;
this
.
outputType
=
outputType
;
this
.
outputType
=
outputType
;
this
.
ssrc
=
ssrc
;
}
}
public
String
getIp
()
{
public
String
getIp
()
{
...
@@ -54,4 +56,12 @@ public class MediaOutput {
...
@@ -54,4 +56,12 @@ public class MediaOutput {
public
void
setOutputType
(
int
outputType
)
{
public
void
setOutputType
(
int
outputType
)
{
this
.
outputType
=
outputType
;
this
.
outputType
=
outputType
;
}
}
public
int
getSsrc
()
{
return
ssrc
;
}
public
void
setSsrc
(
int
ssrc
)
{
this
.
ssrc
=
ssrc
;
}
}
}
gb28181library/src/main/java/com/autulin/gb28181library/MediaRecorderBase.java
浏览文件 @
4a1d99a1
...
@@ -712,13 +712,13 @@ public abstract class MediaRecorderBase implements Callback, PreviewCallback, IM
...
@@ -712,13 +712,13 @@ public abstract class MediaRecorderBase implements Callback, PreviewCallback, IM
this
.
mFrameRateCmd
=
String
.
format
(
" -r %d"
,
rate
);
this
.
mFrameRateCmd
=
String
.
format
(
" -r %d"
,
rate
);
}
}
public
MediaOutput
setTcpOutPut
(
String
ip
,
int
port
)
{
public
MediaOutput
setTcpOutPut
(
String
ip
,
int
port
,
int
ssrc
)
{
mediaOutput
=
new
MediaOutput
(
ip
,
port
,
""
,
""
,
JNIBridge
.
TCP
);
mediaOutput
=
new
MediaOutput
(
ip
,
port
,
""
,
""
,
JNIBridge
.
TCP
,
ssrc
);
return
mediaOutput
;
return
mediaOutput
;
}
}
public
MediaOutput
setUdpOutPut
(
String
ip
,
int
port
)
{
public
MediaOutput
setUdpOutPut
(
String
ip
,
int
port
,
int
ssrc
)
{
mediaOutput
=
new
MediaOutput
(
ip
,
port
,
""
,
""
,
JNIBridge
.
UDP
);
mediaOutput
=
new
MediaOutput
(
ip
,
port
,
""
,
""
,
JNIBridge
.
UDP
,
ssrc
);
return
mediaOutput
;
return
mediaOutput
;
}
}
...
@@ -741,7 +741,7 @@ public abstract class MediaRecorderBase implements Callback, PreviewCallback, IM
...
@@ -741,7 +741,7 @@ public abstract class MediaRecorderBase implements Callback, PreviewCallback, IM
if
(!
file
.
exists
())
{
if
(!
file
.
exists
())
{
file
.
mkdirs
();
file
.
mkdirs
();
}
}
mediaOutput
=
new
MediaOutput
(
""
,
0
,
path
,
fileName
,
JNIBridge
.
FILE
);
mediaOutput
=
new
MediaOutput
(
""
,
0
,
path
,
fileName
,
JNIBridge
.
FILE
,
0
);
return
mediaOutput
;
return
mediaOutput
;
}
}
}
}
gb28181library/src/main/java/com/autulin/gb28181library/MediaRecorderNative.java
浏览文件 @
4a1d99a1
...
@@ -16,20 +16,17 @@ public class MediaRecorderNative extends MediaRecorderBase implements MediaRecor
...
@@ -16,20 +16,17 @@ public class MediaRecorderNative extends MediaRecorderBase implements MediaRecor
JNIBridge
.
endMux
();
JNIBridge
.
endMux
();
}
}
long
t
=
System
.
currentTimeMillis
();
/**
/**
* 视频数据回调
* 视频数据回调
*/
*/
@Override
@Override
public
void
onPreviewFrame
(
byte
[]
data
,
Camera
camera
)
{
public
void
onPreviewFrame
(
byte
[]
data
,
Camera
camera
)
{
if
(
mRecording
)
{
if
(
mRecording
)
{
long
t
=
System
.
currentTimeMillis
();
long
nt
=
System
.
currentTimeMillis
();
byte
[]
mdata
=
new
byte
[
data
.
length
+
8
];
Log
.
e
(
"now"
,
"onPreviewFrame: "
+
nt
+
", div:"
+
(
nt
-
t
));
for
(
int
i
=
0
;
i
<
8
;
i
++)
{
t
=
nt
;
int
offset
=
64
-
(
i
+
1
)
*
8
;
JNIBridge
.
sendOneVideoFrame
(
data
);
mdata
[
i
]
=
(
byte
)
((
t
>>
offset
)
&
0xff
);
}
System
.
arraycopy
(
data
,
0
,
mdata
,
8
,
data
.
length
);
JNIBridge
.
sendOneVideoFrame
(
mdata
);
mPreviewFrameCallCount
++;
mPreviewFrameCallCount
++;
}
}
super
.
onPreviewFrame
(
data
,
camera
);
super
.
onPreviewFrame
(
data
,
camera
);
...
@@ -88,7 +85,8 @@ public class MediaRecorderNative extends MediaRecorderBase implements MediaRecor
...
@@ -88,7 +85,8 @@ public class MediaRecorderNative extends MediaRecorderBase implements MediaRecor
SMALL_VIDEO_HEIGHT
,
SMALL_VIDEO_HEIGHT
,
mFrameRate
,
mFrameRate
,
mVideoBitrate
,
mVideoBitrate
,
mAudioCollector
.
getFrameLen
()
mAudioCollector
.
getFrameLen
(),
mediaOutput
.
getSsrc
()
);
);
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论