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
2652cbf3
提交
2652cbf3
authored
9月 12, 2018
作者:
autulin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
1.停止操作bug修复ing
2.文件目录创建 3.队列优化
上级
d056500d
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
30 行增加
和
45 行删除
+30
-45
gb28181_muxer.cpp
gb28181library/src/main/cpp/gb28181_muxer.cpp
+7
-44
threadsafe_queue.cpp
gb28181library/src/main/cpp/threadsafe_queue.cpp
+9
-0
DemoActivity.java
...rc/main/java/com/autulin/gb28181library/DemoActivity.java
+9
-1
MediaRecorderBase.java
...in/java/com/autulin/gb28181library/MediaRecorderBase.java
+4
-0
MediaRecorderNative.java
.../java/com/autulin/gb28181library/MediaRecorderNative.java
+1
-0
没有找到文件。
gb28181library/src/main/cpp/gb28181_muxer.cpp
浏览文件 @
2652cbf3
...
...
@@ -9,42 +9,6 @@
GB28181Muxer
::
GB28181Muxer
(
UserArguments
*
arg
)
:
arguments
(
arg
)
{
}
/**
* 结束编码时刷出还在编码器里面的帧
* @param fmt_ctx
* @param stream_index
* @return
*/
int
GB28181Muxer
::
flush_encoder
(
AVFormatContext
*
fmt_ctx
,
unsigned
int
stream_index
)
{
int
ret
;
int
got_frame
;
AVPacket
enc_pkt
;
if
(
!
(
fmt_ctx
->
streams
[
stream_index
]
->
codec
->
codec
->
capabilities
&
CODEC_CAP_DELAY
))
return
0
;
while
(
1
)
{
enc_pkt
.
data
=
NULL
;
enc_pkt
.
size
=
0
;
av_init_packet
(
&
enc_pkt
);
ret
=
avcodec_encode_video2
(
fmt_ctx
->
streams
[
stream_index
]
->
codec
,
&
enc_pkt
,
NULL
,
&
got_frame
);
av_frame_free
(
NULL
);
if
(
ret
<
0
)
break
;
if
(
!
got_frame
)
{
ret
=
0
;
break
;
}
LOGI
(
"_Flush Encoder: Succeed to encode 1 frame video!
\t
size:%5d
\n
"
,
enc_pkt
.
size
);
/* mux encoded frame */
ret
=
av_write_frame
(
fmt_ctx
,
&
enc_pkt
);
if
(
ret
<
0
)
break
;
}
return
ret
;
}
/**
* 初始化视频编码器
...
...
@@ -187,12 +151,12 @@ void *GB28181Muxer::startMux(void *obj) {
GB28181Muxer
*
gb28181Muxer
=
(
GB28181Muxer
*
)
obj
;
while
(
!
gb28181Muxer
->
is_end
||
!
gb28181Muxer
->
video_queue
.
empty
())
{
if
(
gb28181Muxer
->
is_release
)
{
LOGE
(
"release data"
)
//Clean
if
(
gb28181Muxer
->
video_st
)
{
avcodec_close
(
gb28181Muxer
->
video_st
->
codec
);
av_free
(
gb28181Muxer
->
pFrame
);
}
avio_close
(
gb28181Muxer
->
pFormatCtx
->
pb
);
avformat_free_context
(
gb28181Muxer
->
pFormatCtx
);
delete
gb28181Muxer
;
return
0
;
...
...
@@ -355,22 +319,20 @@ GB28181Muxer::custom_filter(const GB28181Muxer *gb28181Muxer, const uint8_t *pic
* @return
*/
int
GB28181Muxer
::
encodeEnd
()
{
//Flush Encoder
int
ret_1
=
flush_encoder
(
pFormatCtx
,
0
);
if
(
ret_1
<
0
)
{
LOGE
(
"Flushing encoder failed
\n
"
);
return
-
1
;
}
closeOutput
();
LOGE
(
"aduio queue left num: %d, video queue left num: %d"
,
audio_queue
.
size
(),
video_queue
.
size
());
audio_queue
.
clear
();
video_queue
.
clear
();
//Clean
if
(
video_st
)
{
avcodec_close
(
video_st
->
codec
);
av_free
(
pFrame
);
// av_free(picture_buf);
}
avio_close
(
pFormatCtx
->
pb
);
//
avio_close(pFormatCtx->pb);
avformat_free_context
(
pFormatCtx
);
LOGI
(
"视频编码结束"
)
return
1
;
...
...
@@ -380,6 +342,7 @@ int GB28181Muxer::encodeEnd() {
* 用户中断
*/
void
GB28181Muxer
::
user_end
()
{
LOGE
(
"call user end"
);
is_end
=
END_STATE
;
}
...
...
gb28181library/src/main/cpp/threadsafe_queue.cpp
浏览文件 @
2652cbf3
...
...
@@ -74,6 +74,15 @@ public:
bool
empty
()
const
{
return
data_queue
.
empty
();
}
int
size
()
{
return
data_queue
.
size
();
}
void
clear
()
{
std
::
queue
<
T
>
empty
;
swap
(
empty
,
data_queue
);
}
};
#endif //JIANXIFFMPEG_THREADSAFE_QUEUE_CPP
gb28181library/src/main/java/com/autulin/gb28181library/DemoActivity.java
浏览文件 @
2652cbf3
...
...
@@ -34,7 +34,15 @@ public class DemoActivity extends AppCompatActivity implements
mButton
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
view
)
{
if
(
mMediaRecorder
!=
null
)
mMediaRecorder
.
startMux
();
if
(
mMediaRecorder
!=
null
)
{
if
(!
mMediaRecorder
.
mRecording
)
{
mButton
.
setText
(
"点击结束"
);
mMediaRecorder
.
startMux
();
}
else
{
mButton
.
setText
(
"点击开始"
);
mMediaRecorder
.
endMux
();
}
}
}
});
}
...
...
gb28181library/src/main/java/com/autulin/gb28181library/MediaRecorderBase.java
浏览文件 @
2652cbf3
...
...
@@ -722,6 +722,10 @@ public abstract class MediaRecorderBase implements Callback, PreviewCallback, IM
}
else
{
path
=
dcim
+
FILE_DIR_DEFAULT
;
}
File
file
=
new
File
(
path
);
if
(!
file
.
exists
())
{
file
.
mkdirs
();
}
mediaOutput
=
new
MediaOutput
(
""
,
0
,
path
,
fileName
,
JNIBridge
.
FILE
);
return
mediaOutput
;
}
...
...
gb28181library/src/main/java/com/autulin/gb28181library/MediaRecorderNative.java
浏览文件 @
2652cbf3
...
...
@@ -11,6 +11,7 @@ public class MediaRecorderNative extends MediaRecorderBase implements MediaRecor
*/
@Override
public
void
endMux
()
{
Log
.
e
(
"MediaRecorderNative"
,
"endMux: "
);
super
.
endMux
();
JNIBridge
.
endMux
();
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论