<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-9153974093063210532</id><updated>2024-10-25T04:16:58.572+09:00</updated><title type='text'>lim n-&amp;gt;0 1/n=OO</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://demo860.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9153974093063210532/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://demo860.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>demo860</name><uri>http://www.blogger.com/profile/04247606496713975581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9153974093063210532.post-125841584364789625</id><published>2010-09-03T00:57:00.000+09:00</published><updated>2010-09-03T00:57:15.776+09:00</updated><title type='text'>ffmpeg , H264 ( LIBX264 ) build for android ...</title><content type='html'>I&amp;nbsp;forgot&amp;nbsp;soemthing&amp;nbsp;what i did for ffmpeg / h264 build on android, on this post&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://demo860.blogspot.com/search?updated-min=2010-06-01T00%3A00%3A00%2B09%3A00&amp;amp;updated-max=2010-07-01T00%3A00%3A00%2B09%3A00&amp;amp;max-results=6&quot;&gt;ffmpeg / libx264 build for ANDROID &lt;/a&gt;&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
I&amp;nbsp;tried one more time, but got some problem &lt;br /&gt;
&lt;br /&gt;
1) ffmpeg configure has a problem &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; - it can&#39;t find X264 lib well.&lt;br /&gt;
2) After fixing x264 lib, still there is a following error.&lt;br /&gt;
&lt;br /&gt;
/sdcard/arm_and/lib/libx264.a(encoder.o): In function `x264_encoder_open_98&#39;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
encoder.c:(.text.x264_encoder_open_98+0x5d6): undefined reference to `__clzsi2&#39;&lt;br /&gt;
&lt;br /&gt;
/sdcard/arm_and/lib/libx264.a(analyse.o): In function `x264_macroblock_tree_finish&#39;:&lt;br /&gt;
&lt;br /&gt;
analyse.c:(.text.x264_macroblock_tree_finish+0x78): undefined reference to `__clzsi2&#39;&lt;br /&gt;
&lt;br /&gt;
analyse.c:(.text.x264_macroblock_tree_finish+0x80): undefined reference to `__clzsi2&#39;&lt;br /&gt;
&lt;br /&gt;
/sdcard/arm_and/lib/libx264.a(ratecontrol.o): In function `x264_ratecontrol_init_reconfigurable&#39;:&lt;br /&gt;
&lt;br /&gt;
ratecontrol.c:(.text.x264_ratecontrol_init_reconfigurable+0x174): undefined reference to `__ctzsi2&#39;&lt;br /&gt;
&lt;br /&gt;
ratecontrol.c:(.text.x264_ratecontrol_init_reconfigurable+0x1b6): undefined reference to `__ctzsi2&#39;&lt;br /&gt;
ratecontrol.c:(.text.x264_ratecontrol_init_reconfigurable+0x28a): undefined reference to `__clzsi2&#39;&lt;br /&gt;
ratecontrol.c:(.text.x264_ratecontrol_init_reconfigurable+0x2ac): undefined reference to `__clzsi2&#39;&lt;br /&gt;
ratecontrol.c:(.text.x264_ratecontrol_init_reconfigurable+0x2ce): undefined reference to `__clzsi2&lt;br /&gt;
/sdcard/arm_and/lib/libx264.a(ratecontrol.o): In function `x264_adaptive_quant_frame&#39;:&lt;br /&gt;
ratecontrol.c:(.text.x264_adaptive_quant_frame+0x28a): undefined reference to `__clzsi2&#39;&lt;br /&gt;
collect2: ld returned 1 exit status&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;strong&gt;How to fix ??&lt;/strong&gt;&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) ffmpeg configure issue&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; - most easy solution is &quot;remove x264 checking part on ffmpeg configure &quot;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a) update&lt;span style=&quot;color: red;&quot;&gt; configure &lt;/span&gt;file&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; yes, remove checking part.&lt;br /&gt;
&lt;br /&gt;
##enabled libx264 &amp;amp;&amp;amp; require libx264 x264.h x264_encoder_encode -lx264 &amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
## { check_cpp_condition x264.h &quot;X264_BUILD &amp;gt;= 98&quot; &lt;br /&gt;
## die &quot;ERROR: libx264 version must be &amp;gt;= 0.98.&quot;; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) x264 source ..&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i don&#39;t know real reason, but there is no clz funtion on android system lib.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; so please remark&amp;nbsp; 3 lines on &lt;span style=&quot;color: red;&quot;&gt;&lt;strong&gt;&quot;common/osdep.h&lt;/strong&gt;&lt;/span&gt;&quot; from X264 source.&lt;br /&gt;
// #define x264_clz(x) __builtin_clz(x)&lt;br /&gt;
&lt;br /&gt;
// #define x264_ctz(x) __builtin_ctz(x)&lt;br /&gt;
// #else&lt;br /&gt;
&lt;br /&gt;
final source will be like this.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#if defined(__GNUC__) &amp;amp;&amp;amp; (__GNUC__ &amp;gt; 3 &lt;br /&gt;
__GNUC__ == 3 &amp;amp;&amp;amp; __GNUC_MINOR__ &amp;gt; 3)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// #define x264_clz(x) __builtin_clz(x)&lt;br /&gt;
&lt;br /&gt;
// #define x264_ctz(x) __builtin_ctz(x)&lt;br /&gt;
&lt;br /&gt;
// #else&lt;br /&gt;
&lt;br /&gt;
static int ALWAYS_INLINE x264_clz( uint32_t x )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;u&gt;&amp;nbsp;Steps...&lt;/u&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
1)&amp;nbsp; change X264 source first.&lt;br /&gt;
&lt;br /&gt;
2)&amp;nbsp; build X264 &lt;br /&gt;
&lt;br /&gt;
3) change ffmpeg configure &lt;br /&gt;
&lt;br /&gt;
4) ffmpeg compile ..&lt;br /&gt;
&lt;br /&gt;
Please read previous POST ..&lt;br /&gt;
&lt;br /&gt;
For Advance ^_^</content><link rel='replies' type='application/atom+xml' href='http://demo860.blogspot.com/feeds/125841584364789625/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://demo860.blogspot.com/2010/09/ffmpeg-h264-libx264-build-for-android.html#comment-form' title='1개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9153974093063210532/posts/default/125841584364789625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9153974093063210532/posts/default/125841584364789625'/><link rel='alternate' type='text/html' href='http://demo860.blogspot.com/2010/09/ffmpeg-h264-libx264-build-for-android.html' title='ffmpeg , H264 ( LIBX264 ) build for android ...'/><author><name>demo860</name><uri>http://www.blogger.com/profile/04247606496713975581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9153974093063210532.post-3032064406393938980</id><published>2010-07-30T21:11:00.000+09:00</published><updated>2010-07-30T21:11:50.752+09:00</updated><title type='text'>ffmpeg rtsp client android</title><content type='html'>ffmpeg is very powerful lib to handle multimedia file.&lt;br /&gt;
&lt;br /&gt;
we can use ffmpeg several ways with android&lt;br /&gt;
&lt;br /&gt;
1) ffmpeg server ( remote ) &amp;amp; android device.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; - for this one, we use ffserver with ffmpeg, rtsp service to android.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; - unfortunately, ffserver RTSP doesn&#39;t have &quot;RTP-Info&quot; part for android PLAY call,&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;android can&#39;t co-work with ffserver RTSP.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; - how to fix : please read previous post.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://demo860.blogspot.com/2010/07/ffserver-android-rtsp-bug-fix.html&quot;&gt;RTP-INFO FIX &lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; - after you fix ffserver RTP-INFO, android media player can play ffserver stream.&lt;br /&gt;
&lt;br /&gt;
2) porting ffserver &amp;amp; ffmpeg.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; - you can port ffserver &amp;amp; ffmpeg on android phone.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; - But the speed is too slow, some low end device can&#39;t run such combination.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; - The production machine don&#39;t allow to run &quot;executable&amp;nbsp;file&quot;, so you need to make&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;simple JNI wrapper.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://demo860.blogspot.com/2010/07/android-ffmpeg-dynamic-module-jni.html&quot;&gt;ffmpeg / ffserver simple JNI wrapper&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
3) run only ffmpeg on android phone.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; - for this case, it need to 3&amp;nbsp;implementation&amp;nbsp;ways.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; - 3-1) use ffmpeg for only file conversion.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this is not common way, but several media&amp;nbsp;converter&amp;nbsp;which run on android&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;use this way.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; - 3-2) real time transcoding.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;for this one, we can&#39;t use mediaplayer&#39;s Video service.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;most codec free tool use this way.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;to handle video, using ffmpeg function,&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;get MP4 video type and push it Video buffer directly.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;More detail, better to read &quot;Pro android Game&quot;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://apress.com/book/view/9781430226475&quot;&gt;PRO ANDROID GAME&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; This way, it&#39;s not simple, you need to know ffmpeg function to handle&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; video/audio stream.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;- 3-3) make simple RTSP server which work with ffmpeg.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this is not common way, but it&#39;s also possible.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;most&amp;nbsp;advantage&amp;nbsp;is you don&#39;t need to know ffmpeg media handling.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4) Any case, you need to build ffmpeg for android phone.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;- most simple way,&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;http://demo860.blogspot.com/2010_06_15_archive.html&quot;&gt;FFMPEG Porting &lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;- Recent version, you don&#39;t need to change anything. just configure option issue.</content><link rel='replies' type='application/atom+xml' href='http://demo860.blogspot.com/feeds/3032064406393938980/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://demo860.blogspot.com/2010/07/ffmpeg-rtsp-client-android.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9153974093063210532/posts/default/3032064406393938980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9153974093063210532/posts/default/3032064406393938980'/><link rel='alternate' type='text/html' href='http://demo860.blogspot.com/2010/07/ffmpeg-rtsp-client-android.html' title='ffmpeg rtsp client android'/><author><name>demo860</name><uri>http://www.blogger.com/profile/04247606496713975581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9153974093063210532.post-201120790240856712</id><published>2010-07-28T17:16:00.000+09:00</published><updated>2010-07-28T17:16:24.289+09:00</updated><title type='text'>ffserver android RTSP bug fix</title><content type='html'>ffserver can&#39;t work with Android, samsung galaxy S is working without bug fix, but Motorola didn&#39;t work.&lt;br /&gt;
&lt;br /&gt;
Also android-x86 didn&#39;t work too.&lt;br /&gt;
&lt;br /&gt;
A) Why ??&lt;br /&gt;
&lt;br /&gt;
The RTP&amp;nbsp; of ffserver has no bug, but there is no &quot;RTP-info&quot; on PLAY response.&lt;br /&gt;
&lt;br /&gt;
- The combination VLC / android phone&amp;nbsp; : working version.&lt;br /&gt;
&lt;br /&gt;
You can see RTP-Info part.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PLAY rtsp://192.168.1.53:5454/test.mpg RTSP/1.0&lt;br /&gt;
&lt;br /&gt;
CSeq: 4&lt;br /&gt;
&lt;br /&gt;
Session: 3799294ce1f1ee34&lt;br /&gt;
&lt;br /&gt;
User-Agent: PVPlayer CORE/8.000.1.1_RC4 OpenCORE/2.05 (Linux;Android 1.6)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RTSP/1.0 200 OK&lt;br /&gt;
&lt;br /&gt;
Server: VLC/1.1.0&lt;br /&gt;
&lt;br /&gt;
Date: Tue, 27 Jul 2010 11:02:05 GMT&lt;br /&gt;
&lt;br /&gt;
RTP-Info: url=rtsp://192.168.1.53:5454/test.mpg/trackID=0;seq=43574;rtptime=205760961, url=rtsp://192.168.1.53:5454/test.mpg/trackID=1;seq=38412;rtptime=419920329&lt;br /&gt;
&lt;br /&gt;
Session: 3799294ce1f1ee34&lt;br /&gt;
&lt;br /&gt;
Content-Length: 0&lt;br /&gt;
&lt;br /&gt;
Cache-Control: no-cache&lt;br /&gt;
&lt;br /&gt;
Cseq: 4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- FFSERVER &amp;amp; Android phone &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 There is no RTP-Info.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PLAY rtsp://192.168.229.132:5454/test.mpg RTSP/1.0&lt;br /&gt;
&lt;br /&gt;
CSeq: 3&lt;br /&gt;
&lt;br /&gt;
Session: 0924e591d955735c&lt;br /&gt;
&lt;br /&gt;
User-Agent: PVPlayer CORE/8.000.1.1_RC4 OpenCORE/2.05 (Linux;Android 1.6)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
B) This is how to fix. &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
On rtsp_cmd_play function on ffserver.c, add RTP-Info. &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
static void rtsp_cmd_play(HTTPContext *c, const char *url, RTSPMessageHeader *h) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
HTTPContext *rtp_c;&lt;br /&gt;
&lt;br /&gt;
// DEMO860&lt;br /&gt;
&lt;br /&gt;
AVFormatContext *ctx;&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
RTPMuxContext *rptmuxctx;&lt;br /&gt;
&lt;br /&gt;
/////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
rtp_c = find_rtp_session_with_url(url, h-&amp;gt;session_id);&lt;br /&gt;
&lt;br /&gt;
if (!rtp_c) {&lt;br /&gt;
&lt;br /&gt;
rtsp_reply_error(c, RTSP_STATUS_SESSION);&lt;br /&gt;
&lt;br /&gt;
return;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if (rtp_c-&amp;gt;state != HTTPSTATE_SEND_DATA &amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
rtp_c-&amp;gt;state != HTTPSTATE_WAIT_FEED &amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
rtp_c-&amp;gt;state != HTTPSTATE_READY) {&lt;br /&gt;
&lt;br /&gt;
rtsp_reply_error(c, RTSP_STATUS_STATE);&lt;br /&gt;
&lt;br /&gt;
return;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
rtp_c-&amp;gt;state = HTTPSTATE_SEND_DATA;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* now everything is OK, so we can send the connection parameters */&lt;br /&gt;
&lt;br /&gt;
rtsp_reply_header(c, RTSP_STATUS_OK);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// DEMO860&lt;br /&gt;
url_fprintf(c-&amp;gt;pb, &quot;RTP-Info: &quot; );&lt;br /&gt;
&lt;br /&gt;
for(i=0;i&amp;lt; rtp_c-&amp;gt;stream-&amp;gt;nb_streams;i++) {&lt;br /&gt;
&lt;br /&gt;
ctx = rtp_c-&amp;gt;rtp_ctx[i];&lt;br /&gt;
&lt;br /&gt;
rptmuxctx = ctx-&amp;gt;priv_data;&lt;br /&gt;
&lt;br /&gt;
url_fprintf(c-&amp;gt;pb, &quot;url=%sstreamid=%d;seq=%u;rtptime=%u, &quot;, url, i, rptmuxctx-&amp;gt;seq, rptmuxctx-&amp;gt;timestamp );&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
url_fprintf(c-&amp;gt;pb, &quot;\r\n&quot;);&lt;br /&gt;
&lt;br /&gt;
////////////////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* session ID */&lt;br /&gt;
&lt;br /&gt;
url_fprintf(c-&amp;gt;pb, &quot;Session: %s\r\n&quot;, rtp_c-&amp;gt;session_id);&lt;br /&gt;
&lt;br /&gt;
url_fprintf(c-&amp;gt;pb, &quot;\r\n&quot;);&lt;br /&gt;
&lt;br /&gt;
}</content><link rel='replies' type='application/atom+xml' href='http://demo860.blogspot.com/feeds/201120790240856712/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://demo860.blogspot.com/2010/07/ffserver-android-rtsp-bug-fix.html#comment-form' title='1개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9153974093063210532/posts/default/201120790240856712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9153974093063210532/posts/default/201120790240856712'/><link rel='alternate' type='text/html' href='http://demo860.blogspot.com/2010/07/ffserver-android-rtsp-bug-fix.html' title='ffserver android RTSP bug fix'/><author><name>demo860</name><uri>http://www.blogger.com/profile/04247606496713975581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9153974093063210532.post-4549513658409522980</id><published>2010-07-09T20:56:00.000+09:00</published><updated>2010-07-09T20:56:41.591+09:00</updated><title type='text'>android / ffmpeg dynamic module, JNI simple wrapper</title><content type='html'>On production device, we can&#39;t use &quot;executable file &quot;.&lt;br /&gt;
&lt;br /&gt;
we need to build &quot;dynamic, SO module&quot; for ffmpeg/ ffserver.&lt;br /&gt;
&lt;br /&gt;
This post explain how to build SO module and simple JNI interface&amp;nbsp; for ffmpeg.&lt;br /&gt;
&lt;br /&gt;
1) change ffmpeg.c &lt;br /&gt;
&lt;br /&gt;
a) add JNI part.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// KKS ...&lt;br /&gt;
&lt;br /&gt;
#include &lt;jni.h&gt;&lt;br /&gt;
&lt;br /&gt;
int m_argc = 0;&lt;br /&gt;
&lt;br /&gt;
int M_MAX_ARGC = 30;&lt;br /&gt;
&lt;br /&gt;
char *m_pargv [30];&lt;br /&gt;
&lt;br /&gt;
int dynamic_ffpmeg_main (int argc, char **argv);&lt;br /&gt;
&lt;br /&gt;
jint JNICALL Java_com_ccmedia_codec_ffmpeg_mod_1run ( JNIEnv *, jclass, jstring, jstring );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
jint JNICALL Java_com_ccmedia_codec_ffmpeg_mod_1run ( JNIEnv *env, jclass class, jstring pj1, jstring pj2) {&lt;br /&gt;
&lt;br /&gt;
jint ji;&lt;br /&gt;
&lt;br /&gt;
jboolean ic;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
char sz_temp [1024];&lt;br /&gt;
&lt;br /&gt;
char seps [] = &quot; &quot;;&lt;br /&gt;
&lt;br /&gt;
char *psztoken, *pszdata;&lt;br /&gt;
&lt;br /&gt;
int i = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
const char *pszname;&lt;br /&gt;
&lt;br /&gt;
pszname = (*env)-&amp;gt;GetStringUTFChars(env, pj1, &amp;amp;ic);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sprintf ( sz_temp, &quot;ffmpeg %s &quot;, pszname );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( ic == JNI_TRUE ) (*env)-&amp;gt;ReleaseStringUTFChars(env, pj1, pszname);&lt;br /&gt;
&lt;br /&gt;
// strcpy ( sz_temp, &quot;ffmpeg -i /sdcard/arm_and/bin/tv_dump.mpg http://localhost:8090/feed1.ffm &quot; );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
printf ( &quot;[DEBUG] %s\n&quot;, sz_temp );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
psztoken = strtok ( sz_temp, seps );&lt;br /&gt;
&lt;br /&gt;
while ( psztoken != NULL ) {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
m_pargv [ m_argc] = ( char *)malloc ( strlen ( psztoken));&lt;br /&gt;
&lt;br /&gt;
strcpy ( m_pargv [ m_argc], psztoken );&lt;br /&gt;
&lt;br /&gt;
m_argc++;&lt;br /&gt;
&lt;br /&gt;
psztoken = strtok ( NULL, seps);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for ( i = 0; i &amp;lt; m_argc; i++ ) {&lt;br /&gt;
&lt;br /&gt;
printf ( &quot;argc[%d] = %s\n&quot;, i, m_pargv[i]);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
dynamic_ffpmeg_main ( m_argc, m_pargv );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ji = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return ji;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
b) change main function &lt;br /&gt;
original &amp;nbsp;--&amp;gt; int&amp;nbsp;&amp;nbsp; main (int argc, char **argv ) &lt;br /&gt;
&lt;br /&gt;
new&amp;nbsp; --&amp;gt; int dynamic_ffpmeg_main (int argc, char **argv )&lt;br /&gt;
&lt;br /&gt;
c) add&amp;nbsp; &quot; new main function &quot;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char **argv)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
dynamic_ffpmeg_main ( argc, argv ); &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
return 0;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
2)&amp;nbsp; build ffmpeg . &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- on preivious post, you can find &quot;configure&quot; option to build ffmpeg.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://demo860.blogspot.com/2010/06/ffmpeg-libx264-build-for-android.html&quot;&gt;http://demo860.blogspot.com/2010/06/ffmpeg-libx264-build-for-android.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
3) build ffmpeg SO module using following command.&lt;br /&gt;
&lt;br /&gt;
i use NDK r4 , /export/home/android/ndk/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/export/home/android/ndk/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin/arm-eabi-gcc \&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-nostdlib -Wl,-soname,libffmpeg.so -Wl,-shared,-Bsymbolic \&lt;br /&gt;
&lt;br /&gt;
cmdutils.o ffmpeg.o \&lt;br /&gt;
&lt;br /&gt;
-Wl,--no-whole-archive -Wl,--whole-archive \&lt;br /&gt;
&lt;br /&gt;
/export/home/android/android-ndk-r4/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin/../lib/gcc/arm-eabi/4.4.0/libgcc.a \&lt;br /&gt;
&lt;br /&gt;
/export/home/android/ndk/build/platforms/android-8/arch-arm/usr/lib/libc.so \&lt;br /&gt;
&lt;br /&gt;
/export/home/android/ndk/build/platforms/android-8/arch-arm/usr/lib/libstdc++.so \&lt;br /&gt;
&lt;br /&gt;
/export/home/android/ndk/build/platforms/android-8/arch-arm/usr/lib/libm.so \&lt;br /&gt;
&lt;br /&gt;
/export/home/android/ndk/build/platforms/android-8/arch-arm/usr/lib/libz.so \&lt;br /&gt;
&lt;br /&gt;
/export/home/android/ndk/build/platforms/android-8/arch-arm/usr/lib/libdl.so \&lt;br /&gt;
&lt;br /&gt;
-Wl,--no-undefined -Wl,-z,noexecstack -Wl,-rpath-link=/export/home/android/ndk/build/platforms/android-8/arch-arm/usr/lib \&lt;br /&gt;
&lt;br /&gt;
./libavutil/libavutil.a \&lt;br /&gt;
&lt;br /&gt;
./libavcodec/libavcodec.a \&lt;br /&gt;
&lt;br /&gt;
./libavfilter/libavfilter.a \&lt;br /&gt;
&lt;br /&gt;
./libavformat/libavformat.a \&lt;br /&gt;
&lt;br /&gt;
./libswscale/libswscale.a \&lt;br /&gt;
&lt;br /&gt;
./libavdevice/libavdevice.a \&lt;br /&gt;
&lt;br /&gt;
-o libffmpeg.so&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4) now you can use using following ffmpeg wrapper.&lt;br /&gt;
&lt;br /&gt;
public class ffmpeg implements Runnable {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
static boolean m_bret = false; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
static String m_szconfig = &quot; -i /sdcard/file.mpg -vcodec mpeg4 aaa.mpg&quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public native String unimplementedStringFromJNI();&lt;br /&gt;
&lt;br /&gt;
static {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
try {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
System.out.println ( &quot;[AdDBCache] Module load try ffmpeg : &quot; + System.getProperty(&quot;java.library.path&quot;));&lt;br /&gt;
&lt;br /&gt;
// System.load(&quot;/sdcard/arm_and/bin/libffmpeg.so&quot;);&lt;br /&gt;
&lt;br /&gt;
System.loadLibrary(&quot;ffmpeg&quot;);&lt;br /&gt;
&lt;br /&gt;
System.out.println ( &quot;[AdDBCache] Module load success&quot;);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
catch ( Exception e ) {&lt;br /&gt;
&lt;br /&gt;
System.out.println ( &quot;[AdDBCache] Module load err : &quot; + System.getProperty(&quot;java.library.path&quot;));&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
private static synchronized final native int mod_run (String name, String sztoken );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public void set_config ( String sz_config ) {&lt;br /&gt;
&lt;br /&gt;
m_szconfig = sz_config;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public void run_core ( String sz_file, String sz_token ) { &lt;br /&gt;
&lt;br /&gt;
int n_stat;&lt;br /&gt;
&lt;br /&gt;
m_bret = false;&lt;br /&gt;
&lt;br /&gt;
n_stat = mod_run ( m_szconfig, sz_token );&lt;br /&gt;
&lt;br /&gt;
m_bret = true;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public void run () {&lt;br /&gt;
&lt;br /&gt;
run_core ( &quot;&quot;, &quot;&quot;);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
5) ffmpeg / ffserver, &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; - i made both&amp;nbsp; , dynamic module and run it. &lt;br /&gt;
&amp;nbsp; - the speed is ok but it&#39;s use CPU so much. &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp;</content><link rel='replies' type='application/atom+xml' href='http://demo860.blogspot.com/feeds/4549513658409522980/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://demo860.blogspot.com/2010/07/android-ffmpeg-dynamic-module-jni.html#comment-form' title='4개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9153974093063210532/posts/default/4549513658409522980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9153974093063210532/posts/default/4549513658409522980'/><link rel='alternate' type='text/html' href='http://demo860.blogspot.com/2010/07/android-ffmpeg-dynamic-module-jni.html' title='android / ffmpeg dynamic module, JNI simple wrapper'/><author><name>demo860</name><uri>http://www.blogger.com/profile/04247606496713975581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9153974093063210532.post-9111136053412048815</id><published>2010-06-15T00:25:00.000+09:00</published><updated>2010-06-15T00:25:25.790+09:00</updated><title type='text'>ffmpeg / libx264 build for ANDROID</title><content type='html'>1) requirement&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;- NDK r4 : please use NDK r4 instead of NDK r3.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;- using NDK r4 new option, you can know the detail build option.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;- please get ffmpeg&amp;nbsp;&lt;a href=&quot;http://www.ffmpeg.org/download.html&quot;&gt;http://www.ffmpeg.org/download.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;- please get libx264 &lt;a href=&quot;http://www.videolan.org/developers/x264.html&quot;&gt;http://www.videolan.org/developers/x264.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) build option for libx264&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
export ARM_ROOT=/export/home/android/ndk&lt;br /&gt;
export ARM_INC=$ARM_ROOT/build/platforms/android-5/arch-arm/usr/include/&lt;br /&gt;
export ARM_LIB=$ARM_ROOT/build/platforms/android-5/arch-arm/usr/lib/&lt;br /&gt;
export ARM_TOOL=$ARM_ROOT/build/prebuilt/linux-x86/arm-eabi-4.4.0&lt;br /&gt;
export ARM_LIBO=$ARM_TOOL/lib/gcc/arm-eabi/4.4.0&lt;br /&gt;
export PATH=$ARM_TOOL/bin:$PATH&lt;br /&gt;
export ARM_PRE=arm-eabi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
./configure --prefix=/sdcard/arm_and \&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;--disable-gpac \&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;--extra-cflags=&quot; -I$ARM_INC -fPIC -DANDROID -fpic -mthumb-interwork -ffunction-sections -funwind-tables -fstack-prote&lt;br /&gt;
ctor -fno-short-enums -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ &amp;nbsp;-Wno-psabi -march=armv5te -mtu&lt;br /&gt;
ne=xscale -msoft-float -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -DANDROID &amp;nbsp;-Wa,--noexecstack -&lt;br /&gt;
MMD -MP &quot; \&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;--extra-ldflags=&quot; &amp;nbsp;-nostdlib -Bdynamic &amp;nbsp;-Wl,--no-undefined -Wl,-z,noexecstack &amp;nbsp;-Wl,-z,nocopyreloc -Wl,-soname,/system&lt;br /&gt;
/lib/libz.so -Wl,-rpath-link=$ARM_LIB,-dynamic-linker=/system/bin/linker -L$ARM_LIB -nostdlib $ARM_LIB/crtbegin_dynamic.o $AR&lt;br /&gt;
M_LIB/crtend_android.o -lc -lm -ldl -lgcc &quot; \&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;--cross-prefix=${ARM_PRE}- --disable-asm --disable-pthread &amp;nbsp;--host=arm-linux \&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;3) build option for ffmpeg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
export ARM_ROOT=/export/home/android/ndk&lt;br /&gt;
export ARM_INC=$ARM_ROOT/build/platforms/android-5/arch-arm/usr/include/&lt;br /&gt;
export ARM_LIB=$ARM_ROOT/build/platforms/android-5/arch-arm/usr/lib/&lt;br /&gt;
export ARM_TOOL=$ARM_ROOT/build/prebuilt/linux-x86/arm-eabi-4.4.0&lt;br /&gt;
export ARM_LIBO=$ARM_TOOL/lib/gcc/arm-eabi/4.4.0&lt;br /&gt;
export PATH=$ARM_TOOL/bin:$PATH&lt;br /&gt;
export ARM_PRE=arm-eabi&lt;br /&gt;
export LIB_INC=/sdcard/arm_and/include&lt;br /&gt;
export LIB_LIB=/sdcard/arm_and/lib&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
./configure &amp;nbsp;\&lt;br /&gt;
&amp;nbsp;--target-os=linux \&lt;br /&gt;
--arch=armv5te \&lt;br /&gt;
--enable-cross-compile \&lt;br /&gt;
--cc=$ARM_TOOL/bin/${ARM_PRE}-gcc \&lt;br /&gt;
--cross-prefix=$ARM_TOOL/bin/${ARM_PRE}- \&lt;br /&gt;
--extra-cflags=&quot; -fPIC -DANDROID -fpic -mthumb-interwork -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -&lt;br /&gt;
D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ &amp;nbsp;-Wno-psabi -march=armv5te -mtune=xscale -msoft-float -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -D&lt;br /&gt;
ANDROID &amp;nbsp;-Wa,--noexecstack -MMD -MP &quot; \&lt;br /&gt;
--enable-static \&lt;br /&gt;
--disable-shared --enable-libx264 --enable-gpl \&lt;br /&gt;
--disable-asm --disable-yasm &amp;nbsp; \&lt;br /&gt;
--prefix=/sdcard/arm_and \&lt;br /&gt;
--disable-amd3dnow --disable-amd3dnowext --disable-mmx --disable-mmx2 --disable-sse --disable-ssse3 \&lt;br /&gt;
--extra-cflags=&quot;-I$ARM_INC -std=gnu99 -I$LIB_INC &quot; \&lt;br /&gt;
--extra-libs=&quot;-lc -lm -ldl -lgcc -lz -lx264 &quot; \&lt;br /&gt;
--extra-ldflags=&quot; -L$LIB_LIB -Wl,-rpath-link=$LIB_LIB -nostdlib -Bdynamic &amp;nbsp;-Wl,--no-undefined -Wl,-z,noexecstack &amp;nbsp;-Wl,-z,nocopyreloc -Wl,-soname,/system/lib/libz.so&lt;br /&gt;
&amp;nbsp;-Wl,-rpath-link=$ARM_LIB,-dynamic-linker=/system/bin/linker -L$ARM_LIB -nostdlib $ARM_LIB/crtbegin_dynamic.o $ARM_LIB/crtend_android.o &quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4) you will get 4 files ..&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; - ffmpeg, ffprobe, ffserver, x264.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; - because we didn&#39;t ready SDL, we can&#39;t get ffplay.&lt;br /&gt;
&lt;br /&gt;
5) how to use it ?&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; - because android support a few codecs, it&#39;s a little bit difficult to play some common files.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; so, ffmpeg/ ffserver will run on android device to change stream format.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; - for this one, Howard Chu, ffmpeg team member already check it.&amp;nbsp;&lt;a href=&quot;https://lists.mplayerhq.hu/pipermail/ffmpeg-devel/2010-May/088706.html&quot;&gt;https://lists.mplayerhq.hu/pipermail/ffmpeg-devel/2010-May/088706.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; - screen capture to use ffserver/ffmpeg to play H264/AAC / MPEG PS stream file on android&amp;nbsp;emulator.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpuPEdmeXO6g83PfZo9OJAeZREnqGHwXNOUkCnkIGUMcfIGrZXE54_QP3XrbZJhOW9Uj8SrVTw8zXQmnpwfl7MUuHz5apNMia2remPtSEn-MdIBFUZQM1-1bPeYpgsKL_wXWHxFy8XOGk/s1600/Untitled.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpuPEdmeXO6g83PfZo9OJAeZREnqGHwXNOUkCnkIGUMcfIGrZXE54_QP3XrbZJhOW9Uj8SrVTw8zXQmnpwfl7MUuHz5apNMia2remPtSEn-MdIBFUZQM1-1bPeYpgsKL_wXWHxFy8XOGk/s320/Untitled.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-&amp;nbsp;unfortunately, the x264 doesn&#39;t work well on android, need to check X264/ffmpeg.</content><link rel='replies' type='application/atom+xml' href='http://demo860.blogspot.com/feeds/9111136053412048815/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://demo860.blogspot.com/2010/06/ffmpeg-libx264-build-for-android.html#comment-form' title='8개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9153974093063210532/posts/default/9111136053412048815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9153974093063210532/posts/default/9111136053412048815'/><link rel='alternate' type='text/html' href='http://demo860.blogspot.com/2010/06/ffmpeg-libx264-build-for-android.html' title='ffmpeg / libx264 build for ANDROID'/><author><name>demo860</name><uri>http://www.blogger.com/profile/04247606496713975581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpuPEdmeXO6g83PfZo9OJAeZREnqGHwXNOUkCnkIGUMcfIGrZXE54_QP3XrbZJhOW9Uj8SrVTw8zXQmnpwfl7MUuHz5apNMia2remPtSEn-MdIBFUZQM1-1bPeYpgsKL_wXWHxFy8XOGk/s72-c/Untitled.jpg" height="72" width="72"/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9153974093063210532.post-2233887897902284743</id><published>2010-06-11T10:31:00.001+09:00</published><updated>2010-06-11T10:31:54.334+09:00</updated><title type='text'>ffserver / vlc / RTSP</title><content type='html'>1) ffserver has a silmple funtion for streaming.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; - it can run on&amp;nbsp;android or several platforms..&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; - ffsrever also have RTP / RTSP / SDP protocol.&lt;br /&gt;
&lt;br /&gt;
2) ffserver / VLC/ rtsp problem ..&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; - because VLC / ffserver RTSP handshake have a problem,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ffserver / vlc / rtsp combination doesn&#39;t work.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; - VLC client use &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PLAY rtsp://192.168.229.132:5454/test1-rtsp.mpg/ RTSP/1.0&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - FFSERVER internal ...&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rtsp://192.168.229.132:5454/test1-rtsp.mpg&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;note ... &amp;nbsp;there is no &quot;/&quot; after &quot;.mpg&quot;&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
3) fix the code ... ffserver / VLC/ rtsp .&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; - ffserver.c , &lt;span style=&quot;color: red;&quot;&gt;find_rtp_session_with_url&lt;/span&gt;&amp;nbsp; function ...&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; please change the code &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: blue;&quot;&gt; // if(!strcmp(path, rtp_c-&amp;gt;stream-&amp;gt;filename)) {&amp;nbsp; &amp;lt;-- original&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( ! strncmp ( path, rtp_c-&amp;gt;stream-&amp;gt;filename, strlen ( rtp_c-&amp;gt;stream-&amp;gt;filename))) { &amp;lt;-- update&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
4) Now you can use FFSERVER RTSP with VLC client.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - handshake output ( using &lt;a href=&quot;http://www.wireshark.org/&quot;&gt;http://www.wireshark.org/&lt;/a&gt;&amp;nbsp;) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoRdWhnqeVamUxzWSDkq0-Nwo5Nzop5SFWdpKAKVvxkB4sj2ZtcHJBGzmn1Nhv2837mp1Ks8T6dNi7MjobLOTruLS9vMY8BkjkI5yY8XzWpGXzpzQDFnDhVHu2ZIl64kQUQnchqHJsC-o/s1600/ffserver_vlc_rtsp.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; qu=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoRdWhnqeVamUxzWSDkq0-Nwo5Nzop5SFWdpKAKVvxkB4sj2ZtcHJBGzmn1Nhv2837mp1Ks8T6dNi7MjobLOTruLS9vMY8BkjkI5yY8XzWpGXzpzQDFnDhVHu2ZIl64kQUQnchqHJsC-o/s320/ffserver_vlc_rtsp.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
OPTIONS rtsp://192.168.229.132:5454/test1-rtsp.mpg RTSP/1.0 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
CSeq: 1115&lt;br /&gt;
&lt;br /&gt;
User-Agent: VLC media player (LIVE555 Streaming Media v2010.01.07)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RTSP/1.0 200 OK&lt;br /&gt;
&lt;br /&gt;
CSeq: 1115&lt;br /&gt;
&lt;br /&gt;
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DESCRIBE rtsp://192.168.229.132:5454/test1-rtsp.mpg RTSP/1.0&lt;br /&gt;
&lt;br /&gt;
CSeq: 1116&lt;br /&gt;
&lt;br /&gt;
Accept: application/sdp&lt;br /&gt;
&lt;br /&gt;
User-Agent: VLC media player (LIVE555 Streaming Media v2010.01.07)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RTSP/1.0 200 OK&lt;br /&gt;
&lt;br /&gt;
CSeq: 1116&lt;br /&gt;
&lt;br /&gt;
Date: Thu, 10 Jun 2010 13:57:06 GMT&lt;br /&gt;
&lt;br /&gt;
Content-Base: rtsp://192.168.229.132:5454/test1-rtsp.mpg/&lt;br /&gt;
&lt;br /&gt;
Content-Type: application/sdp&lt;br /&gt;
&lt;br /&gt;
Content-Length: 588&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
v=0&lt;br /&gt;
&lt;br /&gt;
o=- 0 0 IN IP4 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
s=No Title&lt;br /&gt;
&lt;br /&gt;
c=IN IP4 0.0.0.0&lt;br /&gt;
&lt;br /&gt;
t=0 0&lt;br /&gt;
&lt;br /&gt;
a=tool:libavformat 52.68.0&lt;br /&gt;
&lt;br /&gt;
m=audio 0 RTP/AVP 97&lt;br /&gt;
&lt;br /&gt;
b=AS:64&lt;br /&gt;
&lt;br /&gt;
a=rtpmap:97 MPEG4-GENERIC/44100/2&lt;br /&gt;
&lt;br /&gt;
a=fmtp:97 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3(null); Profile=1;&lt;br /&gt;
&lt;br /&gt;
a=control:rtsp://192.168.229.132:5454/test1-rtsp.mpg/streamid=0&lt;br /&gt;
&lt;br /&gt;
m=video 0 RTP/AVP 96&lt;br /&gt;
&lt;br /&gt;
b=AS:200&lt;br /&gt;
&lt;br /&gt;
a=rtpmap:96 MP4V-ES/90000&lt;br /&gt;
&lt;br /&gt;
a=fmtp:96 profile-level-id=3 config=000001b001000001b58913000001000000012000c48d8800cd0b04241463000001b24c61766335322e34392e30;&lt;br /&gt;
&lt;br /&gt;
a=control:rtsp://192.168.229.132:5454/test1-rtsp.mpg/streamid=1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SETUP rtsp://192.168.229.132:5454/test1-rtsp.mpg/streamid=0 RTSP/1.0&lt;br /&gt;
&lt;br /&gt;
CSeq: 1117&lt;br /&gt;
&lt;br /&gt;
Transport: RTP/AVP;unicast;client_port=61174-61175&lt;br /&gt;
&lt;br /&gt;
User-Agent: VLC media player (LIVE555 Streaming Media v2010.01.07)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RTSP/1.0 200 OK&lt;br /&gt;
&lt;br /&gt;
CSeq: 1117&lt;br /&gt;
&lt;br /&gt;
Date: Thu, 10 Jun 2010 13:57:06 GMT&lt;br /&gt;
&lt;br /&gt;
Session: 08655a84dbac40c2&lt;br /&gt;
&lt;br /&gt;
Transport: RTP/AVP/UDP;unicast;client_port=61174-61175;server_port=44177-40910&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SETUP rtsp://192.168.229.132:5454/test1-rtsp.mpg/streamid=1 RTSP/1.0&lt;br /&gt;
&lt;br /&gt;
CSeq: 1118&lt;br /&gt;
&lt;br /&gt;
Transport: RTP/AVP;unicast;client_port=61176-61177&lt;br /&gt;
&lt;br /&gt;
Session: 08655a84dbac40c2&lt;br /&gt;
&lt;br /&gt;
User-Agent: VLC media player (LIVE555 Streaming Media v2010.01.07)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RTSP/1.0 200 OK&lt;br /&gt;
&lt;br /&gt;
CSeq: 1118&lt;br /&gt;
&lt;br /&gt;
Date: Thu, 10 Jun 2010 13:57:06 GMT&lt;br /&gt;
&lt;br /&gt;
Session: 08655a84dbac40c2&lt;br /&gt;
&lt;br /&gt;
Transport: RTP/AVP/UDP;unicast;client_port=61176-61177;server_port=43655-39009&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PLAY &lt;strong&gt;&lt;span style=&quot;color: red;&quot;&gt;rtsp://192.168.229.132:5454/test1-rtsp.mpg/&lt;/span&gt;&lt;/strong&gt; RTSP/1.0&lt;br /&gt;
&lt;br /&gt;
CSeq: 1119&lt;br /&gt;
&lt;br /&gt;
Session: 08655a84dbac40c2&lt;br /&gt;
&lt;br /&gt;
Range: npt=0.000-&lt;br /&gt;
&lt;br /&gt;
User-Agent: VLC media player (LIVE555 Streaming Media v2010.01.07)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RTSP/1.0 200 OK&lt;br /&gt;
&lt;br /&gt;
CSeq: 1119&lt;br /&gt;
&lt;br /&gt;
Date: Thu, 10 Jun 2010 13:57:06 GMT&lt;br /&gt;
&lt;br /&gt;
Session: 08655a84dbac40c2</content><link rel='replies' type='application/atom+xml' href='http://demo860.blogspot.com/feeds/2233887897902284743/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://demo860.blogspot.com/2010/06/ffserver-vlc-rtsp.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9153974093063210532/posts/default/2233887897902284743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9153974093063210532/posts/default/2233887897902284743'/><link rel='alternate' type='text/html' href='http://demo860.blogspot.com/2010/06/ffserver-vlc-rtsp.html' title='ffserver / vlc / RTSP'/><author><name>demo860</name><uri>http://www.blogger.com/profile/04247606496713975581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoRdWhnqeVamUxzWSDkq0-Nwo5Nzop5SFWdpKAKVvxkB4sj2ZtcHJBGzmn1Nhv2837mp1Ks8T6dNi7MjobLOTruLS9vMY8BkjkI5yY8XzWpGXzpzQDFnDhVHu2ZIl64kQUQnchqHJsC-o/s72-c/ffserver_vlc_rtsp.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9153974093063210532.post-1702322366686387031</id><published>2010-06-07T21:19:00.000+09:00</published><updated>2010-06-07T21:19:34.408+09:00</updated><title type='text'>android NDK r4 release -&gt; build option</title><content type='html'>드디어 NDK r4 에 build 하는 과정을 볼 수 있네요...&lt;br /&gt;
&lt;br /&gt;
r3 에서 거의 보기 힘들었는데.&lt;br /&gt;
&lt;br /&gt;
toolchain 에 익숙한 분들이 debug 과정을 통해 configure Option 찾아내느라&lt;br /&gt;
수고가 많으셨던 것을 한번에 해결해 주네요...&lt;br /&gt;
&lt;br /&gt;
1) NDK r3 에 output 입니다...&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;- NDK 설치 directory 에서 ... make APP=hello-gl2 입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
root@DEVEM:/export/home/android/ndk_x86# make APP=hello-gl2&lt;br /&gt;
Android NDK: Building for application &#39;hello-gl2&#39;&lt;br /&gt;
Compile++ thumb: gl2jni &amp;lt;= apps/hello-gl2/project/jni/gl_code.cpp&lt;br /&gt;
SharedLibrary &amp;nbsp;: libgl2jni.so&lt;br /&gt;
Install &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: libgl2jni.so =&amp;gt; apps/hello-gl2/project/libs/armeabi&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;2) NDK r4 output 입니다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;- project directory 에서 ...&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;../../ndk-build 입니다. &quot;../../&quot; 에 NDK r4 가 설치되어 있기 때문입니다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;div&gt;root@DEVEM:/export/home/android/android-ndk-r4/samples/hello-gl2# ../../ndk-build&lt;/div&gt;&lt;div&gt;Compile++ thumb: gl2jni &amp;lt;= /export/home/android/android-ndk-r4/samples/hello-gl2/jni/gl_code.cpp&lt;/div&gt;&lt;div&gt;SharedLibrary &amp;nbsp;: libgl2jni.so&lt;/div&gt;&lt;div&gt;Install &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: libgl2jni.so =&amp;gt; /export/home/android/android-ndk-r4/samples/hello-gl2/libs/armeabi&lt;/div&gt;&lt;div&gt;root@DEVEM:/export/home/android/android-ndk-r4/samples/hello-gl2#&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;3) NDK r4 에서 build 과정 상세히 보는 option 입니다...&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; - ./docs/NDK-BUILD.TXT 를 참조하세요.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; - -B V=1 을 사용하면 상세한 build 과정을 볼 수 있습니다.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; - executable build 를 위해서, 바로 전 내용을 참조하세요...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;div&gt;root@DEVEM:/export/home/android/android-ndk-r4/samples/hello-gl2# ../../ndk-build -B V=1&lt;/div&gt;&lt;div&gt;rm -f /export/home/android/android-ndk-r4/samples/hello-gl2/libs/armeabi/lib*.so /export/home/android/android-ndk-r4/samples/hello-gl2/libs/armeabi-v7a/lib*.so /export/home/android/android-ndk-r4/samples/hello-gl2/libs/x86/lib*.so&lt;/div&gt;&lt;div&gt;rm -f /export/home/android/android-ndk-r4/samples/hello-gl2/libs/armeabi/gdbserver /export/home/android/android-ndk-r4/samples/hello-gl2/libs/armeabi-v7a/gdbserver /export/home/android/android-ndk-r4/samples/hello-gl2/libs/x86/gdbserver&lt;/div&gt;&lt;div&gt;rm -f /export/home/android/android-ndk-r4/samples/hello-gl2/libs/armeabi/gdb.setup /export/home/android/android-ndk-r4/samples/hello-gl2/libs/armeabi-v7a/gdb.setup /export/home/android/android-ndk-r4/samples/hello-gl2/libs/x86/gdb.setup&lt;/div&gt;&lt;div&gt;Compile++ thumb: gl2jni &amp;lt;= /export/home/android/android-ndk-r4/samples/hello-gl2/jni/gl_code.cpp&lt;/div&gt;&lt;div&gt;/export/home/android/android-ndk-r4/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin/arm-eabi-g++ -I/export/home/android/android-ndk-r4/build/platforms/android-5/arch-arm/usr/include -fpic -mthumb-interwork -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ &amp;nbsp;-Wno-psabi -march=armv5te -mtune=xscale -msoft-float -fno-exceptions -fno-rtti -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 &amp;nbsp;-I/export/home/android/android-ndk-r4/samples/hello-gl2/jni -DANDROID -Werror -Wa,--noexecstack &amp;nbsp; -O2 -DNDEBUG -g &amp;nbsp; &amp;nbsp; -c -MMD -MP -MF /export/home/android/android-ndk-r4/samples/hello-gl2/bin/ndk/local/armeabi/objs/gl2jni/gl_code.o.d /export/home/android/android-ndk-r4/samples/hello-gl2/jni/gl_code.cpp -o /export/home/android/android-ndk-r4/samples/hello-gl2/bin/ndk/local/armeabi/objs/gl2jni/gl_code.o&lt;/div&gt;&lt;div&gt;SharedLibrary &amp;nbsp;: libgl2jni.so&lt;/div&gt;&lt;div&gt;/export/home/android/android-ndk-r4/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin/arm-eabi-gcc -nostdlib -Wl,-soname,libgl2jni.so -Wl,-shared,-Bsymbolic &amp;nbsp;/export/home/android/android-ndk-r4/samples/hello-gl2/bin/ndk/local/armeabi/objs/gl2jni/gl_code.o -Wl,--whole-archive &amp;nbsp;-Wl,--no-whole-archive &amp;nbsp;/export/home/android/android-ndk-r4/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin/../lib/gcc/arm-eabi/4.4.0/libgcc.a &amp;nbsp;/export/home/android/android-ndk-r4/build/platforms/android-5/arch-arm/usr/lib/libc.so /export/home/android/android-ndk-r4/build/platforms/android-5/arch-arm/usr/lib/libstdc++.so /export/home/android/android-ndk-r4/build/platforms/android-5/arch-arm/usr/lib/libm.so &amp;nbsp; &amp;nbsp;-Wl,--no-undefined -Wl,-z,noexecstack -L/export/home/android/android-ndk-r4/build/platforms/android-5/arch-arm/usr/lib -llog -lGLESv2 -Wl,-rpath-link=/export/home/android/android-ndk-r4/build/platforms/android-5/arch-arm/usr/lib -o /export/home/android/android-ndk-r4/samples/hello-gl2/bin/ndk/local/armeabi/libgl2jni.so&lt;/div&gt;&lt;div&gt;Install &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: libgl2jni.so =&amp;gt; /export/home/android/android-ndk-r4/samples/hello-gl2/libs/armeabi&lt;/div&gt;&lt;div&gt;mkdir -p /export/home/android/android-ndk-r4/samples/hello-gl2/libs/armeabi&lt;/div&gt;&lt;div&gt;install -p /export/home/android/android-ndk-r4/samples/hello-gl2/bin/ndk/local/armeabi/libgl2jni.so /export/home/android/android-ndk-r4/samples/hello-gl2/libs/armeabi/libgl2jni.so&lt;/div&gt;&lt;div&gt;/export/home/android/android-ndk-r4/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin/arm-eabi-strip --strip-debug &amp;nbsp;/export/home/android/android-ndk-r4/samples/hello-gl2/libs/armeabi/libgl2jni.so&lt;/div&gt;&lt;div&gt;root@DEVEM:/export/home/android/android-ndk-r4/samples/hello-gl2#&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;4) 사용 용도 ???&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; - 기존의 GNU Lib 등을 굳이 NDK 의 ndk-build 를 사용하지 않아도 됩니다.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; - GNU 의 configure 에서 Option 만 적절히 준다면 ... 대부분은 쉽게 build 한 거죠..&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://demo860.blogspot.com/feeds/1702322366686387031/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://demo860.blogspot.com/2010/06/android-ndk-r4-release-build-option.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9153974093063210532/posts/default/1702322366686387031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9153974093063210532/posts/default/1702322366686387031'/><link rel='alternate' type='text/html' href='http://demo860.blogspot.com/2010/06/android-ndk-r4-release-build-option.html' title='android NDK r4 release -&gt; build option'/><author><name>demo860</name><uri>http://www.blogger.com/profile/04247606496713975581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9153974093063210532.post-4371689733385566076</id><published>2010-06-05T14:03:00.000+09:00</published><updated>2010-06-05T14:03:21.741+09:00</updated><title type='text'>android x86 ndk static build executable</title><content type='html'>android 에서 ndk 가지고 뭔가 개발하려면 .. 환경이 아무리 좋다고 해도, 넘 불편 ..&lt;br /&gt;
&lt;br /&gt;
나름 쉬운 조합과 실행 파일 함 만들어 봅니다...&lt;br /&gt;
&lt;br /&gt;
0) 조합 ..&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; - 단말 android x86 VM - 이것이 android phone 대용입니다. &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 물론, sdk 에서 사용하는 emulrator 대용이기도 합니다.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; - 개발 Ubuntu&amp;nbsp; VM -&amp;nbsp;NDK / SDK 를 설치합니다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; - 개발 ubuntu VM 을 NFS server 로 합니다.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; - 단말 android X86 VM 에서 nfs client 설정합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) android x86 을 설치합니다....&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; - vmware 에서 잘 돌아갑니다.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihXzna1WwFDeuFNeUakyU1pUSd26MpzY2rt1YHKmqvlE2aDSmtzdX1fxiwWy0bJLIv4WdfXySGrBJHZyOyRdzi2I-4vWdb1B_ekreYvu9BaVC-GNP9zlfaLUFaJWn6Z9mwMi-uBFjUd8c/s1600/android_x86_vm.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; gu=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihXzna1WwFDeuFNeUakyU1pUSd26MpzY2rt1YHKmqvlE2aDSmtzdX1fxiwWy0bJLIv4WdfXySGrBJHZyOyRdzi2I-4vWdb1B_ekreYvu9BaVC-GNP9zlfaLUFaJWn6Z9mwMi-uBFjUd8c/s320/android_x86_vm.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
2) android x86 사이트 ( &lt;a href=&quot;http://www.android-x86.org/&quot;&gt;http://www.android-x86.org/&lt;/a&gt;&amp;nbsp;) 에서 X86 용 NDK 받아서 &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; LINUX 에 설치합니다. 아 이것이 &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; - 저 같은 경우는, /export/home/android/ndk_x86 여기에 설치했네요.&lt;br /&gt;
&lt;br /&gt;
root@DEVEM:/export/home/android/ndk_x86# ls -l&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
total 28&lt;br /&gt;
&lt;br /&gt;
-rw-r--r-- 1 1001 1001 177 2009-12-10 03:53 Android.mk&lt;br /&gt;
&lt;br /&gt;
drwxr-xr-x 7 1001 1001 4096 2009-12-10 03:53 apps&lt;br /&gt;
&lt;br /&gt;
drwxr-xr-x 8 1001 1001 4096 2010-01-05 01:48 build&lt;br /&gt;
&lt;br /&gt;
drwxr-xr-x 3 1001 1001 4096 2009-12-10 03:53 docs&lt;br /&gt;
&lt;br /&gt;
-rw-r--r-- 1 1001 1001 670 2009-12-10 03:53 GNUmakefile&lt;br /&gt;
&lt;br /&gt;
drwxr-xr-x 4 root root 4096 2010-04-11 05:16 out&lt;br /&gt;
&lt;br /&gt;
-rw-r--r-- 1 1001 1001 1355 2009-12-10 03:53 README.TXT&lt;br /&gt;
&lt;br /&gt;
3) source 수정 &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp; /export/home/android/ndk_x86/apps/hello-jni/project/jni/hello-jni.c 이거 조금 수정합니다. &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
#include &lt;string.h&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#include &lt;jni.h&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* This is a trivial JNI example where we use a native method&lt;br /&gt;
&lt;br /&gt;
* to return a new VM String. See the corresponding Java source&lt;br /&gt;
&lt;br /&gt;
* file located at:&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
* apps/samples/hello-jni/project/src/com/example/HelloJni/HelloJni.java&lt;br /&gt;
&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
jstring&lt;br /&gt;
&lt;br /&gt;
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,&lt;br /&gt;
&lt;br /&gt;
jobject thiz )&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
return (*env)-&amp;gt;NewStringUTF(env, &quot;Hello from JNI !&quot;);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// --- executable 을 위한 sample 코드 추가 부분&lt;br /&gt;
int main( int argc, char* args[] )&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
printf ( &quot;argc : %d\n&quot;, argc );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for ( i = 0; i &amp;lt; argc; i++ ) {&lt;br /&gt;
&lt;br /&gt;
printf ( &quot;args : %s\n&quot;, *(args+i));&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
return 0;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
//---------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;4) Android.mk 수정&lt;br /&gt;
&lt;br /&gt;
LOCAL_PATH := $(call my-dir)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
include $(CLEAR_VARS)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LOCAL_MODULE := hello-jni&lt;br /&gt;
&lt;br /&gt;
LOCAL_SRC_FILES := hello-jni.c&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
## include $(BUILD_SHARED_LIBRARY) &amp;lt;-- 이것이 기본입니다.&lt;br /&gt;
&lt;br /&gt;
## include $(BUILD_STATIC_LIBRARY) &amp;lt;-- static 만드시려면 이것을 ..&lt;br /&gt;
&lt;br /&gt;
include $(BUILD_EXECUTABLE) &amp;lt;-- 실행 파일입니다. 우리는 이것을 사용합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5) 이제 compile 하죠 ... X86 용입니다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;direcotry 위치&amp;nbsp; : &amp;nbsp; /export/home/android/ndk_x86 에서 아래와 같이 실행합니다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;make APP=hello-jni TARGET_PRODUCT=eeepc -B &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;TARGET_PRODUCT=eeepc&amp;nbsp; 이거 제외하면, ARM 용 executable 생성됩니다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; 결과가 아래와 같이 나옵니다...&lt;br /&gt;
&lt;br /&gt;
root@DEVEM:/export/home/android/ndk_x86# make APP=hello-jni TARGET_PRODUCT=eeepc -B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Android NDK: Building for application &#39;hello-jni&#39;&lt;br /&gt;
&lt;br /&gt;
Compile thumb : hello-jni &amp;lt;= apps/hello-jni/project/jni/hello-jni.c&lt;br /&gt;
&lt;br /&gt;
apps/hello-jni/project/jni/hello-jni.c: In function &#39;main&#39;:&lt;br /&gt;
&lt;br /&gt;
apps/hello-jni/project/jni/hello-jni.c:37: warning: incompatible implicit declaration of built-in function &#39;printf&#39;&lt;br /&gt;
&lt;br /&gt;
Executable : hello-jni&lt;br /&gt;
&lt;br /&gt;
Install : hello-jni =&amp;gt; apps/hello-jni/project/libs/x86&lt;br /&gt;
&lt;br /&gt;
root@DEVEM:/export/home/android/ndk_x86#&lt;br /&gt;
&lt;br /&gt;
6) 정상 여부 확인 ..&lt;br /&gt;
&lt;br /&gt;
우선, LINUX 의 file 명령어를 사용해세요... X86 용입니다.&lt;br /&gt;
&lt;br /&gt;
root@DEVEM:/export/home/android/ndk_x86# file apps/hello-jni/project/libs/x86/hello-jni&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
apps/hello-jni/project/libs/x86/hello-jni: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), not stripped&lt;br /&gt;
&lt;br /&gt;
root@DEVEM:/export/home/android/ndk_x86#&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;7) 이것을 .. Android X86 에서 확인하기 위해서 ... &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; a) UBUNTU 에서 NFS 서버 설정합니다. &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; - 이것은 LINUX version 따라 다릅니다... &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; - 저는 편이상 아래와 같이 설정합니다. &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
root@DEVEM:/etc# more exports &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# /etc/exports: the access control list for filesystems which may be exported&lt;br /&gt;
&lt;br /&gt;
# to NFS clients. See exports(5).&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# Example for NFSv2 and NFSv3:&lt;br /&gt;
&lt;br /&gt;
# /srv/homes hostname1(rw,sync) hostname2(ro,sync)&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# Example for NFSv4:&lt;br /&gt;
&lt;br /&gt;
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt)&lt;br /&gt;
&lt;br /&gt;
# /srv/nfs4/homes gss/krb5i(rw,sync)&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/export/home *(rw,insecure,async,no_root_squash)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; -&amp;nbsp;다음으로 ... &lt;br /&gt;
root@DEVEM:/etc/init.d# ./nfs-kernel-server restart &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Stopping NFS kernel daemon [ OK ]&lt;br /&gt;
&lt;br /&gt;
* Unexporting directories for NFS kernel daemon... [ OK ]&lt;br /&gt;
&lt;br /&gt;
* Exporting directories for NFS kernel daemon... exportfs: /etc/exports [2]: Neither &#39;subtree_check&#39; or &#39;no_subtree_check&#39; specified for export &quot;*:/export/home&quot;.&lt;br /&gt;
&lt;br /&gt;
Assuming default behaviour (&#39;no_subtree_check&#39;).&lt;br /&gt;
&lt;br /&gt;
NOTE: this default has changed since nfs-utils version 1.0.x&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[ OK ]&lt;br /&gt;
&lt;br /&gt;
* Starting NFS kernel daemon [ OK ]&lt;br /&gt;
&lt;br /&gt;
root@DEVEM:/etc/init.d#&lt;br /&gt;
&lt;br /&gt;
이렇게 하구요... &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;b) Android X86 에서 ... &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; - NFS enable 하기는 .. &lt;a href=&quot;http://www.android-x86.org/documents/nfs-how-to&quot;&gt;http://www.android-x86.org/documents/nfs-how-to&lt;/a&gt;&amp;nbsp;여기를 참조하세요. &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; - 시작할 때, debug mode 로 올리면 좋습니다. &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp; - 다음으로, android X86 에서 &quot;Alt-F1&quot; 을 누르면, console mode 로 넘어갑니다. &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp; - 거기에서 아래와 같이 합니다. &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cd / &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mkdir /sdcard &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mount -t nfs -o nolock 192.168.229.132:/export/home /sdcard &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; - 이제 실행 준비가 되었네요 ... 마지막으로 실행해 보면 ... &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkUSVkr5xqkvwfaFsavstXH_k3KltgHJKx9i5vly_u3gp1IotfxjqH2tjnh2aBr21E2mmXuRh8uY8IJWShepJ-afnUlk5MJQGma6_uYVSCW72r9fAuse4fGwFcm68OiHK3UBbIkYnSflo/s1600/android_x86_vm2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; gu=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkUSVkr5xqkvwfaFsavstXH_k3KltgHJKx9i5vly_u3gp1IotfxjqH2tjnh2aBr21E2mmXuRh8uY8IJWShepJ-afnUlk5MJQGma6_uYVSCW72r9fAuse4fGwFcm68OiHK3UBbIkYnSflo/s320/android_x86_vm2.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 네 .. executable 로 되어서 실행이 됩니다. &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp; 8) 왜 이런 복잡한 일을 ???? &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp; - android 의 특성상 NDK 를 사용할 일이 종종있습니다. &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UI 개발하는 분이라면 관심이 없겠지만 &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp; 9) 이런 모른 test 를 다 완료하고 나서 ... &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp; - ARM 으로 동일하게 compile 해서 emulrator 나 phone 에서 확인하면 됩니다... &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;</content><link rel='replies' type='application/atom+xml' href='http://demo860.blogspot.com/feeds/4371689733385566076/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://demo860.blogspot.com/2010/06/android-x86-ndk-static-build-executable.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9153974093063210532/posts/default/4371689733385566076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9153974093063210532/posts/default/4371689733385566076'/><link rel='alternate' type='text/html' href='http://demo860.blogspot.com/2010/06/android-x86-ndk-static-build-executable.html' title='android x86 ndk static build executable'/><author><name>demo860</name><uri>http://www.blogger.com/profile/04247606496713975581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihXzna1WwFDeuFNeUakyU1pUSd26MpzY2rt1YHKmqvlE2aDSmtzdX1fxiwWy0bJLIv4WdfXySGrBJHZyOyRdzi2I-4vWdb1B_ekreYvu9BaVC-GNP9zlfaLUFaJWn6Z9mwMi-uBFjUd8c/s72-c/android_x86_vm.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9153974093063210532.post-202542878418088830</id><published>2010-06-05T12:28:00.000+09:00</published><updated>2010-06-05T12:30:55.001+09:00</updated><title type='text'>vlc, android, mediaplay, rtsp</title><content type='html'>vlc&amp;nbsp;를 android 와 연동해서 streaming 하려면 ...&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;1) vlc 에서 streaming 하기 ..&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; option 이 복잡하죠 ... mpeg4 video 에 mp4 audio 사용합니다.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; android 에서 rtsp/rtp 를 사용한 streaming 이 가능합니다.&lt;br /&gt;
&lt;br /&gt;
:sout=#transcode{ab=128,samplerate=44100,channels=2,acodec=mp4a,vcodec=mp4v,vb=800,fps=25}:rtp{sdp=rtsp://192.168.229.1:5554/stream.sdp}&lt;br /&gt;
&lt;br /&gt;
2) vlc 에서 해당 streaming 이 정상인지 먼저 봅니다...&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;- vlc 를 하나 더 띄우세요.&lt;br /&gt;
&amp;nbsp;- 다음으로 Open Media-&amp;gt; network 을 선택하고,아래와 같이 URL 을 넣습니다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;rtsp://192.168.1.169:5554/stream.sdp &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;- 일단 play 가 되면, VLC 에서 streaming 이 정상인 겁니다.&lt;br /&gt;
&lt;br /&gt;
3) android&amp;nbsp; phone 에서 ..&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;- 흠 .. 이것은 코드가 되어야 하는데 ...&lt;br /&gt;
&amp;nbsp;- 기본코드는&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/media/VideoViewDemo.html&quot;&gt;Android VideoView 데모&lt;/a&gt;&amp;nbsp;여기를 보시면 됩니다.&lt;br /&gt;
&lt;br /&gt;
- 해당 기본 코드에 이 부분만 수정해 주면 됩니다.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;mVideoView.setVideoURI( Uri.parse(&quot;rtsp://192.168.229.1:5554/stream.sdp&quot;));&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp;vlc&amp;nbsp;streaming 은 android phone / android x86/&amp;nbsp;등에서 잘 연동이 됩니다.&lt;br /&gt;
문제는 정작 되어야 할 emulrator 에서 설정이 좀 힘들죠..&lt;br /&gt;
&lt;br /&gt;
4) android SDK 에서 vlc streaming ..&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;android SDK 에서 제공하는 emulator 로 보려면, network 설정을 해야 합니다.&lt;br /&gt;
&amp;nbsp; 좀 복잡하죠. 이것은 담번에 ..&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; 이런 복잡한 것이 싫으신 분은 ... WINDOWS / LINUX VM 에 &lt;a href=&quot;http://www.android-x86.org/&quot;&gt;android-x86&lt;/a&gt;&amp;nbsp;을 사용하면 됩니다. 복잡하죠 .. &lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;뭔가 간단한 것이 없네요.. 환경설정 / 여러 Tool . &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;</content><link rel='replies' type='application/atom+xml' href='http://demo860.blogspot.com/feeds/202542878418088830/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://demo860.blogspot.com/2010/06/vlc-android-mediaplay-rtsp.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9153974093063210532/posts/default/202542878418088830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9153974093063210532/posts/default/202542878418088830'/><link rel='alternate' type='text/html' href='http://demo860.blogspot.com/2010/06/vlc-android-mediaplay-rtsp.html' title='vlc, android, mediaplay, rtsp'/><author><name>demo860</name><uri>http://www.blogger.com/profile/04247606496713975581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9153974093063210532.post-3030066401432479602</id><published>2010-06-05T11:22:00.000+09:00</published><updated>2010-06-05T11:48:21.499+09:00</updated><title type='text'>ffserver, streaming, ffplay , rtsp/rtp</title><content type='html'>기억이 나는 일들을 적어 봐야 겠다...&lt;br /&gt;&lt;br /&gt;streaming 방법이 여러가지인데, ffmpeg 을 사용해봤다.&lt;br /&gt;&lt;br /&gt;0) ffserver : windows 불가, LINUX 만 된단다.&lt;br /&gt;&lt;br /&gt;a) ffserver 는 LINUX 에서 ,&lt;br /&gt;b) ffplay 는 NT 에서 ...&lt;br /&gt;c) 환경은,&lt;br /&gt;- WINDOWS : ffmpeg&lt;br /&gt;- WINDOWS 에 vmware 설치 - LINUX 설치&lt;br /&gt;- LINUX VM 위에 ffmpeg 설치&lt;br /&gt;&lt;br /&gt;1) server 에서 : ffserver.conf RTSP enable&lt;br /&gt;&lt;br /&gt;a)&lt;br /&gt;&lt;br /&gt;RTSPPort 5454&lt;br /&gt;RTSPBindAddress 0.0.0.0&lt;br /&gt;&lt;br /&gt;conf 파일에는 이 내용이 없다. 따라서, 반듯이 추가 ..&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;b) 아래와 같이 넣어 준다.&lt;br /&gt;&lt;br /&gt;ffserver.conf 중간에 보면 .. mpeg, mpegvideo, mp2, ogg, asf, swf 된단다.&lt;br /&gt;mp4 는 않되는 것 같다. 뭔가 수정을 해야 할 듯&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;stream&gt;&lt;stream&gt;&lt;br /&gt;Format rtp&lt;br /&gt;File &quot;/export/home/x86native/bin/tv_dump.mpg&quot;&lt;br /&gt;&lt;/stream&gt;&lt;/stream&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;c) ffserver 실행 ..&lt;br /&gt;&lt;br /&gt;- 아래에 opening file 이 해당 내용 읽은 거다.&lt;br /&gt;&lt;br /&gt;root@DEVEM:/export/home/x86native/bin# ./ffserver -f ffserver.conf&lt;br /&gt;FFserver version SVN-r23169-snapshot, Copyright (c) 2000-2010 the FFmpeg developers&lt;br /&gt;built on Jun 4 2010 10:37:29 with gcc 4.2.3 (Ubuntu 4.2.3-2ubuntu7)&lt;br /&gt;configuration: --prefix=/export/home/x86native&lt;br /&gt;libavutil 50.15. 2 / 50.15. 2&lt;br /&gt;libavcodec 52.67. 2 / 52.67. 2&lt;br /&gt;libavformat 52.62. 0 / 52.62. 0&lt;br /&gt;libavdevice 52. 2. 0 / 52. 2. 0&lt;br /&gt;libavfilter 1.20. 0 / 1.20. 0&lt;br /&gt;libswscale 0.10. 0 / 0.10. 0&lt;br /&gt;Fri Jun 4 22:27:59 2010 Opening file &#39;/export/home/x86native/bin/tv_dump.mpg&#39;&lt;br /&gt;Fri Jun 4 22:27:59 2010 [mpeg @ 0x8b2b090]max_analyze_duration reached&lt;br /&gt;Fri Jun 4 22:27:59 2010 Opening file &#39;/export/home/x86native/bin/tv_dump.mp4&#39;&lt;br /&gt;Fri Jun 4 22:27:59 2010 Opening file &#39;/export/home/x86native/bin/tv_dump.mpg&#39;&lt;br /&gt;Fri Jun 4 22:27:59 2010 [mpeg @ 0x8b2b090]max_analyze_duration reached&lt;br /&gt;Fri Jun 4 22:27:59 2010 FFserver started.&lt;br /&gt;&lt;br /&gt;2) ffplay - windows 에서&lt;br /&gt;&lt;br /&gt;ffplay rtsp://192.168.229.132:5454/test1-rtsp.mpg&lt;br /&gt;&lt;br /&gt;물론, IP 는 LINUX IP, Port 는 RTSP port 다&lt;br /&gt;test1-rtsp.mpg 은 위에서 설정한 URL.&lt;br /&gt;&lt;br /&gt;3) 실행을 하면 아래와 비슷한 형태의 로그가 나온다...&lt;br /&gt;&lt;br /&gt;Server 에서 로그 ...&lt;br /&gt;&lt;br /&gt;Fri Jun 4 22:32:54 2010 [NULL @ 0x8b2dcc0]AAC with no global headers is currently not supported.&lt;br /&gt;Fri Jun 4 22:32:55 2010 [mpeg @ 0x8b38e20]max_analyze_duration reached&lt;br /&gt;Fri Jun 4 22:32:55 2010 192.168.229.1:5000 - - &quot;PLAY test1-rtsp.mpg/streamid=0 RTP/UDP&quot;&lt;br /&gt;Fri Jun 4 22:32:55 2010 192.168.229.1:5002 - - &quot;PLAY test1-rtsp.mpg/streamid=1 RTP/UDP&quot;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Client 에서 ...&lt;br /&gt;&lt;br /&gt;화면이 떠서, 뭔가 play 가 되어야 한다.</content><link rel='replies' type='application/atom+xml' href='http://demo860.blogspot.com/feeds/3030066401432479602/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://demo860.blogspot.com/2010/06/ffserver-streaming-ffplay-rtsprtp.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9153974093063210532/posts/default/3030066401432479602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9153974093063210532/posts/default/3030066401432479602'/><link rel='alternate' type='text/html' href='http://demo860.blogspot.com/2010/06/ffserver-streaming-ffplay-rtsprtp.html' title='ffserver, streaming, ffplay , rtsp/rtp'/><author><name>demo860</name><uri>http://www.blogger.com/profile/04247606496713975581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>