You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
SoftwareEngineering/直播工具包/ffmpeg编译/Android NDK开发(三) 在Linux环境下编...

2569 lines
117 KiB

<!DOCTYPE html>
<!--[if IE 6]><html class="ie lt-ie8"><![endif]-->
<!--[if IE 7]><html class="ie lt-ie8"><![endif]-->
<!--[if IE 8]><html class="ie ie8"><![endif]-->
<!--[if IE 9]><html class="ie ie9"><![endif]-->
<!--[if !IE]><!-->
<html><!--<![endif]--><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0,user-scalable=no">
<!-- Start of Baidu Transcode -->
<meta http-equiv="Cache-Control" content="no-siteapp">
<meta http-equiv="Cache-Control" content="no-transform">
<meta name="applicable-device" content="pc,mobile">
<meta name="MobileOptimized" content="width">
<meta name="HandheldFriendly" content="true">
<meta name="mobile-agent" content="format=html5;url=https://www.jianshu.com/p/9d8322e5de7f">
<!-- End of Baidu Transcode -->
<meta name="description" content="FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它提供了录制、转换以及流化音视频的完整解决方案。 1.环境搭建 操作系统:Ubuntu 16.04 64bitNDK版本:android-ndk-r14b-linux-x86_64FFmpeg版本:3.4.2 NDK 下载地址 FFmpeg 下载地址 将NDK和FFmpeg源码解压至指定目录,文中解压在了H...">
<meta name="360-site-verification" content="604a14b53c6b871206001285921e81d8">
<meta property="wb:webmaster" content="294ec9de89e7fadb">
<meta property="qc:admins" content="104102651453316562112116375">
<meta property="qc:admins" content="11635613706305617">
<meta property="qc:admins" content="1163561616621163056375">
<meta name="google-site-verification" content="cV4-qkUJZR6gmFeajx_UyPe47GW9vY6cnCrYtCHYNh4">
<meta name="google-site-verification" content="HF7lfF8YEGs1qtCE-kPml8Z469e2RHhGajy6JPVy5XI">
<meta http-equiv="mobile-agent" content="format=html5; url=https://www.jianshu.com/p/9d8322e5de7f">
<!-- Apple -->
<meta name="apple-mobile-web-app-title" content="简书">
<!-- Meta for Smart App Banner -->
<meta name="apple-itunes-app" content="app-id=888237539, app-argument=jianshu://notes/24807649">
<!-- End -->
<!-- Meta for Twitter Card -->
<meta content="summary" property="twitter:card">
<meta content="@jianshucom" property="twitter:site">
<meta content="Android NDK开发(三) 在Linux环境下编译FFmpeg" property="twitter:title">
<meta content="FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它提供了录制、转换以及流化音视频的完整解决方案。 1.环境搭建 操作系统:Ubuntu ..." property="twitter:description">
<meta content="https://www.jianshu.com/p/9d8322e5de7f" property="twitter:url">
<!-- End -->
<!-- Meta for OpenGraph -->
<meta property="fb:app_id" content="865829053512461">
<meta property="og:site_name" content="简书">
<meta property="og:title" content="Android NDK开发(三) 在Linux环境下编译FFmpeg">
<meta property="og:type" content="article">
<meta property="og:url" content="https://www.jianshu.com/p/9d8322e5de7f">
<meta property="og:description" content="FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它提供了录制、转换以及流化音视频的完整解决方案。 1.环境搭建 操作系统:Ubuntu 16.04 64bi...">
<!-- End -->
<!-- Meta for Facebook Applinks -->
<meta property="al:ios:url" content="jianshu://notes/24807649">
<meta property="al:ios:app_store_id" content="888237539">
<meta property="al:ios:app_name" content="简书">
<meta property="al:android:url" content="jianshu://notes/24807649">
<meta property="al:android:package" content="com.jianshu.haruki">
<meta property="al:android:app_name" content="简书">
<!-- End -->
<title>Android NDK开发(三) 在Linux环境下编译FFmpeg - 简书</title>
<meta name="csrf-param" content="authenticity_token">
<meta name="csrf-token" content="nn+u1BiTQOCLktploq5Y+3jow6z5vcAuuIMw4z7tNObbCPt+yNOieIe0TzueP8ahNgnnbs7fL+Erkdl7Y5+v8Q==">
<link rel="stylesheet" media="all" href="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/web-274d6a76417c1f7a7da5.css">
<link rel="stylesheet" media="all" href="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/entry-aa75deb505b1b600256a.css">
<link href="https://cdn2.jianshu.io/assets/favicons/favicon-e743bfb1821442341c3ab15bdbe804f7ad97676bd07a770ccc9483473aa76f06.ico" rel="shortcut icon" type="image/x-icon">
<link rel="apple-touch-icon-precomposed" href="https://cdn2.jianshu.io/assets/apple-touch-icons/57-a6f1f1ee62ace44f6dc2f6a08575abd3c3b163288881c78dd8d75247682a4b27.png" sizes="57x57">
<link rel="apple-touch-icon-precomposed" href="https://cdn2.jianshu.io/assets/apple-touch-icons/72-fb9834bcfce738fd7b9c5e31363e79443e09a81a8e931170b58bc815387c1562.png" sizes="72x72">
<link rel="apple-touch-icon-precomposed" href="https://cdn2.jianshu.io/assets/apple-touch-icons/76-49d88e539ff2489475d603994988d871219141ecaa0b1a7a9a1914f4fe3182d6.png" sizes="76x76">
<link rel="apple-touch-icon-precomposed" href="https://cdn2.jianshu.io/assets/apple-touch-icons/114-24252fe693524ed3a9d0905e49bff3cbd0228f25a320aa09053c2ebb4955de97.png" sizes="114x114">
<link rel="apple-touch-icon-precomposed" href="https://cdn2.jianshu.io/assets/apple-touch-icons/120-1bb7371f5e87f93ce780a5f1a05ff1b176828ee0d1d130e768575918a2e05834.png" sizes="120x120">
<link rel="apple-touch-icon-precomposed" href="https://cdn2.jianshu.io/assets/apple-touch-icons/152-bf209460fc1c17bfd3e2b84c8e758bc11ca3e570fd411c3bbd84149b97453b99.png" sizes="152x152">
<!-- Start of 访问统计 -->
<script src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/push.js"></script><script src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/hm.js"></script><script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "//hm.baidu.com/hm.js?0c0e9d9b1e7d617b3e6842e85b9fb068";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
<!-- End of 访问统计 -->
<style type="text/css">@charset "UTF-8";.image-package .image-container{position:relative;z-index:2;background-color:#eee;-webkit-transition:background-color .1s linear;-o-transition:background-color .1s linear;transition:background-color .1s linear;margin:0 auto}body.reader-night-mode .image-package .image-container{background-color:#545454}.image-package .image-container-fill{z-index:1}.image-package .image-container .image-view{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden}.image-package .image-container .image-view-error:after{content:"图片获取失败,请点击重试";position:absolute;top:50%;left:50%;width:100%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#888;font-size:14px}.image-package .image-container .image-view img.image-loading{opacity:.3}.image-package .image-container .image-view img{-webkit-transition:all .15s linear;-o-transition:all .15s linear;transition:all .15s linear;z-index:2;opacity:1}</style><style type="text/css">fieldset[disabled] .multiselect {
pointer-events: none;
}
.multiselect__spinner {
position: absolute;
right: 1px;
top: 1px;
width: 48px;
height: 35px;
background: #fff;
display: block;
}
.multiselect__spinner:after,
.multiselect__spinner:before {
position: absolute;
content: "";
top: 50%;
left: 50%;
margin: -8px 0 0 -8px;
width: 16px;
height: 16px;
border-radius: 100%;
border-color: #41b883 transparent transparent;
border-style: solid;
border-width: 2px;
box-shadow: 0 0 0 1px transparent;
}
.multiselect__spinner:before {
animation: a 2.4s cubic-bezier(.41,.26,.2,.62);
animation-iteration-count: infinite;
}
.multiselect__spinner:after {
animation: a 2.4s cubic-bezier(.51,.09,.21,.8);
animation-iteration-count: infinite;
}
.multiselect__loading-enter-active,
.multiselect__loading-leave-active {
transition: opacity .4s ease-in-out;
opacity: 1;
}
.multiselect__loading-enter,
.multiselect__loading-leave-active {
opacity: 0;
}
.multiselect,
.multiselect__input,
.multiselect__single {
font-family: inherit;
font-size: 14px;
-ms-touch-action: manipulation;
touch-action: manipulation;
}
.multiselect {
box-sizing: content-box;
display: block;
position: relative;
width: 100%;
min-height: 40px;
text-align: left;
color: #35495e;
}
.multiselect * {
box-sizing: border-box;
}
.multiselect:focus {
outline: none;
}
.multiselect--disabled {
opacity: .6;
}
.multiselect--active {
z-index: 1;
}
.multiselect--active:not(.multiselect--above) .multiselect__current,
.multiselect--active:not(.multiselect--above) .multiselect__input,
.multiselect--active:not(.multiselect--above) .multiselect__tags {
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
}
.multiselect--active .multiselect__select {
transform: rotate(180deg);
}
.multiselect--above.multiselect--active .multiselect__current,
.multiselect--above.multiselect--active .multiselect__input,
.multiselect--above.multiselect--active .multiselect__tags {
border-top-left-radius: 0;
border-top-right-radius: 0;
}
.multiselect__input,
.multiselect__single {
position: relative;
display: inline-block;
min-height: 20px;
line-height: 20px;
border: none;
border-radius: 5px;
background: #fff;
padding: 0 0 0 5px;
width: 100%;
transition: border .1s ease;
box-sizing: border-box;
margin-bottom: 8px;
vertical-align: top;
}
.multiselect__tag~.multiselect__input,
.multiselect__tag~.multiselect__single {
width: auto;
}
.multiselect__input:hover,
.multiselect__single:hover {
border-color: #cfcfcf;
}
.multiselect__input:focus,
.multiselect__single:focus {
border-color: #a8a8a8;
outline: none;
}
.multiselect__single {
padding-left: 6px;
margin-bottom: 8px;
}
.multiselect__tags-wrap {
display: inline;
}
.multiselect__tags {
min-height: 40px;
display: block;
padding: 8px 40px 0 8px;
border-radius: 5px;
border: 1px solid #e8e8e8;
background: #fff;
}
.multiselect__tag {
position: relative;
display: inline-block;
padding: 4px 26px 4px 10px;
border-radius: 5px;
margin-right: 10px;
color: #fff;
line-height: 1;
background: #41b883;
margin-bottom: 5px;
white-space: nowrap;
overflow: hidden;
max-width: 100%;
text-overflow: ellipsis;
}
.multiselect__tag-icon {
cursor: pointer;
margin-left: 7px;
position: absolute;
right: 0;
top: 0;
bottom: 0;
font-weight: 700;
font-style: normal;
width: 22px;
text-align: center;
line-height: 22px;
transition: all .2s ease;
border-radius: 5px;
}
.multiselect__tag-icon:after {
content: "\D7";
color: #266d4d;
font-size: 14px;
}
.multiselect__tag-icon:focus,
.multiselect__tag-icon:hover {
background: #369a6e;
}
.multiselect__tag-icon:focus:after,
.multiselect__tag-icon:hover:after {
color: #fff;
}
.multiselect__current {
min-height: 40px;
overflow: hidden;
padding: 8px 12px 0;
padding-right: 30px;
white-space: nowrap;
border-radius: 5px;
border: 1px solid #e8e8e8;
}
.multiselect__current,
.multiselect__select {
line-height: 16px;
box-sizing: border-box;
display: block;
margin: 0;
text-decoration: none;
cursor: pointer;
}
.multiselect__select {
position: absolute;
width: 40px;
height: 38px;
right: 1px;
top: 1px;
padding: 4px 8px;
text-align: center;
transition: transform .2s ease;
}
.multiselect__select:before {
position: relative;
right: 0;
top: 65%;
color: #999;
margin-top: 4px;
border-style: solid;
border-width: 5px 5px 0;
border-color: #999 transparent transparent;
content: "";
}
.multiselect__placeholder {
color: #adadad;
display: inline-block;
margin-bottom: 10px;
padding-top: 2px;
}
.multiselect--active .multiselect__placeholder {
display: none;
}
.multiselect__content-wrapper {
position: absolute;
display: block;
background: #fff;
width: 100%;
max-height: 240px;
overflow: auto;
border: 1px solid #e8e8e8;
border-top: none;
border-bottom-left-radius: 5px;
border-bottom-right-radius: 5px;
z-index: 1;
-webkit-overflow-scrolling: touch;
}
.multiselect__content {
list-style: none;
display: inline-block;
padding: 0;
margin: 0;
min-width: 100%;
vertical-align: top;
}
.multiselect--above .multiselect__content-wrapper {
bottom: 100%;
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
border-top-left-radius: 5px;
border-top-right-radius: 5px;
border-bottom: none;
border-top: 1px solid #e8e8e8;
}
.multiselect__content::webkit-scrollbar {
display: none;
}
.multiselect__element {
display: block;
}
.multiselect__option {
display: block;
padding: 12px;
min-height: 40px;
line-height: 16px;
text-decoration: none;
text-transform: none;
vertical-align: middle;
position: relative;
cursor: pointer;
white-space: nowrap;
}
.multiselect__option:after {
top: 0;
right: 0;
position: absolute;
line-height: 40px;
padding-right: 12px;
padding-left: 20px;
}
.multiselect__option--highlight {
background: #41b883;
outline: none;
color: #fff;
}
.multiselect__option--highlight:after {
content: attr(data-select);
background: #41b883;
color: #fff;
}
.multiselect__option--selected {
background: #f3f3f3;
color: #35495e;
font-weight: 700;
}
.multiselect__option--selected:after {
content: attr(data-selected);
color: silver;
}
.multiselect__option--selected.multiselect__option--highlight {
background: #ff6a6a;
color: #fff;
}
.multiselect__option--selected.multiselect__option--highlight:after {
background: #ff6a6a;
content: attr(data-deselect);
color: #fff;
}
.multiselect--disabled {
background: #ededed;
pointer-events: none;
}
.multiselect--disabled .multiselect__current,
.multiselect--disabled .multiselect__select,
.multiselect__option--disabled {
background: #ededed;
color: #a6a6a6;
}
.multiselect__option--disabled {
cursor: text;
pointer-events: none;
}
.multiselect__option--disabled.multiselect__option--highlight {
background: #dedede!important;
}
.multiselect-enter-active,
.multiselect-leave-active {
transition: all .15s ease;
}
.multiselect-enter,
.multiselect-leave-active {
opacity: 0;
}
.multiselect__strong {
margin-bottom: 8px;
line-height: 20px;
display: inline-block;
vertical-align: top;
}
[dir=rtl] .multiselect {
text-align: right;
}
[dir=rtl] .multiselect__select {
right: auto;
left: 1px;
}
[dir=rtl] .multiselect__tags {
padding: 8px 8px 0 40px;
}
[dir=rtl] .multiselect__content {
text-align: right;
}
[dir=rtl] .multiselect__option:after {
right: auto;
left: 0;
}
[dir=rtl] .multiselect__clear {
right: auto;
left: 12px;
}
[dir=rtl] .multiselect__spinner {
right: auto;
left: 1px;
}
@keyframes a {
0% {
transform: rotate(0);
}
to {
transform: rotate(2turn);
}
}</style><style type="text/css">
#free-reward-panel .reward-users-modal main {
padding: 0;
}
</style><style type="text/css">
@charset "UTF-8";
/*
* 变量
*/
.reward-note-modal .v-modal {
width: 620px;
text-align: center;
}
.reward-note-modal .v-modal form {
margin: 0 auto 25px auto;
padding: 0 40px;
}
.reward-note-modal .v-modal .reward-intro {
margin-top: 20px;
margin-bottom: 20px;
font-size: 16px;
}
.reward-note-modal .v-modal .reward-intro .avatar {
cursor: default !important;
width: 36px;
height: 36px;
margin-right: 10px;
display: inline-block;
}
.reward-note-modal .v-modal .reward-intro .intro {
margin-right: 5px;
font-weight: bold;
vertical-align: middle;
}
.reward-note-modal .v-modal .reward-intro i {
color: #EA6F5A;
vertical-align: middle;
}
.reward-note-modal .v-modal .main-inputs {
margin: 25px 0;
}
.reward-note-modal .v-modal .main-inputs .amount-group {
margin: 0 -5px;
}
.reward-note-modal .v-modal .main-inputs .amount-group input {
display: none;
}
.reward-note-modal .v-modal .main-inputs .amount-group input:checked + .option {
color: #EA6F5A;
border-color: #EA6F5A;
}
.reward-note-modal .v-modal .main-inputs .amount-group .custom-amount:checked + .option .custom-text {
opacity: 0;
}
.reward-note-modal .v-modal .main-inputs .amount-group .custom-amount:checked + .option .custom-amount-input {
opacity: 1;
}
.reward-note-modal .v-modal .main-inputs .amount-group .option {
position: relative;
margin: 0 5px 15px;
width: 156px;
height: 56px;
line-height: 54px;
border: 1px solid #E6E6E6;
border-radius: 4px;
font-weight: normal;
color: #999999;
cursor: pointer;
}
.reward-note-modal .v-modal .main-inputs .amount-group .option i {
font-size: 16px;
vertical-align: middle;
}
.reward-note-modal .v-modal .main-inputs .amount-group .option .amount {
font-size: 28px;
vertical-align: middle;
}
.reward-note-modal .v-modal .main-inputs .amount-group .option .piece {
font-size: 13px;
vertical-align: sub;
}
.reward-note-modal .v-modal .main-inputs .amount-group .option .custom-amount-input {
position: absolute;
top: 0;
z-index: -1;
width: 100%;
opacity: 0;
}
.reward-note-modal .v-modal .main-inputs .amount-group .option .custom-amount-input i {
position: absolute;
top: 0;
left: 10px;
}
.reward-note-modal .v-modal .main-inputs .amount-group .option .custom-amount-input .piece {
position: absolute;
top: 4px;
right: 10px;
}
.reward-note-modal .v-modal .main-inputs .amount-group .option .custom-amount-input input {
display: block;
margin: 0 auto;
width: 80px;
height: 54px;
line-height: 54px;
border: none;
font-size: 28px;
text-align: center;
background: transparent;
-moz-appearance: textfield;
}
.reward-note-modal .v-modal .main-inputs .amount-group .option .custom-amount-input input::-webkit-outer-spin-button, .reward-note-modal .v-modal .main-inputs .amount-group .option .custom-amount-input input::-webkit-inner-spin-button {
-webkit-appearance: none !important;
}
.reward-note-modal .v-modal .main-inputs .message {
padding: 15px 20px;
margin-bottom: 0;
font-size: 14px;
border: 1px solid #E6E6E6;
color: #333333;
border-radius: 4px;
background-color: rgba(180, 180, 180, 0.1);
}
.reward-note-modal .v-modal .main-inputs .message textarea {
width: 100%;
height: 44px;
padding: 0;
margin: 0;
resize: none;
background: none !important;
border: none !important;
-webkit-box-sizing: border-box;
box-sizing: border-box;
-webkit-box-shadow: none;
box-shadow: none;
}
.reward-note-modal .v-modal .main-inputs .message textarea:focus {
outline: none;
}
.reward-note-modal .v-modal .reward-info .amount {
font-size: 28px;
font-weight: bold;
color: #EA6F5A;
}
.reward-note-modal .v-modal .reward-info .pay-method {
font-size: 14px;
}
.reward-note-modal .v-modal .reward-info .pay-method a {
color: #3194D0;
}
.reward-note-modal .v-modal .choose-pay {
margin: 0 -5px;
}
.reward-note-modal .v-modal .choose-pay input {
display: none;
}
.reward-note-modal .v-modal .choose-pay input:checked + .option {
color: #EA6F5A;
border-color: #EA6F5A;
}
.reward-note-modal .v-modal .choose-pay .option {
margin: 20px 5px 10px;
width: 156px;
height: 56px;
line-height: 54px;
text-align: center;
border: 1px solid #E6E6E6;
border-radius: 4px;
cursor: pointer;
}
.reward-note-modal .v-modal .choose-pay .option img {
height: 30px;
}
.reward-note-modal .v-modal .choose-pay .option img.day.alipay, .reward-note-modal .v-modal .choose-pay .option img.night.alipay {
min-width: 85px;
}
.reward-note-modal .v-modal .choose-pay .option img.day.wechat, .reward-note-modal .v-modal .choose-pay .option img.night.wechat {
min-width: 112px;
}
.reward-note-modal .v-modal .choose-pay .option img.night {
display: none;
}
body.reader-night-mode .reward-note-modal .v-modal .choose-pay .option img.night {
display: inline-block;
}
body.reader-night-mode .reward-note-modal .v-modal .choose-pay .option img.day {
display: none;
}
.reward-note-modal .v-modal .choose-pay .tooltip {
width: 230px;
}
.reward-note-modal .v-modal .modal-footer {
padding: 0 15px 20px;
border: none;
background-color: transparent;
text-align: center;
}
.reward-note-modal .v-modal .modal-footer .btn {
padding: 8px 45px;
font-size: 24px;
}
.reward-note-modal .v-modal .btn-pay {
padding: 8px 25px;
font-size: 16px;
color: #ffffff;
background-color: #F5A623;
}
.weixin-pay, .success-pay {
text-align: center;
}
.weixin-pay .v-modal, .success-pay .v-modal {
width: 350px;
}
.weixin-pay .ic-successed, .success-pay .ic-successed {
font-size: 60px;
color: #3db922;
}
.weixin-pay h2, .weixin-pay h3, .success-pay h2, .success-pay h3 {
margin-bottom: 20px;
color: #333333;
}
.weixin-pay h2, .success-pay h2 {
margin: 0 0 40px 0;
font-size: 24px;
}
.weixin-pay .bind-text, .success-pay .bind-text {
position: relative;
margin-bottom: 30px;
font-size: 14px;
color: #999999;
}
.weixin-pay .bind-text:before, .weixin-pay .bind-text:after, .success-pay .bind-text:before, .success-pay .bind-text:after {
content: "";
border-top: 1px solid #999;
display: block;
position: absolute;
width: 40px;
top: 8px;
}
.weixin-pay .bind-text:before, .success-pay .bind-text:before {
left: 30px;
}
.weixin-pay .bind-text:after, .success-pay .bind-text:after {
right: 30px;
}
.weixin-pay .share-bind, .success-pay .share-bind {
display: block;
margin-bottom: 30px;
}
.weixin-pay .share-bind i, .success-pay .share-bind i {
margin-right: 4px;
font-size: 22px;
vertical-align: middle;
}
.weixin-pay .share-bind.wechat i, .success-pay .share-bind.wechat i {
color: #00BB29;
}
.weixin-pay .share-bind.weibo i, .success-pay .share-bind.weibo i {
color: #E05244;
}
.weixin-pay .wx-qr-code, .success-pay .wx-qr-code {
display: inline-block;
}
.weixin-pay .wx-qr-code img, .success-pay .wx-qr-code img {
margin: 0 auto;
padding: 10px;
width: 200px;
background-color: #ffffff;
}
.weixin-pay .pay-amount, .success-pay .pay-amount {
margin: 20px 0;
color: #787878;
}
.weixin-pay .pay-amount span, .success-pay .pay-amount span {
color: #F5A623;
}
</style><style type="text/css">
@charset "UTF-8";
/*
* 变量
*/
.v-modal-wrap {
position: fixed;
left: 0;
top: 0;
right: 0;
bottom: 0;
z-index: 9999;
background-color: transparent;
}
.v-modal-wrap.modal-leave-active {
-webkit-transition: opacity 0.3s;
-o-transition: opacity 0.3s;
transition: opacity 0.3s;
}
.v-modal-wrap.modal-enter-active .v-modal-mask, .v-modal-wrap.modal-leave-active .v-modal-mask {
opacity: 0;
}
.v-modal-wrap.modal-enter-active .v-modal, .v-modal-wrap.modal-leave-active .v-modal {
-webkit-transform: translate(-50%, -70%);
-ms-transform: translate(-50%, -70%);
transform: translate(-50%, -70%);
opacity: 0;
}
.v-modal-wrap .v-modal-mask {
background-color: rgba(255, 255, 255, 0.7);
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
-webkit-transition: opacity 0.3s;
-o-transition: opacity 0.3s;
transition: opacity 0.3s;
opacity: 1;
}
.v-modal-wrap .v-modal {
position: absolute;
left: 50%;
top: 50%;
-webkit-transform: translate(-50%, -50%);
-ms-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
border-radius: 6px;
border: 1px solid rgba(0, 0, 0, 0.1);
background-color: #fff;
-webkit-box-shadow: 0 5px 25px rgba(0, 0, 0, 0.1);
box-shadow: 0 5px 25px rgba(0, 0, 0, 0.1);
-webkit-transition: opacity 0.3s, -webkit-transform 0.3s;
transition: opacity 0.3s, -webkit-transform 0.3s;
-o-transition: opacity 0.3s, transform 0.3s;
transition: opacity 0.3s, transform 0.3s;
transition: opacity 0.3s, transform 0.3s, -webkit-transform 0.3s;
opacity: 1;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
overflow: hidden;
}
.v-modal-wrap .v-modal > header:before, .v-modal-wrap .v-modal > header:after, .v-modal-wrap .v-modal > main:before, .v-modal-wrap .v-modal > main:after, .v-modal-wrap .v-modal > footer:before, .v-modal-wrap .v-modal > footer:after {
content: '';
clear: both;
display: table;
}
.v-modal-wrap .v-modal > header {
padding: 20px;
border-bottom: 1px solid #F0F0F0;
}
.v-modal-wrap .v-modal > header h4 {
margin: 0;
color: #333;
text-align: left;
}
.v-modal-wrap .v-modal .close {
position: absolute;
right: 16px;
top: 20px;
font-size: 26px;
line-height: 20px;
color: rgba(0, 0, 0, 0.8);
}
.v-modal-wrap .v-modal .close:hover {
color: #000000;
}
.v-modal-wrap .v-modal > main {
padding: 20px 20px 20px 20px;
font-size: 15px;
color: #333;
-webkit-box-flex: 1;
-webkit-flex-grow: 1;
-ms-flex-positive: 1;
flex-grow: 1;
overflow-x: hidden;
overflow-y: auto;
}
.v-modal-wrap .v-modal > footer {
padding: 20px;
background-color: #fff;
}
.v-modal-wrap .v-modal > footer button {
padding: 0;
margin: 0;
background-color: transparent;
border: 0;
float: right;
}
.v-modal-wrap .v-modal > footer button:focus {
outline: 0;
}
.v-modal-wrap .v-modal > footer .submit {
padding: 4px 12px;
border: 1px solid;
border-radius: 20px;
}
.v-modal-wrap .v-modal > footer .cancel {
margin-top: 5px;
}
.v-modal-wrap .v-modal > footer .cancel:hover {
color: #333333;
}
.reader-night-mode .v-modal-wrap .v-modal-mask {
background-color: rgba(63, 63, 63, 0.7);
}
.reader-night-mode .v-modal-wrap .v-modal {
background-color: #3f3f3f;
}
.reader-night-mode .v-modal-wrap .v-modal header {
border-color: #2F2F2F;
}
.reader-night-mode .v-modal-wrap .v-modal header h4 {
color: #C8C8C8;
}
.reader-night-mode .v-modal-wrap .v-modal .close {
color: #C8C8C8;
}
.reader-night-mode .v-modal-wrap .v-modal .close:hover {
color: #ffffff;
}
.reader-night-mode .v-modal-wrap .v-modal main {
color: #C8C8C8;
}
.reader-night-mode .v-modal-wrap .v-modal footer {
background-color: #3f3f3f;
}
.reader-night-mode .v-modal-wrap .v-modal footer .cancel:hover {
color: #C8C8C8;
}
</style><style type="text/css">
@charset "UTF-8";
/*
* 变量
*/
.youdao-fixed-ad {
display: block;
position: relative;
width: 180px;
height: 180px;
}
.youdao-fixed-ad .img {
display: block;
width: 100%;
height: 100%;
background-repeat: no-repeat;
background-position: center;
background-size: cover;
}
.youdao-fixed-ad .ad-badge {
position: absolute;
bottom: 0;
right: 0;
display: block;
font-size: 12px;
padding: 2px 5px 0 6px;
background-color: rgba(0, 0, 0, 0.5);
color: #fff;
cursor: pointer;
}
</style><style type="text/css">
.yuxi-fixed-ad {
position: relative;
width: 180px;
height: 180px;
}
.yuxi-fixed-ad .img {
display: block;
width: 100%;
height: 100%;
background-repeat: no-repeat;
background-position: center;
background-size: cover;
background-image: url(//cdn2.jianshu.io/assets/web/yuxi-ads-d73b364baf42dfeca32d518c819a0136.jpg);
}
.yuxi-fixed-ad .ad-badge {
position: absolute;
bottom: 0;
right: 0;
display: block;
font-size: 12px;
padding: 2px 5px 0 6px;
background-color: rgba(0, 0, 0, 0.5);
color: #fff;
cursor: pointer;
}
</style><style type="text/css">
@charset "UTF-8";
/*
* 变量
*/
.like[data-v-6ddd02c6] {
display: inline-block;
}
.like .like-group[data-v-6ddd02c6] {
position: relative;
padding: 13px 0 15px 0;
font-size: 0;
border: 1px solid #EA6F5A;
border-radius: 40px;
}
.like .like-group[data-v-6ddd02c6]:hover {
background-color: rgba(236, 97, 73, 0.05);
}
.like .like-group .btn-like[data-v-6ddd02c6] {
display: inline-block;
font-size: 19px;
}
.like .like-group .btn-like[data-v-6ddd02c6]:before {
content: '';
position: absolute;
left: 12px;
top: 2px;
width: 50px;
height: 50px;
background-image: url(//cdn2.jianshu.io/assets/web/like_animation_steps-62a00a7b52377d3069927cdb8e61fd34.png);
background-position: left;
background-repeat: no-repeat;
background-size: 1000px 50px;
}
.like .like-group .btn-like a[data-v-6ddd02c6] {
position: relative;
padding: 18px 30px 18px 55px;
color: #EA6F5A;
}
.like .like-group .modal-wrap[data-v-6ddd02c6] {
font-size: 18px;
border-left: 1px solid rgba(236, 97, 73, 0.4);
display: inline-block;
margin-left: -15px;
}
.like .like-group .modal-wrap a[data-v-6ddd02c6] {
color: #EA6F5A;
padding: 18px 26px 18px 18px;
}
.like .like-group.like-animation[data-v-6ddd02c6], .like .like-group.active[data-v-6ddd02c6] {
background-color: #EA6F5A;
}
.like .like-group.like-animation .btn-like a[data-v-6ddd02c6], .like .like-group.active .btn-like a[data-v-6ddd02c6] {
color: white;
}
.like .like-group.like-animation .modal-wrap[data-v-6ddd02c6], .like .like-group.active .modal-wrap[data-v-6ddd02c6] {
border-left: 1px solid white;
}
.like .like-group.like-animation .modal-wrap a[data-v-6ddd02c6], .like .like-group.active .modal-wrap a[data-v-6ddd02c6] {
color: white;
}
.like .like-group.like-animation .btn-like[data-v-6ddd02c6]:before {
-webkit-animation: likeBlast-data-v-6ddd02c6 0.6s 1 steps(19);
animation: likeBlast-data-v-6ddd02c6 0.6s 1 steps(19);
background-position: right;
}
@-webkit-keyframes likeBlast {
0% {
background-position: left;
}
100% {
background-position: right;
}
}
@keyframes likeBlast-data-v-6ddd02c6 {
0% {
background-position: left;
}
100% {
background-position: right;
}
}
.like .like-group.active .btn-like[data-v-6ddd02c6]:before {
background-position: right;
}
</style><style type="text/css">
@charset "UTF-8";
/*
* 变量
*/
.main {
position: relative;
margin: 0 auto;
padding: 0 0 30px 0;
width: 620px;
}
.main .title {
padding-left: 8px;
border-left: 3px solid #EA6F5A;
line-height: 1;
font-size: 15px;
}
.main .collection-settings {
position: absolute;
top: 2px;
right: 0;
font-size: 13px;
color: #A0A0A0;
}
.main .collection-settings span {
padding-left: 4px;
}
.main .include-collection {
width: 100%;
padding-top: 20px;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-webkit-flex-direction: row;
-ms-flex-direction: row;
flex-direction: row;
-webkit-box-pack: start;
-webkit-justify-content: flex-start;
-ms-flex-pack: start;
justify-content: flex-start;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
-webkit-flex-wrap: wrap;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
}
.main .include-collection .item {
display: inline-block;
margin: 0 12px 12px 0;
min-height: 32px;
background-color: white;
border: 1px solid #DCDCDC;
border-radius: 4px;
vertical-align: top;
overflow: hidden;
}
.main .include-collection .item img {
width: 32px;
height: 32px;
}
.main .include-collection .item .name {
display: inline-block;
padding: 0 10px;
font-size: 14px;
}
.main .include-collection .add-collection-wrap {
margin: 0 12px 12px 0;
}
.main .include-collection .add-collection {
padding: 8px 12px;
font-size: 14px;
border: 1px solid #DCDCDC;
border-radius: 4px;
}
.main .include-collection .add-collection i {
margin-right: 4px;
color: #969696;
}
.main .recommend-note a {
position: relative;
margin: 20px 2px 0 0;
width: 200px;
height: 160px;
display: inline-block;
}
.main .recommend-note a:after {
content: "";
position: absolute;
width: 200px;
height: 160px;
border-radius: 0 0 4px 4px;
-webkit-box-shadow: inset 0px -80px 50px -22px rgba(0, 0, 0, 0.6);
box-shadow: inset 0px -80px 50px -22px rgba(0, 0, 0, 0.6);
top: 0;
left: 0;
z-index: 1;
}
.main .recommend-note .name {
position: absolute;
bottom: 40px;
left: 10px;
right: 10px;
font-size: 17px;
font-weight: bold;
color: #ffffff;
z-index: 2;
}
.main .recommend-note .author {
position: absolute;
bottom: 10px;
left: 10px;
right: 10px;
z-index: 2;
}
.main .recommend-note .avatar {
width: 20px;
height: 20px;
display: inline-block;
}
.main .recommend-note .avatar img {
border-radius: 50%;
}
.main .recommend-note .author-name {
font-size: 12px;
color: #ffffff;
display: inline-block;
vertical-align: -1px;
}
.main .show-more {
margin: 0 12px 12px 0;
font-size: 14px;
color: #A0A0A0;
}
</style><style type="text/css">
#featured-comment-list {
margin-top: 30px;
margin-bottom: -15px;
}
</style><style type="text/css">
@charset "UTF-8";
/*
* 变量
*/
.pc-bind-phone-modal .modal-content, .pc-bind-phone-modal .modal-body {
overflow: visible;
}
.pc-bind-phone-modal .modal-body {
padding-top: 14px;
}
.pc-bind-phone-modal .dropdown-menu {
max-height: 300px;
overflow: auto;
}
.pc-bind-phone-modal .dropdown-menu .tag {
background-color: #efefef;
color: #4A4A4A;
height: 28px;
line-height: 28px;
padding-left: 25px;
font-size: 12px;
}
.pc-bind-phone-modal .tips {
color: #999999;
font-size: 13px;
font-weight: 500;
line-height: 18px;
margin-bottom: 14px;
}
.pc-bind-phone-modal .tips a {
color: #3194D0;
}
.reader-night-mode .pc-bind-phone-modal .dropdown-menu .tag {
background-color: #2F2F2F;
color: #999999;
}
</style><style type="text/css">
@charset "UTF-8";
/*
* 变量
*/
.comment-images {
display: block;
width: 338px;
margin-top: 15px;
margin-bottom: 15px;
position: relative;
font-size: 0;
}
.comment-images .preview-img {
display: block;
}
.comment-images .image {
position: relative;
border-radius: 4px;
background-position: center;
background-repeat: no-repeat;
overflow: hidden;
border: 1px solid #f0f0f0;
}
body.reader-night-mode .comment-images .image {
border-color: #2f2f2f;
}
.comment-images .image:not(:nth-child(3n)) {
margin-right: 4px;
}
.comment-images .image:nth-child(n + 4) {
margin-top: 4px;
}
.comment-images .image.is-long:after {
content: '\957F\56FE';
position: absolute;
bottom: 0;
margin-left: -32px;
width: 32px;
height: 28px;
font-size: 12px;
text-align: center;
line-height: 28px;
background-color: #2f2f2f;
opacity: 0.5;
color: #fff;
}
.comment-images .one-image.is-long {
width: 110px;
height: 220px;
background-position: top left;
background-size: 110px auto;
}
.comment-images .one-image.is-long:after {
left: 100%;
}
.comment-images .one-image.is-normal {
height: 110px;
width: 100%;
background-size: contain;
background-position: center left;
}
.comment-images .many-image {
background-size: cover;
display: inline-block !important;
height: 110px;
width: 110px;
}
.comment-images .many-image:after {
left: 100%;
}
.comment-images .sub-image {
width: 105px;
height: 105px;
}
.comment-images .collapsed-btn {
display: block;
color: #3194d0;
font-size: 15px;
margin-top: 15px;
margin-bottom: 15px;
}
.comment-images .mask {
position: absolute;
right: 0;
top: 0;
height: 100%;
width: 32%;
border-radius: 2px;
background-color: rgba(47, 47, 47, 0.6);
overflow: hidden;
pointer-events: none;
}
.comment-images .mask span {
font-size: 15px;
color: #fff;
position: absolute;
left: 50%;
top: 50%;
-webkit-transform: translate(-50%, -50%);
-ms-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
width: 100%;
text-align: center;
}
</style><style type="text/css">
@charset "UTF-8";
/*
* 变量
*/
.tips-card-loading[data-v-f3bf5228], .tips-card[data-v-f3bf5228] {
width: 460px;
position: relative;
left: 0;
top: 0;
border-radius: 6px;
-webkit-box-sizing: border-box;
box-sizing: border-box;
background-color: #ffffff;
-webkit-box-shadow: 0 5px 25px rgba(0, 0, 0, 0.1);
box-shadow: 0 5px 25px rgba(0, 0, 0, 0.1);
border: 1px solid #d9d9d9;
}
.tips-card-loading[data-v-f3bf5228] {
height: 200px;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-webkit-flex-direction: row;
-ms-flex-direction: row;
flex-direction: row;
-webkit-box-pack: center;
-webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
position: relative;
}
.tips-card-loading div[data-v-f3bf5228] {
background-color: #EAEAEA;
}
.tips-card-loading .avatar[data-v-f3bf5228] {
width: 72px !important;
height: 72px !important;
border-radius: 50%;
position: absolute;
left: 20px;
top: 20px;
}
.tips-card-loading .name[data-v-f3bf5228] {
width: 120px;
height: 20px;
position: absolute;
left: 110px;
top: 31px;
}
.tips-card-loading .content[data-v-f3bf5228] {
position: absolute;
left: 110px;
top: 62px;
width: 238px;
height: 39.2px;
background-color: transparent;
}
.tips-card-loading .content .text[data-v-f3bf5228], .tips-card-loading .content .text-delay[data-v-f3bf5228] {
height: 14px;
position: absolute;
left: 0;
width: 100%;
}
.tips-card-loading .content .text[data-v-f3bf5228] {
top: 2px;
-webkit-animation: loading-data-v-f3bf5228 1s ease-in-out infinite;
animation: loading-data-v-f3bf5228 1s ease-in-out infinite;
}
.tips-card-loading .content .text-delay[data-v-f3bf5228] {
bottom: 3px;
-webkit-animation: loading-data-v-f3bf5228 1s ease-in-out -0.5s infinite;
animation: loading-data-v-f3bf5228 1s ease-in-out -0.5s infinite;
}
@keyframes loading-data-v-f3bf5228 {
0% {
width: 60%;
}
50% {
width: 100%;
}
100% {
width: 60%;
}
}
@-webkit-keyframes loading {
0% {
width: 60%;
}
50% {
width: 100%;
}
100% {
width: 60%;
}
}
.tips-card-loading .meta[data-v-f3bf5228] {
width: 30px;
height: 42px;
position: absolute;
bottom: 20px;
background-color: transparent;
}
.tips-card-loading .meta.meta-1[data-v-f3bf5228] {
left: 30px;
}
.tips-card-loading .meta.meta-2[data-v-f3bf5228] {
left: 90px;
}
.tips-card-loading .meta.meta-3[data-v-f3bf5228] {
left: 150px;
}
.tips-card-loading .meta .count[data-v-f3bf5228], .tips-card-loading .meta .type[data-v-f3bf5228] {
position: absolute;
}
.tips-card-loading .meta .count[data-v-f3bf5228] {
left: -5px;
top: 6px;
height: 18px;
width: 40px;
}
.tips-card-loading .meta .type[data-v-f3bf5228] {
left: 1px;
bottom: 2px;
height: 13px;
width: 28px;
}
.tips-card-loading .button[data-v-f3bf5228] {
position: absolute;
bottom: 17px;
width: 90px;
height: 40px;
border-radius: 40px;
}
.tips-card-loading .message[data-v-f3bf5228] {
right: 120px;
}
.tips-card-loading .follow[data-v-f3bf5228] {
right: 17px;
}
.tips-card[data-v-f3bf5228] {
z-index: 10;
}
.tips-card .card-content[data-v-f3bf5228] {
padding: 20px 20px 0 20px;
}
.tips-card .card-content .summary[data-v-f3bf5228] {
padding: 8px 0 20px 90px;
min-height: 92px;
position: relative;
}
.tips-card .card-content .summary .avatar[data-v-f3bf5228] {
position: absolute;
left: 0;
top: 0;
width: 72px;
height: 72px;
cursor: pointer;
border-radius: 50%;
background-color: #EAEAEA;
background-position: center;
background-repeat: no-repeat;
background-size: cover;
}
.tips-card .card-content .summary .name[data-v-f3bf5228] {
height: 26px;
margin-right: 3px;
margin-bottom: 8px;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-webkit-flex-direction: row;
-ms-flex-direction: row;
flex-direction: row;
-webkit-box-pack: start;
-webkit-justify-content: flex-start;
-ms-flex-pack: start;
justify-content: flex-start;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
}
.tips-card .card-content .summary .name .nickname[data-v-f3bf5228] {
color: #333333;
font-size: 19px;
font-weight: bold;
overflow: hidden;
-o-text-overflow: ellipsis;
text-overflow: ellipsis;
white-space: nowrap;
cursor: pointer;
}
.tips-card .card-content .summary .name .sex[data-v-f3bf5228], .tips-card .card-content .summary .name .badge[data-v-f3bf5228] {
-webkit-flex-shrink: 0;
-ms-flex-negative: 0;
flex-shrink: 0;
display: inline-block;
}
.tips-card .card-content .summary .name .sex[data-v-f3bf5228] {
font-size: 19px;
width: 19px;
margin: 0 4px;
}
.tips-card .card-content .summary .intro[data-v-f3bf5228] {
overflow: hidden;
-o-text-overflow: ellipsis;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
margin-bottom: 12px;
font-size: 14px;
line-height: 1.5;
color: #333333;
}
.tips-card .card-content .summary .intro.block[data-v-f3bf5228] {
color: #999999;
}
.tips-card .card-content .summary .list .item[data-v-f3bf5228] {
display: block;
margin-bottom: 5px;
font-size: 13px;
color: #999999;
cursor: pointer;
overflow: hidden;
-o-text-overflow: ellipsis;
text-overflow: ellipsis;
white-space: nowrap;
}
.tips-card .card-content .summary .list .item i[data-v-f3bf5228] {
margin-right: 2px;
}
.tips-card .card-footer[data-v-f3bf5228] {
border-top: 1px solid #F0F0F0;
padding: 15px;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-webkit-flex-direction: row;
-ms-flex-direction: row;
flex-direction: row;
-webkit-box-pack: justify;
-webkit-justify-content: space-between;
-ms-flex-pack: justify;
justify-content: space-between;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
overflow: hidden;
_zoom: 1;
}
.tips-card .card-footer .profile[data-v-f3bf5228] {
width: 198px;
overflow: hidden;
_zoom: 1;
float: left;
}
.tips-card .card-footer .profile div[data-v-f3bf5228] {
float: left;
width: 60px;
height: 44px;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
-webkit-box-pack: center;
-webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
}
.tips-card .card-footer .profile div span[data-v-f3bf5228] {
display: block;
width: 100%;
text-align: center;
}
.tips-card .card-footer .profile div .type[data-v-f3bf5228] {
font-size: 13px;
color: #999999;
}
.tips-card .card-footer .profile div .count[data-v-f3bf5228] {
font-size: 18px;
color: #333333;
}
.tips-card .card-footer .social[data-v-f3bf5228] {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-webkit-flex-direction: row;
-ms-flex-direction: row;
flex-direction: row;
-webkit-box-pack: end;
-webkit-justify-content: flex-end;
-ms-flex-pack: end;
justify-content: flex-end;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
float: right;
overflow: hidden;
_zoom: 1;
}
.tips-card .card-footer .social .message[data-v-f3bf5228] {
border: 1px solid rgba(59, 194, 29, 0.7);
color: #42C02E;
margin: 0 10px 0 16px;
font-size: 15px;
padding: 8px 0;
width: 90px;
border-radius: 40px;
text-align: center;
cursor: pointer;
float: left;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
.tips-card .card-footer .social .message[data-v-f3bf5228]:hover {
border: 1px solid #42C02E;
color: #42C02E;
background-color: rgba(59, 194, 29, 0.05);
}
.tips-card .card-footer .social .user-follow-button[data-v-f3bf5228] {
font-size: 15px;
padding: 8px 0;
width: 100px;
}
.arrow[data-v-f3bf5228] {
position: absolute;
width: 100%;
height: 10px;
left: 0;
z-index: 20;
pointer-events: none;
}
.arrow i[data-v-f3bf5228] {
position: absolute;
left: 50%;
margin: 0;
margin-left: -10px;
border-width: 10px;
border-color: transparent;
padding: 0;
}
.arrow em[data-v-f3bf5228] {
display: block;
position: absolute;
left: -9px;
border-width: 9px;
border-color: transparent;
margin: 0;
padding: 0;
}
.arrow-type-top[data-v-f3bf5228] {
bottom: 1px;
}
.arrow-type-top i[data-v-f3bf5228] {
border-top-color: #d9d9d9;
border-style: solid dashed dashed;
top: 0;
}
.arrow-type-top em[data-v-f3bf5228] {
border-style: solid dashed dashed;
border-top-color: #ffffff;
top: -10px;
}
.arrow-type-bottom[data-v-f3bf5228] {
top: 1px;
}
.arrow-type-bottom i[data-v-f3bf5228] {
border-bottom-color: #d9d9d9;
border-style: dashed dashed solid;
top: -10px;
}
.arrow-type-bottom em[data-v-f3bf5228] {
border-style: dashed dashed solid;
border-bottom-color: #ffffff;
top: -8px;
}
.reader-night-mode .tips-card-loading[data-v-f3bf5228] {
background-color: #3F3F3F;
border-color: #2F2F2F;
}
.reader-night-mode .tips-card-loading .avatar[data-v-f3bf5228], .reader-night-mode .tips-card-loading .name[data-v-f3bf5228], .reader-night-mode .tips-card-loading .text[data-v-f3bf5228], .reader-night-mode .tips-card-loading .text-delay[data-v-f3bf5228], .reader-night-mode .tips-card-loading .count[data-v-f3bf5228], .reader-night-mode .tips-card-loading .type[data-v-f3bf5228], .reader-night-mode .tips-card-loading .button[data-v-f3bf5228] {
background-color: #545454;
}
.reader-night-mode .tips-card[data-v-f3bf5228] {
background-color: #3F3F3F;
border-color: #2F2F2F;
}
.reader-night-mode .tips-card .card-content .summary .name .nickname[data-v-f3bf5228] {
color: #C8C8C8;
}
.reader-night-mode .tips-card .card-content .summary .name .nickname[data-v-f3bf5228]:hover {
color: #ffffff;
}
.reader-night-mode .tips-card .card-content .summary .intro[data-v-f3bf5228] {
color: #C8C8C8;
}
.reader-night-mode .tips-card .card-footer[data-v-f3bf5228] {
border-top-color: #2F2F2F;
}
.reader-night-mode .tips-card .card-footer .profile div .count[data-v-f3bf5228] {
color: #C8C8C8;
}
.reader-night-mode .arrow.arrow-type-top em[data-v-f3bf5228] {
border-top-color: #3F3F3F;
}
.reader-night-mode .arrow.arrow-type-top i[data-v-f3bf5228] {
border-top-color: #2F2F2F;
}
.reader-night-mode .arrow.arrow-type-bottom em[data-v-f3bf5228] {
border-bottom-color: #3F3F3F;
}
.reader-night-mode .arrow.arrow-type-bottom i[data-v-f3bf5228] {
border-bottom-color: #2F2F2F;
}
</style><style type="text/css">
.v-tooltip-container,
.v-tooltip-content {
display: inline-block;
}
.v-tooltip-container {
position: relative;
}
.v-tooltip-container .v-tooltip-content {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.v-tooltip-container .v-tooltip-wrap {
position: absolute;
}
.v-tooltip-container .v-tooltip-wrap.v-tooltip-wrap-top {
bottom: 100%;
left: 50%;
-webkit-transform: translateX(-50%);
-ms-transform: translateX(-50%);
transform: translateX(-50%);
padding-bottom: 10px;
}
.v-tooltip-container .v-tooltip-wrap.v-tooltip-wrap-bottom {
top: 100%;
left: 50%;
-webkit-transform: translateX(-50%);
-ms-transform: translateX(-50%);
transform: translateX(-50%);
padding-top: 10px;
}
.v-tooltip-container .v-tooltip-wrap.v-tooltip-wrap-left {
top: 50%;
right: 100%;
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
transform: translateY(-50%);
padding-right: 10px;
}
.v-tooltip-container .v-tooltip-wrap.v-tooltip-wrap-right {
top: 50%;
left: 100%;
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
transform: translateY(-50%);
padding-left: 10px;
}
.v-tooltip-container .v-tooltip-wrap.v-tooltip-wrap-top-start {
bottom: 100%;
left: 0;
padding-bottom: 10px;
}
.v-tooltip-container .v-tooltip-wrap.v-tooltip-wrap-top-end {
bottom: 100%;
right: 0;
padding-bottom: 10px;
}
.v-tooltip-container .v-tooltip-wrap.v-tooltip-wrap-bottom-start {
top: 100%;
left: 0;
padding-top: 10px;
}
.v-tooltip-container .v-tooltip-wrap.v-tooltip-wrap-bottom-end {
top: 100%;
right: 0;
padding-top: 10px;
}
.v-tooltip-container .v-tooltip-wrap.v-tooltip-wrap-left-start {
top: 0;
right: 100%;
padding-right: 10px;
}
.v-tooltip-container .v-tooltip-wrap.v-tooltip-wrap-left-end {
bottom: 0;
right: 100%;
padding-right: 10px;
}
.v-tooltip-container .v-tooltip-wrap.v-tooltip-wrap-right-start {
top: 0;
left: 100%;
padding-left: 10px;
}
.v-tooltip-container .v-tooltip-wrap.v-tooltip-wrap-right-end {
bottom: 0;
left: 100%;
padding-left: 10px;
}
</style><style type="text/css">
@charset "UTF-8";
/*
* 变量
*/
.like-button[data-v-cdecbe24] {
position: relative;
padding-left: 23px;
}
.like-button[data-v-cdecbe24]:before {
content: '';
position: absolute;
left: -16px;
top: -16px;
width: 50px;
height: 50px;
background-image: url(//cdn2.jianshu.io/assets/web/zan_animation_steps-8d65a474b670eb6a022516f4e0b8e9a4.png);
background-position: left;
background-repeat: no-repeat;
background-size: 1050px 50px;
}
.like-button[data-v-cdecbe24]:hover:before {
background-position: -50px;
}
.like-button.zan-animation span[data-v-cdecbe24], .like-button.active span[data-v-cdecbe24] {
color: #333333;
}
body.reader-night-mode .like-button.zan-animation span[data-v-cdecbe24], body.reader-night-mode .like-button.active span[data-v-cdecbe24] {
color: #C8C8C8;
}
.like-button.zan-animation[data-v-cdecbe24]:before {
-webkit-animation: likeBlast-data-v-cdecbe24 0.6s 1 steps(19);
animation: likeBlast-data-v-cdecbe24 0.6s 1 steps(19);
background-position: right;
}
@-webkit-keyframes likeBlast {
0% {
background-position: -50px;
}
100% {
background-position: right;
}
}
@keyframes likeBlast-data-v-cdecbe24 {
0% {
background-position: -50px;
}
100% {
background-position: right;
}
}
.like-button.active[data-v-cdecbe24]:before {
background-position: right;
}
</style></head>
<!-- 只给10%的用户添加代码 -->
<!-- ###第四范式-智能推荐:代码直接复制 无需修改参数### -->
<!-- ###功能:上报内容并反馈用户行为### -->
<!--
-->
<body class="reader-black-font" lang="zh-CN">
<!-- 全局顶部导航栏 -->
<nav class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="width-limit">
<!-- 左上方 Logo -->
<a class="logo" href="https://www.jianshu.com/"><img src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/nav-logo-4c7bbafe27adc892f3046e6978459bac.png" alt="Nav logo"></a>
<!-- 右上角 -->
<!-- 未登录显示登录/注册/写文章 -->
<a class="btn write-btn" target="_blank" href="https://www.jianshu.com/writer#/">
<i class="iconfont ic-write"></i>写文章
</a> <a class="btn sign-up" id="sign_up" href="https://www.jianshu.com/sign_up">注册</a>
<a class="btn log-in" id="sign_in" href="https://www.jianshu.com/sign_in">登录</a>
<!-- 如果用户登录,显示下拉菜单 -->
<div class="style-mode"><a class="style-mode-btn"><i class="iconfont ic-navigation-mode"></i></a> <div class="popover-modal" style="left: 0px; display: none;"><div class="meta"><i class="iconfont ic-navigation-night"></i><span>夜间模式</span></div> <div class="switch day-night-group"><a class="switch-btn"></a> <a class="switch-btn active"></a></div> <hr> <div class="switch font-family-group"><a class="switch-btn font-song">宋体</a> <a class="switch-btn font-hei active">黑体</a></div> <div class="switch"><a class="switch-btn active"></a> <a class="switch-btn"></a></div></div></div>
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#menu" aria-expanded="false">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<div class="collapse navbar-collapse" id="menu">
<ul class="nav navbar-nav">
<li class="tab ">
<a href="https://www.jianshu.com/">
<span class="menu-text">首页</span><i class="iconfont ic-navigation-discover menu-icon"></i>
</a> </li>
<li class="tab ">
<a id="web-nav-app-download-btn" class="app-download-btn" href="https://www.jianshu.com/apps?utm_medium=desktop&amp;utm_source=navbar-apps"><span class="menu-text">下载App</span><i class="iconfont ic-navigation-download menu-icon"></i></a>
</li>
<li class="search">
<form target="_blank" action="/search" accept-charset="UTF-8" method="get"><input name="utf8" type="hidden" value="✓">
<input type="text" name="q" id="q" autocomplete="off" placeholder="搜索" class="search-input">
<a class="search-btn" href="javascript:void(null)"><i class="iconfont ic-search"></i></a>
</form> </li>
</ul>
</div>
</div>
</div>
</nav>
<div class="note">
<div id="note-fixed-ad-container">
<div id="fixed-ad-container">
<div style="display: block;"><a target="_blank" href="https://www.jianshu.com/apps/redirect?utm_source=side-banner-click" id="web-note-ad-fixed"><span class="close">×</span></a></div>
<a href="https://dsp-click.youdao.com/clk/request.s?slot=30edd91dd8637d9f645baa8448ba90b3&amp;k=%2FCIg7cLHpNL31urp2YEyTohNeWp%2B9rqDPvQLqgFI%2BOzXxo%2BoRxcJpjjAgKuViCqvIxCHqA9N%2F2c%2F9Be%2FcwcSrytzsXtwWLcKWfmEr%2F%2BaTNTj%2FbeYKl6%2BWnCWtObvlgt5B4ytgK8p7UFSxfMfCqdJJ9vSlZjXSp3FQm%2BrudeYfaJv0yDKGUJ9hEviGVibSX2HEA7md3Hq7BOhGrSke341nqVN6BVwkooxryLvadi1XpsUmDcRLOYhYCSzGsT%2BHryqt%2B0MDz5bXHoJFk0KiyBQH8Bc8hTRkDkpUdNHMN2yVKT%2BEc%2Bd1jbbq9hGJq0XLIGZMHMNk0HBE7d6E4vICqnJAl16Cg%2BsHjwne1fg0d0rY8FeoCYHBX8ZiJ9u6zuhLEA5tlH56qtVR4M6sYv7BUdPp1nIBmYesmszo4sszyOzgu%2B0ckvkITsO1u5zUtRET2JoCUIY1nS%2BU%2BiXpN%2B1mBywm%2BJCvUUbD7ARLgrbV6V7v0Ap3DXt0HuGReB8cXG4v14BvDLGB0rlms2t2kmjw3g3g3tQW%2FRVuaYRauWej6r2RkfFPQxgvCMp4t8sYQNqIYTuBGBgjPjnaBshwtqiHLVP62shE5G7oKqpExu85UMwkryscQOH0jslSvzZXkJfQfC5M5x63sKEu1XU3FWGKGmdU7vUGE6xi1jHl55O0OohoeKkD2ygWqbgSaJPwxtbL8HEwADarfKhTDrZc7MkLIfDj7mSK%2Bges1y7QzMoyL0QHRV%2B6THDI9y%2BrKp0sxmAUGbGXyQTYzzIlrvsXZDTIZ39IQhXV89bdbnXRO7A0csU8D8K7XH1nlzn1r7xfLkM2PrU4yBlGcazffjrEMsXmq7kOpJGGZLVdmQusV3djFVkS1JctwjN8GeN4cT%2BoAIpunKV3uVe7rJ4wUxShe1DiD50%2BkspHZ924U%2B0HeiJ5%2F9OP3b4xNZ4prl6uQBwR406ZKXrarkmR8eDYJ%2FWfJDA5PIgRLGODTCeckvg8pIHBmLNVSGjB6hSNizCnbszmotwVvDQ3Msw936C4seU7oJXRXHm6Z2ni2CgWfTM0cXIvhWR8JWrLWPZnGz1KWfbQd%2FCug7HfDRWO2a0fHGhtE8TGkUuy0aVvoq3E6%2Fo7Bf6MAJBkPRw73YzWXY5%2BWji44CmFQ%2FO18aPqEcXCaY4wICrlYgqr9fGj6hHFwmmOMCAq5WIKq%2FXxo%2BoRxcJpjjAgKuViCqvQ3ZgZ3HnAxC%2B5yXnsgdjKw%3D%3D&amp;youdao_bid=25be8179-afe1-48a7-a070-d3f0b4407552&amp;iid=%7B%22-7014733055058021470%22%3A4%7D&amp;sid=17024" target="_blank" class="youdao-fixed-ad"><div class="img" style="background-image: url(&quot;https://oimagec5.ydstatic.com/image?id=-7014733055058021470&amp;product=adpublish&amp;w=360&amp;h=360&amp;sc=0&amp;rm=2&amp;gsb=0&amp;gsbd=60&quot;);"></div> <span class="ad-badge">广告</span></a>
<a href="http://e.cn.miaozhen.com/r/k=2110413&amp;p=7L9Gn&amp;dx=__IPDX__&amp;rt=2&amp;ns=__IP__&amp;ni=__IESID__&amp;v=__LOC__&amp;xa=__ADPLATFORM__&amp;tr=__REQUESTID__&amp;mo=__OS__&amp;m0=__OPENUDID__&amp;m0a=__DUID__&amp;m1=__ANDROIDID1__&amp;m1a=__ANDROIDID__&amp;m2=__IMEI__&amp;m4=__AAID__&amp;m5=__IDFA__&amp;m6=__MAC1__&amp;m6a=__MAC__&amp;vo=3f2e070eb&amp;vr=2&amp;o=https%3A%2F%2Fwww.jianshu.com%2Fp%2Fee05f7eff678" target="_blank" class="yuxi-fixed-ad" style="display: none;"><div class="img"></div> <span class="ad-badge">广告</span></a>
<div id="_so_pdsBy_0"></div>
</div>
</div>
<div class="post">
<div class="article">
<h1 class="title">Android NDK开发(三) 在Linux环境下编译FFmpeg</h1>
<!-- 作者区域 -->
<div class="author">
<a class="avatar" href="https://www.jianshu.com/u/34ece31cd6eb">
<img src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/29276055bb9e.jpg" alt="96">
</a> <div class="info">
<span class="name"><a href="https://www.jianshu.com/u/34ece31cd6eb">容华谢后</a></span>
<!-- 关注用户按钮 -->
<a class="btn btn-success follow"><i class="iconfont ic-follow"></i><span>关注</span></a>
<!-- 文章数据信息 -->
<div class="meta">
<!-- 简书钻 -->
<!-- 如果文章更新时间大于发布时间,那么使用 tooltip 显示更新时间 -->
<span class="publish-time">2018.03.07 07:20</span>
<span class="wordage">字数 1337</span>
<span class="views-count">阅读 1163</span><span class="comments-count">评论 4</span><span class="likes-count">喜欢 23</span></div>
</div>
<!-- 如果是当前作者,加入编辑按钮 -->
</div>
<!-- 文章内容 -->
<div data-note-content="" class="show-content">
<div class="show-content-free">
<blockquote>
<p>FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它提供了录制、转换以及流化音视频的完整解决方案。</p>
</blockquote>
<h1>1.环境搭建</h1>
<blockquote>
<p>操作系统:Ubuntu 16.04 64bit</p>
<p>NDK版本:android-ndk-r14b-linux-x86_64</p>
<p>FFmpeg版本:3.4.2</p>
</blockquote>
<p><a href="https://link.jianshu.com/?t=https%3A%2F%2Fdeveloper.android.com%2Fndk%2Fdownloads%2Findex.html" target="_blank" rel="nofollow">NDK 下载地址</a></p>
<p><a href="https://link.jianshu.com/?t=http%3A%2F%2Fffmpeg.org" target="_blank" rel="nofollow">FFmpeg 下载地址</a></p>
<p>将NDK和FFmpeg源码解压至指定目录,文中解压在了Home &gt; ffmpeg目录下,注意NDK的版本一定要选择Linux版的,在编译的时候我就犯了这个错误,使用了Windows版的NDK,一直报错也找不到原因,切记切记!</p>
<h1>2.编译FFmpeg</h1>
<p>在ffmpeg-3.4.2目录下创建build_android.sh编译脚本,文件名可以随便取,这个脚本是本文中最关键的内容,一起来看下:</p>
<pre class="hljs bash"><code class="bash"><span class="hljs-meta">#!/bin/bash
</span>
<span class="hljs-comment"># 设置临时文件夹,需要提前手动创建</span>
<span class="hljs-built_in">export</span> TMPDIR=<span class="hljs-string">"/home/yangle/ffmpeg/ffmpeg-3.4.2/ffmpegtemp"</span>
<span class="hljs-comment"># 设置NDK路径</span>
NDK=~/ffmpeg/android-ndk-r14b
<span class="hljs-comment"># 设置编译针对的平台,可以根据实际需求进行设置</span>
<span class="hljs-comment"># 当前设置为最低支持android-14版本,arm架构</span>
SYSROOT=<span class="hljs-variable">$NDK</span>/platforms/android-14/arch-arm
<span class="hljs-comment"># 设置编译工具链,4.9为版本号</span>
TOOLCHAIN=<span class="hljs-variable">$NDK</span>/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
<span class="hljs-keyword">function</span> build_one
{
./configure \
--<span class="hljs-built_in">enable</span>-cross-compile \
--<span class="hljs-built_in">enable</span>-shared \
--<span class="hljs-built_in">disable</span>-static \
--<span class="hljs-built_in">disable</span>-doc \
--<span class="hljs-built_in">disable</span>-ffmpeg \
--<span class="hljs-built_in">disable</span>-ffplay \
--<span class="hljs-built_in">disable</span>-ffprobe \
--<span class="hljs-built_in">disable</span>-ffserver \
--<span class="hljs-built_in">disable</span>-avdevice \
--<span class="hljs-built_in">disable</span>-doc \
--<span class="hljs-built_in">disable</span>-symver \
--prefix=<span class="hljs-variable">$PREFIX</span> \
--cross-prefix=<span class="hljs-variable">$TOOLCHAIN</span>/bin/arm-linux-androideabi- \
--target-os=android \
--arch=arm \
--sysroot=<span class="hljs-variable">$SYSROOT</span> \
--extra-cflags=<span class="hljs-string">"-Os -fpic <span class="hljs-variable">$ADDI_CFLAGS</span>"</span> \
<span class="hljs-variable">$ADDITIONAL_CONFIGURE_FLAG</span>
make clean
make
make install
}
<span class="hljs-comment"># 设置编译后文件的输出目录</span>
CPU=arm
PREFIX=$(<span class="hljs-built_in">pwd</span>)/android/<span class="hljs-variable">$CPU</span>
ADDI_CFLAGS=<span class="hljs-string">"-marm"</span>
build_one
</code></pre>
<p>前四项配置按照你本机的实际路径修改就可以了,注意ffmpegtemp这个临时文件夹需要提前手动创建,【~/】 在Linux上代表
【/home/用户名/】,看下build_one这个方法,enable、disable分别代表打开和关闭一些功能,重点看下下面几个配置:</p>
<pre class="hljs bash"><code class="bash">--<span class="hljs-built_in">enable</span>-shared
--<span class="hljs-built_in">disable</span>-static
</code></pre>
<p>编译动态库,shared和static的开关是相对的。</p>
<pre class="hljs bash"><code class="bash">--prefix=<span class="hljs-variable">$PREFIX</span>
CPU=arm
PREFIX=$(<span class="hljs-built_in">pwd</span>)/android/<span class="hljs-variable">$CPU</span>
</code></pre>
<p>设置编译后文件的输出目录,$(pwd)代表当前目录,所以文件的输出路径为:ffmpeg-3.4.2/android/arm</p>
<pre class="hljs bash"><code class="bash">--cross-prefix=<span class="hljs-variable">$TOOLCHAIN</span>/bin/arm-linux-androideabi-
</code></pre>
<p>设置交叉编译器,按照实际路径修改就可以了。</p>
<pre class="hljs undefined"><code>--target-os=android
</code></pre>
<p>设置编译针对的系统,网上查到很多资料说编译前需要修改configure文件,设置这项后就不用修改了,系统会自动为我们修改,效果一样。</p>
<pre class="hljs undefined"><code>--arch=arm
</code></pre>
<p>设置编译so库的架构,当前设置为arm,可以根据实际需求修改。</p>
<pre class="hljs bash"><code class="bash">--sysroot=<span class="hljs-variable">$SYSROOT</span>
</code></pre>
<p>设置编译针对的平台,可以根据实际需求进行设置,当前设置为最低支持android-14版本,arm架构。</p>
<pre class="hljs bash"><code class="bash">--extra-cflags=<span class="hljs-string">"-Os -fpic <span class="hljs-variable">$ADDI_CFLAGS</span>"</span>
ADDI_CFLAGS=<span class="hljs-string">"-marm"</span>
</code></pre>
<p>还没有完全理解这几个参数的作用,有知道的同学可以给我留言啊,谢谢!</p>
<p>到这里,编译脚本就写完了,在当前目录下打开终端窗口,执行脚本,加上管理员权限,以防权限不足:</p>
<pre class="hljs ruby"><code class="ruby">$ sudo ./build_android.sh
</code></pre>
<p>回车提示输入密码,密码不会显示出来或者显示成*号,直接输完然后回车就可以了,看下执行效果:</p>
<div class="image-package">
<div class="image-container" style="max-width: 700px; max-height: 438px; background-color: transparent;">
<div class="image-container-fill" style="padding-bottom: 60.160000000000004%;"></div>
<div class="image-view" data-width="728" data-height="438"><img data-original-src="//upload-images.jianshu.io/upload_images/3270074-79f4e8aba74868b6.png" data-original-width="728" data-original-height="438" data-original-format="image/png" data-original-filesize="77100" style="cursor: zoom-in;" class="" src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/3270074-79f4e8aba74868b6.png"></div>
</div>
<div class="image-caption">开始编译</div>
</div>
<p>编译中:</p>
<div class="image-package">
<div class="image-container" style="max-width: 700px; max-height: 435px; background-color: transparent;">
<div class="image-container-fill" style="padding-bottom: 59.75%;"></div>
<div class="image-view" data-width="728" data-height="435"><img data-original-src="//upload-images.jianshu.io/upload_images/3270074-c8c76626f4f4e603.png" data-original-width="728" data-original-height="435" data-original-format="image/png" data-original-filesize="74221" style="cursor: zoom-in;" class="" src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/3270074-c8c76626f4f4e603.png"></div>
</div>
<div class="image-caption">编译中</div>
</div>
<p>如果一切顺利的话,大概十多分钟就可以编译完成:</p>
<div class="image-package">
<div class="image-container" style="max-width: 700px; max-height: 438px; background-color: transparent;">
<div class="image-container-fill" style="padding-bottom: 60.08%;"></div>
<div class="image-view" data-width="729" data-height="438"><img data-original-src="//upload-images.jianshu.io/upload_images/3270074-1bccd8a0be74c355.png" data-original-width="729" data-original-height="438" data-original-format="image/png" data-original-filesize="89500" style="cursor: zoom-in;" class="" src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/3270074-1bccd8a0be74c355.png"></div>
</div>
<div class="image-caption">编译完成</div>
</div>
<p>编译完成后,在当前目录下(ffmpeg-3.4.2)会生成一个android目录,so文件就在android &gt; arm &gt; lib目录下:</p>
<div class="image-package">
<div class="image-container" style="max-width: 700px; max-height: 539px; background-color: transparent;">
<div class="image-container-fill" style="padding-bottom: 73.83999999999999%;"></div>
<div class="image-view" data-width="730" data-height="539"><img data-original-src="//upload-images.jianshu.io/upload_images/3270074-34c688f5202f57fb.png" data-original-width="730" data-original-height="539" data-original-format="image/png" data-original-filesize="52759" style="cursor: zoom-in;" class="" src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/3270074-34c688f5202f57fb.png"></div>
</div>
<div class="image-caption">生成so文件</div>
</div>
<p>看下生成的so包是做什么用的:</p>
<ul>
<li><p>libavcodec:用于各种类型声音、图像编解码。</p></li>
<li><p>libavformat:用于各种音视频封装格式的生成和解析,读取音视频帧等功能。</p></li>
<li><p>libavutil:包含一些公共的工具函数。</p></li>
<li><p>libavfilter:提供了各种音视频过滤器。</p></li>
<li><p>libswresample:用于音频重采样,采样格式转换和混合。</p></li>
<li><p>libswscale:用于视频场景比例缩放、色彩映射转换。</p></li>
</ul>
<h1>3.将FFmpeg编译成一个so文件</h1>
<p>在上文中我们成功的编译了FFmpeg,但是编译出来的so文件一共有6个,如果觉的使用起来比较麻烦,可以编译成一个so文件,下面我们来修改下脚本:</p>
<pre class="hljs bash"><code class="bash"><span class="hljs-meta">#!/bin/bash
</span>
<span class="hljs-comment"># 设置临时文件夹,需要提前手动创建</span>
<span class="hljs-built_in">export</span> TMPDIR=<span class="hljs-string">"/home/yangle/ffmpeg/ffmpeg-3.4.2/ffmpegtemp"</span>
<span class="hljs-comment"># 设置NDK路径</span>
NDK=~/ffmpeg/android-ndk-r14b
<span class="hljs-comment"># 设置编译针对的平台,可以根据自己的需求进行设置</span>
<span class="hljs-comment"># 当前设置为最低支持android-14版本,arm架构</span>
SYSROOT=<span class="hljs-variable">$NDK</span>/platforms/android-14/arch-arm
<span class="hljs-comment"># 设置编译工具链,4.9为版本号</span>
TOOLCHAIN=<span class="hljs-variable">$NDK</span>/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
<span class="hljs-keyword">function</span> build_one
{
./configure \
--<span class="hljs-built_in">enable</span>-cross-compile \
--<span class="hljs-built_in">enable</span>-static \
--<span class="hljs-built_in">disable</span>-shared \
--<span class="hljs-built_in">disable</span>-doc \
--<span class="hljs-built_in">disable</span>-ffmpeg \
--<span class="hljs-built_in">disable</span>-ffplay \
--<span class="hljs-built_in">disable</span>-ffprobe \
--<span class="hljs-built_in">disable</span>-ffserver \
--<span class="hljs-built_in">disable</span>-avdevice \
--<span class="hljs-built_in">disable</span>-doc \
--<span class="hljs-built_in">disable</span>-symver \
--prefix=<span class="hljs-variable">$PREFIX</span> \
--cross-prefix=<span class="hljs-variable">$TOOLCHAIN</span>/bin/arm-linux-androideabi- \
--target-os=android \
--arch=arm \
--sysroot=<span class="hljs-variable">$SYSROOT</span> \
--extra-cflags=<span class="hljs-string">"-Os -fpic <span class="hljs-variable">$ADDI_CFLAGS</span>"</span> \
<span class="hljs-variable">$ADDITIONAL_CONFIGURE_FLAG</span>
make clean
make
make install
<span class="hljs-comment"># 合并生成的静态库</span>
<span class="hljs-variable">$TOOLCHAIN</span>/bin/arm-linux-androideabi-ld \
-rpath-link=<span class="hljs-variable">$SYSROOT</span>/usr/lib \
-L<span class="hljs-variable">$SYSROOT</span>/usr/lib \
-L<span class="hljs-variable">$PREFIX</span>/lib \
-soname libffmpeg.so -shared -nostdlib -Bsymbolic --whole-archive --no-undefined -o \
<span class="hljs-variable">$PREFIX</span>/libffmpeg.so \
libavcodec/libavcodec.a \
libavfilter/libavfilter.a \
libswresample/libswresample.a \
libavformat/libavformat.a \
libavutil/libavutil.a \
libswscale/libswscale.a \
-lc -lm -lz -ldl -llog --dynamic-linker=/system/bin/linker \
<span class="hljs-variable">$TOOLCHAIN</span>/lib/gcc/arm-linux-androideabi/4.9.x/libgcc.a
}
<span class="hljs-comment"># 设置编译后的文件输出目录</span>
CPU=arm
PREFIX=$(<span class="hljs-built_in">pwd</span>)/android/<span class="hljs-variable">$CPU</span>
ADDI_CFLAGS=<span class="hljs-string">"-marm"</span>
build_one
</code></pre>
<p>看下和编译单个so文件的脚本有什么区别:</p>
<p>生成静态库:</p>
<pre class="hljs bash"><code class="bash">--<span class="hljs-built_in">disable</span>-static
--<span class="hljs-built_in">enable</span>-shared
修改为:
--<span class="hljs-built_in">enable</span>-static
--<span class="hljs-built_in">disable</span>-shared
</code></pre>
<p>增加下面的指令,将生成的静态库合并成一个动态库:</p>
<pre class="hljs ruby"><code class="ruby">$TOOLCHAIN/bin/arm-linux-androideabi-ld \
-rpath-link=$SYSROOT/usr/lib \
-L$SYSROOT/usr/lib \
-L$PREFIX/lib \
-soname libffmpeg.so -shared -nostdlib -Bsymbolic --whole-archive --no-undefined -o \
$PREFIX/libffmpeg.so \
libavcodec/libavcodec.a \
libavfilter/libavfilter.a \
libswresample/libswresample.a \
libavformat/libavformat.a \
libavutil/libavutil.a \
libswscale/libswscale.a \
-lc -lm -lz -ldl -llog --dynamic-linker=<span class="hljs-regexp">/system/bin</span><span class="hljs-regexp">/linker \
$TOOLCHAIN/lib</span><span class="hljs-regexp">/gcc/arm</span>-linux-androideabi/<span class="hljs-number">4.9</span>.x/libgcc.a
</code></pre>
<p>重点看下下面两个配置:</p>
<pre class="hljs css"><code class="css"><span class="hljs-selector-tag">-soname</span> <span class="hljs-selector-tag">libffmpeg</span><span class="hljs-selector-class">.so</span>
</code></pre>
<p>指定动态库,也就是so文件的名称。</p>
<pre class="hljs bash"><code class="bash"><span class="hljs-variable">$TOOLCHAIN</span>/lib/gcc/arm-linux-androideabi/4.9.x/libgcc.a
</code></pre>
<p>设置编译器的路径,根据实际路径进行修改,编译前一定要检查一遍路径是否正确!</p>
<p>脚本中还涉及到一些编译指令,都可以在网上查到作用,在这里就不再一一说明了,OK,开始执行编译脚本:</p>
<pre class="hljs ruby"><code class="ruby">$ sudo ./build_android_all.sh
</code></pre>
<p>编译完成后,生成的libffmpeg.so就在android &gt; arm目录下:</p>
<div class="image-package">
<div class="image-container" style="max-width: 700px; max-height: 539px; background-color: transparent;">
<div class="image-container-fill" style="padding-bottom: 73.94%;"></div>
<div class="image-view" data-width="729" data-height="539"><img data-original-src="//upload-images.jianshu.io/upload_images/3270074-f44803c44786f0a9.png" data-original-width="729" data-original-height="539" data-original-format="image/png" data-original-filesize="46041" style="cursor: zoom-in;" class="" src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/3270074-f44803c44786f0a9.png"></div>
</div>
<div class="image-caption">将FFmpeg编译成一个so文件</div>
</div>
<h1>4.遇到的问题</h1>
<p><strong>NDK路径错误</strong></p>
<p>遇到这个错误仔细检查一遍设置的路径有没有问题,我就栽在了这个坑里:</p>
<div class="image-package">
<div class="image-container" style="max-width: 700px; max-height: 437px; background-color: transparent;">
<div class="image-container-fill" style="padding-bottom: 59.95%;"></div>
<div class="image-view" data-width="729" data-height="437"><img data-original-src="//upload-images.jianshu.io/upload_images/3270074-8c7da51bb7a3afaf.png" data-original-width="729" data-original-height="437" data-original-format="image/png" data-original-filesize="137643" style="cursor: zoom-in;" class="" src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/3270074-8c7da51bb7a3afaf.png"></div>
</div>
<div class="image-caption">NDK路径错误</div>
</div>
<p><strong>android文件夹带锁</strong></p>
<p>编译成功后,android文件夹是带锁的,执行下面的命令就可以解锁:</p>
<pre class="hljs undefined"><code>sudo chown 用户名 android/ -R
</code></pre>
<h1>5.写在最后</h1>
<p>第一次使用Linux系统和编译FFmpeg,一直在网上查命令和各种报错的解决方案,这篇文章前前后后写了一个多月,如有错误的地方,可以给我留言指正,多谢!</p>
<p>文中用到的FFmpeg源码、编译脚本以及编译生成的so文件已经上传至GitHub,后续还会更新,欢迎Start、Fork!</p>
<p><a href="https://link.jianshu.com/?t=https%3A%2F%2Fgithub.com%2Falidili%2FFFmpeg4Android" target="_blank" rel="nofollow">GitHub传送门</a></p>
<p>本篇文章到这里就结束了,下一篇文章将会继续介绍如何在Android项目中使用FFmepg,敬请期待!</p>
</div>
</div>
</div>
<!-- 如果是付费文章,未购买,则显示购买按钮 -->
<!-- 连载目录项 -->
<!-- 如果是付费文章 -->
<!-- 如果是付费连载,已购买,且作者允许赞赏,则显示付费信息和赞赏 -->
<div id="free-reward-panel" class="support-author"><p>点个喜欢就好</p> <div class="btn btn-pay">赞赏支持</div> <div class="supporter"><ul class="support-list"></ul> <!----></div> <!----> <!----></div>
<div class="show-foot">
<a class="notebook" href="https://www.jianshu.com/nb/21245945">
<i class="iconfont ic-search-notebook"></i>
<span>NDK开发</span>
</a> <div class="copyright" data-toggle="tooltip" data-html="true" data-original-title="转载请联系作者获得授权,并标注“简书作者”。">
© 著作权归作者所有
</div>
<div class="modal-wrap" data-report-note="">
<a id="report-modal">举报文章</a>
</div>
</div>
<!-- 文章底部作者信息 -->
<div class="follow-detail">
<div class="info">
<a class="avatar" href="https://www.jianshu.com/u/34ece31cd6eb">
<img src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/29276055bb9e.jpg" alt="96">
</a> <a class="btn btn-success follow"><i class="iconfont ic-follow"></i><span>关注</span></a>
<a class="title" href="https://www.jianshu.com/u/34ece31cd6eb">容华谢后</a>
<i class="iconfont ic-man"></i>
<p>写了 50204 字,被 1234 人关注,获得了 2422 个喜欢</p></div>
<div class="signature">主页:http://www.yangle.tech
GitHub:https://github.com/alidili
微信公众号『码个蛋』特约作者</div>
</div>
<div class="meta-bottom">
<div data-v-6ddd02c6="" class="like"><div data-v-6ddd02c6="" class="btn like-group"><div data-v-6ddd02c6="" class="btn-like"><a data-v-6ddd02c6="">喜欢</a></div> <div data-v-6ddd02c6="" class="modal-wrap"><a data-v-6ddd02c6="">23</a></div></div> <!----></div>
<div class="share-group">
<a class="share-circle" data-action="weixin-share" data-toggle="tooltip" data-original-title="分享到微信">
<i class="iconfont ic-wechat"></i>
</a>
<a class="share-circle" data-action="weibo-share" data-toggle="tooltip" href="javascript:void((function(s,d,e,r,l,p,t,z,c){var%20f='http://v.t.sina.com.cn/share/share.php?appkey=1881139527',u=z||d.location,p=['&amp;url=',e(u),'&amp;title=',e(t||d.title),'&amp;source=',e(r),'&amp;sourceUrl=',e(l),'&amp;content=',c||'gb2312','&amp;pic=',e(p||'')].join('');function%20a(){if(!window.open([f,p].join(''),'mb',['toolbar=0,status=0,resizable=1,width=440,height=430,left=',(s.width-440)/2,',top=',(s.height-430)/2].join('')))u.href=[f,p].join('');};if(/Firefox/.test(navigator.userAgent))setTimeout(a,0);else%20a();})(screen,document,encodeURIComponent,'','','', '%E6%8E%A8%E8%8D%90 @%E5%AE%B9%E5%8D%8E_%E8%B0%A2%E5%90%8E %E7%9A%84%E6%96%87%E7%AB%A0%E3%80%8AAndroid NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89 %E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%E3%80%8B%EF%BC%88 %E5%88%86%E4%BA%AB%E8%87%AA @%E7%AE%80%E4%B9%A6 %EF%BC%89','https://www.jianshu.com/p/9d8322e5de7f?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=reader_share&amp;utm_source=weibo','%E9%A1%B5%E9%9D%A2%E7%BC%96%E7%A0%81gb2312|utf-8%E9%BB%98%E8%AE%A4gb2312'));" data-original-title="分享到微博">
<i class="iconfont ic-weibo"></i>
</a>
<a class="share-circle" data-toggle="tooltip" id="longshare" target="_blank" data-original-title="" title="">
<div class="qrcode" id="qrcode">
<img src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/download-index-side-qrcode-cb13fc9106a478795f8d10f9f632fccf.png" alt="Download index side qrcode">
<p>下载app生成长微博图片</p>
</div>
<i class="iconfont ic-picture"></i>
</a>
<a class="share-circle more-share" tabindex="0" data-toggle="popover" data-placement="top" data-html="true" data-trigger="focus" href="javascript:void(0);" data-content="
&lt;ul class=&quot;share-list&quot;&gt;
&lt;li&gt;&lt;a href=&quot;javascript:void(function(){var d=document,e=encodeURIComponent,r='http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url='+e('https://www.jianshu.com/p/9d8322e5de7f?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=reader_share&amp;utm_source=qzone')+'&amp;title='+e('推荐 容华谢后 的文章《Android NDK开发(三) 在Linux环境下编译FFmpeg》'),x=function(){if(!window.open(r,'qzone','toolbar=0,resizable=1,scrollbars=yes,status=1,width=600,height=600'))location.href=r};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})();&quot;&gt;&lt;i class=&quot;social-icon-sprite social-icon-zone&quot;&gt;&lt;/i&gt;&lt;span&gt;分享到QQ空间&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;javascript:void(function(){var d=document,e=encodeURIComponent,r='https://twitter.com/share?url='+e('https://www.jianshu.com/p/9d8322e5de7f?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=reader_share&amp;utm_source=twitter')+'&amp;text='+e('推荐 容华谢后 的文章《Android NDK开发(三) 在Linux环境下编译FFmpeg》( 分享自 @jianshucom )')+'&amp;related='+e('jianshucom'),x=function(){if(!window.open(r,'twitter','toolbar=0,resizable=1,scrollbars=yes,status=1,width=600,height=600'))location.href=r};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})();&quot;&gt;&lt;i class=&quot;social-icon-sprite social-icon-twitter&quot;&gt;&lt;/i&gt;&lt;span&gt;分享到Twitter&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;javascript:void(function(){var d=document,e=encodeURIComponent,r='https://www.facebook.com/dialog/share?app_id=483126645039390&amp;display=popup&amp;href=https://www.jianshu.com/p/9d8322e5de7f?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=reader_share&amp;utm_source=facebook',x=function(){if(!window.open(r,'facebook','toolbar=0,resizable=1,scrollbars=yes,status=1,width=450,height=330'))location.href=r};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})();&quot;&gt;&lt;i class=&quot;social-icon-sprite social-icon-facebook&quot;&gt;&lt;/i&gt;&lt;span&gt;分享到Facebook&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;javascript:void(function(){var d=document,e=encodeURIComponent,r='https://plus.google.com/share?url='+e('https://www.jianshu.com/p/9d8322e5de7f?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=reader_share&amp;utm_source=google_plus'),x=function(){if(!window.open(r,'google_plus','toolbar=0,resizable=1,scrollbars=yes,status=1,width=450,height=330'))location.href=r};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})();&quot;&gt;&lt;i class=&quot;social-icon-sprite social-icon-google&quot;&gt;&lt;/i&gt;&lt;span&gt;分享到Google+&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;javascript:void(function(){var d=document,e=encodeURIComponent,s1=window.getSelection,s2=d.getSelection,s3=d.selection,s=s1?s1():s2?s2():s3?s3.createRange().text:'',r='http://www.douban.com/recommend/?url='+e('https://www.jianshu.com/p/9d8322e5de7f?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=reader_share&amp;utm_source=douban')+'&amp;title='+e('Android NDK开发(三) 在Linux环境下编译FFmpeg')+'&amp;sel='+e(s)+'&amp;v=1',x=function(){if(!window.open(r,'douban','toolbar=0,resizable=1,scrollbars=yes,status=1,width=450,height=330'))location.href=r+'&amp;r=1'};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})()&quot;&gt;&lt;i class=&quot;social-icon-sprite social-icon-douban&quot;&gt;&lt;/i&gt;&lt;span&gt;分享到豆瓣&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
" data-original-title="" title="">更多分享</a>
</div>
</div>
<a id="web-note-ad-1" target="_blank" href="https://www.jianshu.com/apps/redirect?utm_source=note-bottom-click"><img src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/web-note-ad-1-c2e1746859dbf03abe49248893c9bea4.png" alt="Web note ad 1"></a>
<!--
<div id="note-comment-above-ad-container">
<span id="youdao-comment-ad" class="ad-badge">广告</span>
</div>
-->
<div><div id="comment-list" class="comment-list"><div><form class="new-comment"><a class="avatar"><img src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/avatar_default-78d4d1f68984cd6d4379508dd94b4210.png"></a> <div class="sign-container"><a href="https://www.jianshu.com/sign_in?utm_source=desktop&amp;utm_medium=not-signed-in-comment-form" class="btn btn-sign">登录</a> <span>后发表评论</span></div></form> <!----></div> <!----> <div class="comments-placeholder" style="display: none;"><div class="author"><div class="avatar"></div> <div class="info"><div class="name"></div> <div class="meta"></div></div></div> <div class="text"></div> <div class="text animation-delay"></div> <div class="tool-group"><i class="iconfont ic-zan-active"></i><div class="zan"></div> <i class="iconfont ic-list-comments"></i><div class="zan"></div></div></div> <div id="normal-comment-list" class="normal-comment-list"><div><div><div class="top-title"><span>4条评论</span> <a class="author-only">只看作者</a> <a class="close-btn" style="display: none;">关闭评论</a> <div class="pull-right"><a class="active">按时间倒序</a><a class="">按时间正序</a></div></div></div> <!----> <!----> <div class="comments-placeholder" style="display: none;"><div class="author"><div class="avatar"></div> <div class="info"><div class="name"></div> <div class="meta"></div></div></div> <div class="text"></div> <div class="text animation-delay"></div> <div class="tool-group"><i class="iconfont ic-zan-active"></i><div class="zan"></div> <i class="iconfont ic-list-comments"></i><div class="zan"></div></div></div> <div id="comment-24268023" class="comment"><div><div class="author"><div data-v-f3bf5228="" class="v-tooltip-container" style="z-index: 0;"><div class="v-tooltip-content"><a href="https://www.jianshu.com/u/5d889332920f" target="_blank" class="avatar"><img src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/af861fc2-e72e-4665-bb93-d84422b9b2f7.jpg"></a> </div> <!----></div> <div class="info"><a href="https://www.jianshu.com/u/5d889332920f" target="_blank" class="name">Light_0083</a> <!----> <!----> <div class="meta"><span>3楼 · 2018.05.23 11:17</span></div></div></div> <div class="comment-wrap"><p>请问下编译完成的libffmpeg.so文件为什么有82.5 MB,这个正常吗?</p> <!----> <div class="tool-group"><a data-v-cdecbe24="" id="like-button-24268023" class="like-button"><span data-v-cdecbe24=""></span></a> <a class=""><i class="iconfont ic-comment"></i> <span>回复</span></a> <!----> <!----></div></div></div> <div class="sub-comment-list"><div id="comment-24274214" class="sub-comment"><p><div data-v-f3bf5228="" class="v-tooltip-container" style="z-index: 0;"><div class="v-tooltip-content"><a href="https://www.jianshu.com/u/34ece31cd6eb" target="_blank">容华谢后</a>
</div> <!----></div> <span>正常,是这么大,分开编译小一点。</span> <!----></p> <div class="sub-tool-group"><span>2018.05.23 13:54</span> <a class=""><i class="iconfont ic-comment"></i> <span>回复</span></a> <!----> <!----></div></div> <div class="sub-comment more-comment"><a class="add-comment-btn"><i class="iconfont ic-subcomment"></i> <span>添加新评论</span></a> <!----> <!----> <!----></div> <!----></div></div><div id="comment-22662401" class="comment"><div><div class="author"><div data-v-f3bf5228="" class="v-tooltip-container" style="z-index: 0;"><div class="v-tooltip-content"><a href="https://www.jianshu.com/u/37253cc0f917" target="_blank" class="avatar"><img src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/72ef6768476e.jpg"></a> </div> <!----></div> <div class="info"><a href="https://www.jianshu.com/u/37253cc0f917" target="_blank" class="name">37253cc0f917</a> <!----> <!----> <div class="meta"><span>2楼 · 2018.04.10 19:35</span></div></div></div> <div class="comment-wrap"><p>按照你这个来总报错,不知道咋么回事</p> <!----> <div class="tool-group"><a data-v-cdecbe24="" id="like-button-22662401" class="like-button"><span data-v-cdecbe24=""></span></a> <a class=""><i class="iconfont ic-comment"></i> <span>回复</span></a> <!----> <!----></div></div></div> <div class="sub-comment-list"><div id="comment-22662532" class="sub-comment"><p><div data-v-f3bf5228="" class="v-tooltip-container" style="z-index: 0;"><div class="v-tooltip-content"><a href="https://www.jianshu.com/u/34ece31cd6eb" target="_blank">容华谢后</a>
</div> <!----></div> <span><a href="https://www.jianshu.com/users/37253cc0f917" class="maleskine-author" target="_blank" data-user-slug="37253cc0f917">@37253cc0f917</a> 报什么错</span> <!----></p> <div class="sub-tool-group"><span>2018.04.10 19:39</span> <a class=""><i class="iconfont ic-comment"></i> <span>回复</span></a> <!----> <!----></div></div> <div class="sub-comment more-comment"><a class="add-comment-btn"><i class="iconfont ic-subcomment"></i> <span>添加新评论</span></a> <!----> <!----> <!----></div> <!----></div></div></div></div> <!----> <div><!----></div></div></div>
</div>
<div class="side-tool"><ul><li data-placement="left" data-toggle="tooltip" data-container="body" data-original-title="回到顶部" style="display: none;"><a class="function-button"><i class="iconfont ic-backtop"></i></a></li> <!----> <!----> <!----> <!----> <li data-placement="left" data-toggle="tooltip" data-container="body" data-original-title="分享文章" id="share"><a tabindex="0" role="button" data-toggle="popover" data-placement="left" data-html="true" data-trigger="focus" href="javascript:void(0);" data-content="&lt;ul class='share-list' style=&quot;width:220px&quot;&gt;
&lt;li&gt;&lt;a class=&quot;weixin-share&quot;&gt;&lt;i class=&quot;social-icon-sprite social-icon-weixin&quot;&gt;&lt;/i&gt;&lt;span&gt;分享到微信&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;javascript:void((function(s,d,e,r,l,p,t,z,c){var%20f='http://v.t.sina.com.cn/share/share.php?appkey=1881139527',u=z||d.location,p=['&amp;url=',e(u),'&amp;title=',e(t||d.title),'&amp;source=',e(r),'&amp;sourceUrl=',e(l),'&amp;content=',c||'gb2312','&amp;pic=',e(p||'')].join('');function%20a(){if(!window.open([f,p].join(''),'mb',['toolbar=0,status=0,resizable=1,width=440,height=430,left=',(s.width-440)/2,',top=',(s.height-430)/2].join('')))u.href=[f,p].join('');};if(/Firefox/.test(navigator.userAgent))setTimeout(a,0);else%20a();})(screen,document,encodeURIComponent,'','','', '推荐 @容华_谢后 的文章《Android NDK开发(三) 在Linux环境下编译FFmpeg》( 分享自 @简书 )','https://www.jianshu.com/p/9d8322e5de7f?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=reader_share&amp;utm_source=weibo','页面编码gb2312|utf-8默认gb2312'));&quot;&gt;&lt;i class='social-icon-sprite social-icon-weibo'&gt;&lt;/i&gt;&lt;span&gt;分享到微博&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;javascript:void(function(){var d=document,e=encodeURIComponent,r='http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url='+e('https://www.jianshu.com/p/9d8322e5de7f?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=reader_share&amp;utm_source=qzone')+'&amp;title='+e('推荐 容华谢后 的文章《Android NDK开发(三) 在Linux环境下编译FFmpeg》'),x=function(){if(!window.open(r,'qzone','toolbar=0,resizable=1,scrollbars=yes,status=1,width=600,height=600'))location.href=r};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})();&quot;&gt;&lt;i class='social-icon-sprite social-icon-zone'&gt;&lt;/i&gt;&lt;span&gt;分享到QQ空间&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;javascript:void(function(){var d=document,e=encodeURIComponent,r='https://twitter.com/share?url='+e('https://www.jianshu.com/p/9d8322e5de7f?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=reader_share&amp;utm_source=twitter')+'&amp;text='+e('推荐 容华谢后 的文章《Android NDK开发(三) 在Linux环境下编译FFmpeg》( 分享自 @jianshucom )')+'&amp;related='+e('jianshucom'),x=function(){if(!window.open(r,'twitter','toolbar=0,resizable=1,scrollbars=yes,status=1,width=600,height=600'))location.href=r};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})();&quot;&gt;&lt;i class='social-icon-sprite social-icon-twitter'&gt;&lt;/i&gt;&lt;span&gt;分享到Twitter&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;javascript:void(function(){var d=document,e=encodeURIComponent,r='https://www.facebook.com/dialog/share?app_id=483126645039390&amp;display=popup&amp;href=https://www.jianshu.com/p/9d8322e5de7f?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=reader_share&amp;utm_source=facebook',x=function(){if(!window.open(r,'facebook','toolbar=0,resizable=1,scrollbars=yes,status=1,width=450,height=330'))location.href=r};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})();&quot;&gt;&lt;i class='social-icon-sprite social-icon-facebook'&gt;&lt;/i&gt;&lt;span&gt;分享到Facebook&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;javascript:void(function(){var d=document,e=encodeURIComponent,r='https://plus.google.com/share?url='+e('https://www.jianshu.com/p/9d8322e5de7f?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=reader_share&amp;utm_source=google_plus'),x=function(){if(!window.open(r,'google_plus','toolbar=0,resizable=1,scrollbars=yes,status=1,width=450,height=330'))location.href=r};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})();&quot;&gt;&lt;i class='social-icon-sprite social-icon-google'&gt;&lt;/i&gt;&lt;span&gt;分享到Google+&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;javascript:void(function(){var d=document,e=encodeURIComponent,s1=window.getSelection,s2=d.getSelection,s3=d.selection,s=s1?s1():s2?s2():s3?s3.createRange().text:'',r='http://www.douban.com/recommend/?url='+e('https://www.jianshu.com/p/9d8322e5de7f?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=reader_share&amp;utm_source=douban')+'&amp;title='+e('Android NDK开发(三) 在Linux环境下编译FFmpeg')+'&amp;sel='+e(s)+'&amp;v=1',x=function(){if(!window.open(r,'douban','toolbar=0,resizable=1,scrollbars=yes,status=1,width=450,height=330'))location.href=r+'&amp;r=1'};if(/Firefox/.test(navigator.userAgent)){setTimeout(x,0)}else{x()}})()&quot;&gt;&lt;i class='social-icon-sprite social-icon-douban'&gt;&lt;/i&gt;&lt;span&gt;分享到豆瓣&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;" data-original-title="" title="" class="function-button"><i class="iconfont ic-share"></i></a> <!----></li> <!----></ul></div>
</div>
<div class="note-bottom">
<div><div class="main"><div class="title">被以下专题收入,发现更多相似内容</div> <!----> <div class="include-collection"><!----> <a href="https://www.jianshu.com/c/5139d555c94d?utm_source=desktop&amp;utm_medium=notes-included-collection" target="_blank" class="item"><img src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/1416528891_3612.png"><div class="name">Android...</div></a><a href="https://www.jianshu.com/c/0dc880a2c73c?utm_source=desktop&amp;utm_medium=notes-included-collection" target="_blank" class="item"><img src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/ff55916a6a0c2db84ebb1ffdcef539dd.png"><div class="name">Android开发</div></a><a href="https://www.jianshu.com/c/d1591c322c89?utm_source=desktop&amp;utm_medium=notes-included-collection" target="_blank" class="item"><img src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/android.jpg"><div class="name">Android开发</div></a><a href="https://www.jianshu.com/c/bDHhpK?utm_source=desktop&amp;utm_medium=notes-included-collection" target="_blank" class="item"><img src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/a.png"><div class="name">首页投稿(暂停...</div></a><a href="https://www.jianshu.com/c/NEt52a?utm_source=desktop&amp;utm_medium=notes-included-collection" target="_blank" class="item"><img src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/computer_guy.jpg"><div class="name">程序员</div></a><a href="https://www.jianshu.com/c/e537afd8bffa?utm_source=desktop&amp;utm_medium=notes-included-collection" target="_blank" class="item"><img src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/crop1505798605198.jpg"><div class="name">图像,音视频</div></a><a href="https://www.jianshu.com/c/4123eb37db68?utm_source=desktop&amp;utm_medium=notes-included-collection" target="_blank" class="item"><img src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/1525832666.jpg"><div class="name">Android...</div></a> <!----></div></div> <!----> <!----></div>
<div data-vcomp="recommended-notes" data-note-id="24807649"></div>
<!-- 相关文章 -->
<!-- 未登录用户 -->
<div class="seo-recommended-notes">
<div class="note ">
<a class="title" target="_blank" href="https://www.jianshu.com/p/dad51f6c9c4d?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=seo_notes&amp;utm_source=recommendation">Android - 收藏集 </a>
<p class="description">用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金
Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取
View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...</p>
<a class="author" target="_blank" href="https://www.jianshu.com/u/e946d18f163c?utm_campaign=maleskine&amp;utm_content=user&amp;utm_medium=seo_notes&amp;utm_source=recommendation">
<div class="avatar">
<img src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/4-3397163ecdb3855a0a4139c34a695885.jpg" alt="48">
</div>
<span class="name">passiontim</span>
</a> </div>
<div class="note have-img">
<a class="cover" target="_blank" href="https://www.jianshu.com/p/cb2f7e2da29f?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=seo_notes&amp;utm_source=recommendation">
<img src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/3084440-52457f28e6e6225b.png" alt="240">
</a> <a class="title" target="_blank" href="https://www.jianshu.com/p/cb2f7e2da29f?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=seo_notes&amp;utm_source=recommendation">Android游戏开发实践(1)之NDK与JNI开发02</a>
<p class="description">Android游戏开发实践(1)之NDK与JNI开发02
承接上篇Android游戏开发实践(1)之NDK与JNI开发01分享完JNI的基础和简要开发流程之后,再来分享下在Android环境下的JNI的
开发,以及涉及到的NDK相关的操作。当然,本篇仍是以Eclipse作为开...</p>
<a class="author" target="_blank" href="https://www.jianshu.com/u/4cc00e2af10b?utm_campaign=maleskine&amp;utm_content=user&amp;utm_medium=seo_notes&amp;utm_source=recommendation">
<div class="avatar">
<img src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/1-04bbeead395d74921af6a4e8214b4f61.jpg" alt="48">
</div>
<span class="name">AlphaGL</span>
</a> </div>
<div class="note have-img">
<a class="cover" target="_blank" href="https://www.jianshu.com/p/9c6caa9979e3?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=seo_notes&amp;utm_source=recommendation">
<img src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/1824809-3d0b3c951b39f72c.jpg" alt="240">
</a> <a class="title" target="_blank" href="https://www.jianshu.com/p/9c6caa9979e3?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=seo_notes&amp;utm_source=recommendation">Android NDK开发之旅32--云服务器Ubuntu下搭建NDK环境,并编译FFmpeg</a>
<p class="description">Android NDK开发之旅 目录 前言
因为在Linux环境下编译FFmpeg生成库和头文件下比较方便,所以接下来主要操作在Linux环境下进行。但是对于Android NDK
开发新手来说,自己电脑配置Ubuntu Linux环境过程比较繁琐。而采用云服务器极大的方便...</p>
<a class="author" target="_blank" href="https://www.jianshu.com/u/9657d11e6c3d?utm_campaign=maleskine&amp;utm_content=user&amp;utm_medium=seo_notes&amp;utm_source=recommendation">
<div class="avatar">
<img src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/e7ad9250-95d1-4013-8f22-bdf371637e33.png" alt="48">
</div>
<span class="name">香沙小熊</span>
</a> </div>
<div class="note ">
<a class="title" target="_blank" href="https://www.jianshu.com/p/f23c62820b79?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=seo_notes&amp;utm_source=recommendation">Android 集成 FFmpeg (一) 基础知识及简单调用</a>
<p class="description">前言 网上关于 Android 集成 FFmpeg
的文章很多,但大多数都只介绍了步骤,没有说明背后的原理,若之前没有集成底层库的经验,那就会“神知无知”的走一步看一步,出错几率很大,出错了也不知
道原因,然后会乱猜“这篇教程有问题“,“换个版本估计可以”,甚至“电脑有问题,...</p>
<a class="author" target="_blank" href="https://www.jianshu.com/u/bf20b3c0da59?utm_campaign=maleskine&amp;utm_content=user&amp;utm_medium=seo_notes&amp;utm_source=recommendation">
<div class="avatar">
<img src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/afff40f9-4d71-4e6e-8ab3-479a82cb3b15.jpg" alt="48">
</div>
<span class="name">王英豪</span>
</a> </div>
<div class="note ">
<a class="title" target="_blank" href="https://www.jianshu.com/p/ac438da137a6?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=seo_notes&amp;utm_source=recommendation">作为产品经理,我认为应该....</a>
<p class="description">作为一个合格的产品经理,我认为,他必须是专业的,至少达到三点:
1)信息同步 2)文档逻辑清晰 3)了解程序实现方式 我为什么这么说:
场景1:目前接触的一个新app需求中,安卓版本比IOS版本先开发、上线了两周。而这两周的时间导致安卓的需求沟通过程中很多问题已经提出解决了...</p>
<a class="author" target="_blank" href="https://www.jianshu.com/u/78efbb23ae80?utm_campaign=maleskine&amp;utm_content=user&amp;utm_medium=seo_notes&amp;utm_source=recommendation">
<div class="avatar">
<img src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/1071d728-beaf-47b3-b566-196851aafafb.png" alt="48">
</div>
<span class="name">我是小柒</span>
</a> </div>
<div class="note have-img">
<a class="cover" target="_blank" href="https://www.jianshu.com/p/5f274cec97f0?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=seo_notes&amp;utm_source=recommendation">
<img src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/1496109-8a14ab369f04989d.png" alt="240">
</a> <a class="title" target="_blank" href="https://www.jianshu.com/p/5f274cec97f0?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=seo_notes&amp;utm_source=recommendation">《锦绣未央》里的皇爷爷历史上到底是怎么死的?</a>
<p class="description">54集的《锦绣未央》已经演完了,不过观众们的热情并没有消退,人们茶余饭后谈
论的人物对象依旧是剧中的人物。比如大结局非常虐心,拓跋浚为了救未央毅然放弃了世上唯一的解药,结果最后五六年的光景就充满遗憾的死去。今天,我们不谈
男主和女主,我们谈谈剧中的黄金配角,比如十分疼爱拓跋浚的...</p>
<a class="author" target="_blank" href="https://www.jianshu.com/u/57c063d42af0?utm_campaign=maleskine&amp;utm_content=user&amp;utm_medium=seo_notes&amp;utm_source=recommendation">
<div class="avatar">
<img src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/c9416693-24ec-4250-9df3-2182f0c3fff5.jpg" alt="48">
</div>
<span class="name">一个历史围观群众</span>
</a> </div>
<div class="note have-img">
<a class="cover" target="_blank" href="https://www.jianshu.com/p/36ff0946fddf?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=seo_notes&amp;utm_source=recommendation">
<img src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/7290548-9297ccc0fc1c2c49.jpg" alt="240">
</a> <a class="title" target="_blank" href="https://www.jianshu.com/p/36ff0946fddf?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=seo_notes&amp;utm_source=recommendation">怎么做一个好的演讲</a>
<p class="description">今天晨读是一个好的演讲的三大要素,说实话,比较简单也比较深奥,实话实说,讲
述故事,用图说话。里面用了很多技巧。 其实对于普通小白来说,从我的角度来说我注重这三点: 1. Tell them what you will
tell them.告诉听众你想分享什么。 2. Tel...</p>
<a class="author" target="_blank" href="https://www.jianshu.com/u/aad6e6c745b1?utm_campaign=maleskine&amp;utm_content=user&amp;utm_medium=seo_notes&amp;utm_source=recommendation">
<div class="avatar">
<img src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/2a3ecac5-69ee-45fe-af39-bc252fd736d9.jpg" alt="48">
</div>
<span class="name">二十少</span>
</a> </div>
<div class="note ">
<a class="title" target="_blank" href="https://www.jianshu.com/p/18e3477af8ac?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=seo_notes&amp;utm_source=recommendation">六、结尾——整理文章来源:</a>
<p class="description">互动百科:http://tupian.baike.com/doc/重庆小面
/tctupian/1/3?target=a3_86_50_01300543957669147314508795108.jpg菜谱网:http:
//www.meishij.net/zuofa/zhon...</p>
<a class="author" target="_blank" href="https://www.jianshu.com/u/e3ce51b718c3?utm_campaign=maleskine&amp;utm_content=user&amp;utm_medium=seo_notes&amp;utm_source=recommendation">
<div class="avatar">
<img src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/7d38d6ce9b21.jpg" alt="48">
</div>
<span class="name">爱milk大布丁</span>
</a> </div>
<div class="note have-img">
<a class="cover" target="_blank" href="https://www.jianshu.com/p/55bf04d33eb9?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=seo_notes&amp;utm_source=recommendation">
<img src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/7322806-b7e535e1bf7c2e6c.jpg" alt="240">
</a> <a class="title" target="_blank" href="https://www.jianshu.com/p/55bf04d33eb9?utm_campaign=maleskine&amp;utm_content=note&amp;utm_medium=seo_notes&amp;utm_source=recommendation">201708贵州自驾行</a>
<p class="description">蜀中酷暑渐难当, 黔地悠游载歌行。 黄果赤水有巨瀑, 熊咆龙吟堪盛名!
七孔玲珑拉雅秀, 西江苗寨月正明。 山美水美人欲醉, 五千里路逐日星!
写在前面:千万别以为到了贵州就能避到暑了,实际上大多数地方还是热,日照强烈,黄果树、龙宫、小七孔、千户苗寨,游客都多到爆,买票排队...</p>
<a class="author" target="_blank" href="https://www.jianshu.com/u/533f936b8f42?utm_campaign=maleskine&amp;utm_content=user&amp;utm_medium=seo_notes&amp;utm_source=recommendation">
<div class="avatar">
<img src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/fd696722-6142-46ee-a410-ed3d66182012.jpg" alt="48">
</div>
<span class="name">francoMGe</span>
</a> </div>
</div>
</div>
<script type="application/json" data-name="page-data">{"user_signed_in":false,"locale":"zh-CN","os":"windows","read_mode":"day","read_font":"font2","note_show":{"is_author":false,"is_following_author":false,"is_liked_note":false,"follow_state":0,"uuid":"0b6cc5e4-77ea-4f48-a72f-118de054ba1f"},"note":{"id":24807649,"slug":"9d8322e5de7f","user_id":3270074,"notebook_id":21245945,"commentable":true,"likes_count":23,"views_count":1163,"public_wordage":1337,"comments_count":4,"featured_comments_count":0,"total_rewards_count":0,"is_author":false,"paid_type":"free","paid":false,"paid_content_accessible":false,"author":{"nickname":"容华谢后","total_wordage":50204,"followers_count":1234,"total_likes_count":2422}}}</script>
<script src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/babel-polyfill-6cd2d6b53fe3184b71cc.js" crossorigin="anonymous"></script>
<script src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/web-base-ff73d517fc8d3c3429e6.js" crossorigin="anonymous"></script>
<script src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/web-5a55490af7df504104e6.js" crossorigin="anonymous"></script>
<script src="Android%20NDK%E5%BC%80%E5%8F%91%EF%BC%88%E4%B8%89%EF%BC%89%20%E5%9C%A8Linux%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%BC%96%E8%AF%91FFmpeg%20-%20%E7%AE%80%E4%B9%A6_files/entry-82e44627b2e2d73431d6.js" crossorigin="anonymous"></script>
<script>
(function(){
var bp = document.createElement('script');
var curProtocol = window.location.protocol.split(':')[0];
if (curProtocol === 'https') {
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
}
else {
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
}
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(bp, s);
})();
</script>
<!----><!----></body></html>