{"action":"created","comment":{"url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/pulls/comments/30001669","id":30001669,"diff_hunk":"@@ -0,0 +1,317 @@\n+Android 如何直播RTMP流\n+===\n+> * 原文链接 : [How To Stream RTMP live in Android](http://www.truiton.com/2015/03/stream-rtmp-live-android/)\n+* 原文作者 : [Mohit Gupt](google.com/+MohitGupt)\n+* [译文出自 :  开发技术前线 www.devtf.cn](http://www.devtf.cn)\n+* 译者 : [ayyb1988](https://github.com/ayyb1988) \n+* 校对者: [校对人]()  \n+* 状态 :  校对中\n+\n+![rtmp](http://www.truiton.com/wp-content/uploads/2015/03/Android-RTMP-Player.png)\n+\n+Streaming live video/audio in android is one of the very few interesting parts. Whenever we talk of streaming, the possibility of using RTMP[(Real Time Messaging Protocol)](http://en.wikipedia.org/wiki/Real_Time_Messaging_Protocol) cannot be ruled out. As RTMP is one of the basic protocols available for streaming live video/audio feed. But unfortunately Android’s standard [VideoView](http://developer.android.com/reference/android/widget/VideoView.html) does not support the playback of RTMP. Therefore to natively play a live RTMP stream in Android, an external library is required which can provide us an Android RTMP player. In this tutorial we will discuss how this can be achieved by the usage of Android [Vitamio](https://www.vitamio.org/en/) library.\n+\n+在android上，视频/音频流直播是极少有人关注的一部分。每当我们讨论流媒体，RTMP[(Real Time Messaging Protocol)](http://en.wikipedia.org/wiki/Real_Time_Messaging_Protocol)是不可或缺的。RTMP是一个基本的视频/音频直播流协议，但是不幸的是Android标准的[VideoView](http://developer.android.com/reference/android/widget/VideoView.html)不支持RTMP的播放。因此，如果想在android上播放RTMP直播流，你必须使用支持RTMP协议的库。在本教程中，我们将讨论如何通过安卓[Vitamio]（https://www.vitamio.org/en/） 库的使用来实现。\n+\n+\n+##Android Vitamio Library\n+\n+Vitamio is an open source project for Android and iOS built up on [FFmpeg](https://www.ffmpeg.org/) code. Vitamio provides us a clean and simple API with full and real hardware accelerated decoder and render-er. Vitamio is a very powerful library which supports a wide variety of video/audio formats like FLV, TS/TP, WMV, DivX, Xvid and many other standard formats. What makes it different is that it also supports the playback of embedded and external subtitles like .mkv and .srt. But Vitamio comes with a license, hence please go through this [license page]((https://www.vitamio.org/en/License/)) before using it in your project. In this Android RTMP example, we will not only discuss the live streaming of RTMP stream in Android, but will also discuss how we can stream m3u8 playlists(HLS), RTSP streams and MMS (Microsoft Media Stream). But first lets include the Android Vitamio library in out project.\n+\n+##Android Vitamio 库\n+Vitamio是一个android和ios上基于[FFmpeg](https://www.ffmpeg.org/)的开源项目。Vitamio为我们提供了一个清洁、简单、全面、真实的硬件加速解码器和渲染器API，Vitamio是一个支持多种音视频格式 如 FLV, TS/TP, WMV, DivX, Xvid等多种标准格式的非常强大的库。所不同的是，它也支持类似.mkv和.srt嵌入和外挂字幕播放。但是它带有一个许可证，因此在使用它之前请先获得[认证](https://www.vitamio.org/en/License/)。在这个android RTMP例子中，我们不仅讨论RTMP直播流，而且也会讨论m3u8流（HLS），RTSP流和 MMS (Microsoft Media Stream)。首先让在我们的项目中引用Vitamio库。\n+\n+####Steps to include Vitamio library in Android Studio:\n+1. Download the Vitamio bundle from here : https://github.com/yixia/VitamioBundle\n+2. Unzip it and go to File->Import Module in Android Studio.\n+3. Navigate to VitamioBundle-master, select vitamio folder and press finish.\n+4. Add compile project(‘:vitamio’) in build.gradle(Module: app) dependencies section.\n+5. Open build.gradle (Module: vitamio) – change the min sdk version to 7.\n+6. Also please don’t forget to add the internet permission in your manifest.\n+7. Done !\n+\n+####在Android Studio中引用Vitamio库的步骤如下：\n+1. 下载Vitamio bundle [https://github.com/yixia/VitamioBundle](https://github.com/yixia/VitamioBundle)\n+2. 解压并且在Android Studio上File->Import Module\n+3. 指定到VitamioBundle路径，选择vitamio文件夹 点击完成\n+4. 在build.gradle(Module: app)依赖部分添加依赖项目(‘:vitamio’)\n+5. 打开build.gradle (Module: vitamio) - 改变最新sdk版本为7\n+6. 不要忘记在manifest.xml中添加internet权限\n+7. 完成！\n+\n+####Streaming RTMP Stream Live in Android\n+Before heading directly to the implementation part, first lets understand RTMP a little. Real Time Messaging Protocol (RTMP) is a protocol owned by Adobe Systems. This protocol was developed to stream audio and video content to company’s proprietary flash player. But later on as it evolved, a part of it was released for public use. More of it can be read [here](http://en.wikipedia.org/wiki/Real_Time_Messaging_Protocol). Mostly this type of protocol is used for IPTV and live VoD streaming, but it can be used in many areas as well.\n+\n+####Android RTMP流\n+在讲述如何使用之前，让我们先了解下RTMP。Real Time Messaging Protocol (RTMP)是一个Adobe Systems所拥有的一个协议。该协议是Adobe公司独有的开发音视频流的flash player。后来该协议的部分被公开，供公众使用。更多请查看[这里](http://en.wikipedia.org/wiki/Real_Time_Messaging_Protocol).这个协议大多用于IPTV和实时视频点播流，但它也用于其他领用。\n+\n+\n+To play an RTMP stream in Android, a normal VideoView cannot be used, as it does not support the RTMP playback. But a WebView can be used to play the RTMP stream without any external library. This solves the problem but in my personal opinion web apps don’t give a nice look and feel to an app. Hence in this Android RTMP example we will be using an external library – Vitamio for streaming a live RTMP stream. After including it in the project, please add Vitamio’s VideoView in your layout file:\n+activity_main.xmlXHTML\n+ ```\n+1. <?xml version=\"1.0\" encoding=\"utf-8\"?>\n+2. <LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n+3.        android:layout_width=\"match_parent\"\n+4.        android:layout_height=\"match_parent\"\n+5.        android:orientation=\"vertical\" >\n+6.\n+7.    <io.vov.vitamio.widget.VideoView\n+8.        android:id=\"@+id/vitamio_videoView\"\n+9.        android:layout_width=\"wrap_content\"\n+10.       android:layout_height=\"wrap_content\" />\n+11.\n+12.</LinearLayout>\n+\n+```\n+Further to run this Android RTMP player, please code your activity something like this:\n+\n+MainActivity.java\n+```\n+package com.truiton.rtmpplayer;\n+ \n+import android.net.Uri;\n+import android.os.Bundle;\n+import android.support.v7.app.ActionBarActivity;\n+ \n+import java.util.HashMap;\n+ \n+import io.vov.vitamio.LibsChecker;\n+import io.vov.vitamio.MediaPlayer;\n+import io.vov.vitamio.widget.MediaController;\n+import io.vov.vitamio.widget.VideoView;\n+ \n+ \n+public class MainActivity extends ActionBarActivity {\n+    private static final String TAG = \"MainActivity\";\n+    private String path;\n+    //private HashMap<String, String> options;\n+    private VideoView mVideoView;\n+ \n+    @Override\n+    protected void onCreate(Bundle savedInstanceState) {\n+        super.onCreate(savedInstanceState);\n+        if (!LibsChecker.checkVitamioLibs(this))\n+            return;\n+        setContentView(R.layout.activity_main);\n+        mVideoView = (VideoView) findViewById(R.id.vitamio_videoView);\n+        path = \"rtmp://rrbalancer.broadcast.tneg.de:1935/pw/ruk/ruk\";\n+        /*options = new HashMap<>();\n+        options.put(\"rtmp_playpath\", \"\");\n+        options.put(\"rtmp_swfurl\", \"\");\n+        options.put(\"rtmp_live\", \"1\");\n+        options.put(\"rtmp_pageurl\", \"\");*/\n+        mVideoView.setVideoPath(path);\n+        //mVideoView.setVideoURI(Uri.parse(path), options);\n+        mVideoView.setMediaController(new MediaController(this));\n+        mVideoView.requestFocus();\n+ \n+        mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {\n+            @Override\n+            public void onPrepared(MediaPlayer mediaPlayer) {\n+                mediaPlayer.setPlaybackSpeed(1.0f);\n+            }\n+        });\n+    }\n+}\n+```\n+在android上，标准的VideoView不支持RTMP播放。但WebView可以播放RTMP流。这解决了播放RTMP流的问题，但是我个人认为web apps 不能提供一个界面和体验很好的应用。因此这这个android RTMP例子中我们将运用第三方库-Vitamio 直播RTMP流的流媒体。在工程中引用Vitamio之后，请在你的layout文件添加Vitamio的VideoView：\n+activity_main.xmlXHTML\n+ ```\n+1. <?xml version=\"1.0\" encoding=\"utf-8\"?>\n+2. <LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n+3.        android:layout_width=\"match_parent\"\n+4.        android:layout_height=\"match_parent\"\n+5.        android:orientation=\"vertical\" >\n+6.\n+7.    <io.vov.vitamio.widget.VideoView\n+8.        android:id=\"@+id/vitamio_videoView\"\n+9.        android:layout_width=\"wrap_content\"\n+10.       android:layout_height=\"wrap_content\" />\n+11.\n+12.</LinearLayout>\n+\n+```\n+另外请编写你的activity如下：\n+MainActivity.java\n+```\n+package com.truiton.rtmpplayer;\n+ \n+import android.net.Uri;\n+import android.os.Bundle;\n+import android.support.v7.app.ActionBarActivity;\n+ \n+import java.util.HashMap;\n+ \n+import io.vov.vitamio.LibsChecker;\n+import io.vov.vitamio.MediaPlayer;\n+import io.vov.vitamio.widget.MediaController;\n+import io.vov.vitamio.widget.VideoView;\n+ \n+ \n+public class MainActivity extends ActionBarActivity {\n+    private static final String TAG = \"MainActivity\";\n+    private String path;\n+    //private HashMap<String, String> options;\n+    private VideoView mVideoView;\n+ \n+    @Override\n+    protected void onCreate(Bundle savedInstanceState) {\n+        super.onCreate(savedInstanceState);\n+        if (!LibsChecker.checkVitamioLibs(this))\n+            return;\n+        setContentView(R.layout.activity_main);\n+        mVideoView = (VideoView) findViewById(R.id.vitamio_videoView);\n+        path = \"rtmp://rrbalancer.broadcast.tneg.de:1935/pw/ruk/ruk\";\n+        /*options = new HashMap<>();\n+        options.put(\"rtmp_playpath\", \"\");\n+        options.put(\"rtmp_swfurl\", \"\");\n+        options.put(\"rtmp_live\", \"1\");\n+        options.put(\"rtmp_pageurl\", \"\");*/\n+        mVideoView.setVideoPath(path);\n+        //mVideoView.setVideoURI(Uri.parse(path), options);\n+        mVideoView.setMediaController(new MediaController(this));\n+        mVideoView.requestFocus();\n+ \n+        mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {\n+            @Override\n+            public void onPrepared(MediaPlayer mediaPlayer) {\n+                mediaPlayer.setPlaybackSpeed(1.0f);\n+            }\n+        });\n+    }\n+}\n+```\n+\n+Although the above code is self explanatory, please change the path to play your RTMP stream. At times to stream an RTMP stream in Android, you may have to pass the headers along with the path. Luckily you may see above that Vitamio RTMP player supports that too. Hence all types of RTMP streams can be used with Vitamio library. The above example would look something like this:\n+![Rtmpplayer](http://www.truiton.com/wp-content/uploads/2015/03/Android-RTMP-Stream-Live.png)\n+\n+虽然上面代码是很不需要多做说明的，但需要指出的是 请修改你播放RTMP流的路径。在android上，有时播放RTMP流，你可能通过报头和路径。幸运的是，Vitamio RTMP播放器也支持这种方式。因此，所有类型的RTMP流可以使用Vitamio库。上面的例子会是这个样子：\n+![Rtmpplayer](http://www.truiton.com/wp-content/uploads/2015/03/Android-RTMP-Stream-Live.png)\n+\n+####Android RTSP Streaming\n+Real Time Streaming Protocol (RTSP) is used for streaming content from media servers. Like YouTube uses RTSP streams to distribute content. The easy part about RTSP streaming is that, it can be done through the standard VideoView of Android. To read more about it please refer to my [VideoView Example](http://www.truiton.com/2013/08/android-videoview-example-with-youtube-playback/).\n+\n+But if you are implementing a solution through the usage of Vitamio library, you might prefer using the same for RTSP streaming as well. As a matter of fact Vitamio also supports the playback of RTSP stream. To do so the process is same, include Vitamio’s VideoView in your layout file and use the path variable to specify the RTSP url.\n+\n+```\n+mVideoView = (VideoView) findViewById(R.id.vitamio_videoView);\n+path = \"rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov\";\n+mVideoView.setVideoPath(path);\n+mVideoView.setMediaController(new MediaController(this));\n+mVideoView.requestFocus();\n+\n+mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {\n+    @Override\n+    public void onPrepared(MediaPlayer mediaPlayer) {\n+        mediaPlayer.setPlaybackSpeed(1.0f);\n+    }\n+});\n+```\n+\n+####Android RTMP流媒体\n+实时流协议(RTSP)通过多媒体服务器传输内容。像YouTube使用RTSP流发布内容。关于RTSP流比较容易的部分是，它可以通过android标准的VideoView来完成，想了解更多，请参考我的[VideoView例子](http://www.truiton.com/2013/08/android-videoview-example-with-youtube-playback/)。\n+\n+但是如果你使用Vitamio库，你可能更加喜欢使用相同的RTSP流。事实上Vitamio也支持RTSP流的播放。和上面过程是一样的，包括Vitamio的VideoView在布局文件，并使用路径变量指定的RTSP url\n+\n+```\n+mVideoView = (VideoView) findViewById(R.id.vitamio_videoView);\n+path = \"rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov\";\n+mVideoView.setVideoPath(path);\n+mVideoView.setMediaController(new MediaController(this));\n+mVideoView.requestFocus();\n+\n+mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {\n+    @Override\n+    public void onPrepared(MediaPlayer mediaPlayer) {\n+        mediaPlayer.setPlaybackSpeed(1.0f);\n+    }\n+});\n+```\n+\n+\n+####Android m3u8 Streaming\n+How to play m3u8 video in Android? is one of the most common questions among the Android developers. The easiest way to do HTTP Live Streaming (HLS) in Android is through the usage of standard VideoView. But as you might have guessed, there are some limitations to it. Through standard Android VideoView you can stream m3u8 streams but only on the devices having Android 3.0 and above. This is because the HTTP/HTTPS live streaming and HTTP/HTTPS progressive streaming protocols were introduced in Android 3.0 and full support with HTTPS was given in 3.1.\n+\n+If you wish to do HTTP Live Streaming (HLS) and support Android m3u8 streaming, for earlier versions of android. You should consider using the Vitamio library, this library adds the support for the playback of m3u8 lists on android API 7 and above. To do so the process is same- include Vitamio’s VideoView in your layout file and use the path variable to specify the HTTP Live Streaming URL.\n+```\n+mVideoView = (VideoView) findViewById(R.id.vitamio_videoView);\n+path = \"http://93.184.221.133/00573D/236/236-0.m3u8\";\n+mVideoView.setVideoPath(path);\n+mVideoView.setMediaController(new MediaController(this));\n+mVideoView.requestFocus();\n+\n+mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {\n+    @Override\n+    public void onPrepared(MediaPlayer mediaPlayer) {\n+        mediaPlayer.setPlaybackSpeed(1.0f);\n+    }\n+});\n+```\n+\n+Playing m3u8 stream on Android with Vitamio would look something like this:\n+![m3u8](http://www.truiton.com/wp-content/uploads/2015/03/Android-m3u8-Streaming.png)\n+\n+####Android m3u8 流媒体\n+如何在android上播放m3u8视频？是一个android开发者最常见的问题之一。最容易的方式是HTTP Live Streaming (HLS) 通过使用标准的VideoView。通过标准的 Android VideoView 你能播放m3u8流但是只有在android3.0以上设备可以使用。这是因为HTTP/ HTTPS直播和HTTP/ HTTPS渐进式流媒体协议在Android 3.0的引入，使用HTTPS完全支持在3.1引入。","path":"issue-10/Android 如何直播RTMP流.md","position":255,"original_position":255,"commit_id":"da6a8162ec2050412926ddbff01049bfe8642d9b","original_commit_id":"da6a8162ec2050412926ddbff01049bfe8642d9b","user":{"login":"chaossss","id":6649763,"avatar_url":"https://avatars.githubusercontent.com/u/6649763?v=3","gravatar_id":"","url":"https://api.github.com/users/chaossss","html_url":"https://github.com/chaossss","followers_url":"https://api.github.com/users/chaossss/followers","following_url":"https://api.github.com/users/chaossss/following{/other_user}","gists_url":"https://api.github.com/users/chaossss/gists{/gist_id}","starred_url":"https://api.github.com/users/chaossss/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chaossss/subscriptions","organizations_url":"https://api.github.com/users/chaossss/orgs","repos_url":"https://api.github.com/users/chaossss/repos","events_url":"https://api.github.com/users/chaossss/events{/privacy}","received_events_url":"https://api.github.com/users/chaossss/received_events","type":"User","site_admin":false},"body":"“如何在android上播放m3u8视频”是android开发者最常见的问题之一","created_at":"2015-05-10T12:32:25Z","updated_at":"2015-05-10T12:32:25Z","html_url":"https://github.com/bboyfeiyu/android-tech-frontier/pull/188#discussion_r30001669","pull_request_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/pulls/188","_links":{"self":{"href":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/pulls/comments/30001669"},"html":{"href":"https://github.com/bboyfeiyu/android-tech-frontier/pull/188#discussion_r30001669"},"pull_request":{"href":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/pulls/188"}}},"pull_request":{"url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/pulls/188","id":35076981,"html_url":"https://github.com/bboyfeiyu/android-tech-frontier/pull/188","diff_url":"https://github.com/bboyfeiyu/android-tech-frontier/pull/188.diff","patch_url":"https://github.com/bboyfeiyu/android-tech-frontier/pull/188.patch","issue_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/issues/188","number":188,"state":"open","locked":false,"title":"Android 如何直播RTMP流","user":{"login":"ayyb1988","id":7148115,"avatar_url":"https://avatars.githubusercontent.com/u/7148115?v=3","gravatar_id":"","url":"https://api.github.com/users/ayyb1988","html_url":"https://github.com/ayyb1988","followers_url":"https://api.github.com/users/ayyb1988/followers","following_url":"https://api.github.com/users/ayyb1988/following{/other_user}","gists_url":"https://api.github.com/users/ayyb1988/gists{/gist_id}","starred_url":"https://api.github.com/users/ayyb1988/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ayyb1988/subscriptions","organizations_url":"https://api.github.com/users/ayyb1988/orgs","repos_url":"https://api.github.com/users/ayyb1988/repos","events_url":"https://api.github.com/users/ayyb1988/events{/privacy}","received_events_url":"https://api.github.com/users/ayyb1988/received_events","type":"User","site_admin":false},"body":"Android 如何直播RTMP流  \r\n\r\n翻译完成 待校验","created_at":"2015-05-10T03:48:02Z","updated_at":"2015-05-10T12:32:25Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3eb6b478ceec5d7bf785be1c04d0f53112411c8d","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/pulls/188/commits","review_comments_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/pulls/188/comments","review_comment_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/pulls/comments{/number}","comments_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/issues/188/comments","statuses_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/statuses/da6a8162ec2050412926ddbff01049bfe8642d9b","head":{"label":"ayyb1988:master","ref":"master","sha":"da6a8162ec2050412926ddbff01049bfe8642d9b","user":{"login":"ayyb1988","id":7148115,"avatar_url":"https://avatars.githubusercontent.com/u/7148115?v=3","gravatar_id":"","url":"https://api.github.com/users/ayyb1988","html_url":"https://github.com/ayyb1988","followers_url":"https://api.github.com/users/ayyb1988/followers","following_url":"https://api.github.com/users/ayyb1988/following{/other_user}","gists_url":"https://api.github.com/users/ayyb1988/gists{/gist_id}","starred_url":"https://api.github.com/users/ayyb1988/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ayyb1988/subscriptions","organizations_url":"https://api.github.com/users/ayyb1988/orgs","repos_url":"https://api.github.com/users/ayyb1988/repos","events_url":"https://api.github.com/users/ayyb1988/events{/privacy}","received_events_url":"https://api.github.com/users/ayyb1988/received_events","type":"User","site_admin":false},"repo":{"id":35355230,"name":"android-tech-frontier","full_name":"ayyb1988/android-tech-frontier","owner":{"login":"ayyb1988","id":7148115,"avatar_url":"https://avatars.githubusercontent.com/u/7148115?v=3","gravatar_id":"","url":"https://api.github.com/users/ayyb1988","html_url":"https://github.com/ayyb1988","followers_url":"https://api.github.com/users/ayyb1988/followers","following_url":"https://api.github.com/users/ayyb1988/following{/other_user}","gists_url":"https://api.github.com/users/ayyb1988/gists{/gist_id}","starred_url":"https://api.github.com/users/ayyb1988/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ayyb1988/subscriptions","organizations_url":"https://api.github.com/users/ayyb1988/orgs","repos_url":"https://api.github.com/users/ayyb1988/repos","events_url":"https://api.github.com/users/ayyb1988/events{/privacy}","received_events_url":"https://api.github.com/users/ayyb1988/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/ayyb1988/android-tech-frontier","description":"一个定期翻译国外Android优质的技术、开源库、软件架构设计、测试等文章的开源项目","fork":true,"url":"https://api.github.com/repos/ayyb1988/android-tech-frontier","forks_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/forks","keys_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/teams","hooks_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/hooks","issue_events_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/issues/events{/number}","events_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/events","assignees_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/assignees{/user}","branches_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/branches{/branch}","tags_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/tags","blobs_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/git/refs{/sha}","trees_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/statuses/{sha}","languages_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/languages","stargazers_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/stargazers","contributors_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/contributors","subscribers_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/subscribers","subscription_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/subscription","commits_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/commits{/sha}","git_commits_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/git/commits{/sha}","comments_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/comments{/number}","issue_comment_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/issues/comments{/number}","contents_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/contents/{+path}","compare_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/merges","archive_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/downloads","issues_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/issues{/number}","pulls_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/pulls{/number}","milestones_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/milestones{/number}","notifications_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/labels{/name}","releases_url":"https://api.github.com/repos/ayyb1988/android-tech-frontier/releases{/id}","created_at":"2015-05-10T03:18:22Z","updated_at":"2015-05-10T01:50:47Z","pushed_at":"2015-05-10T07:11:03Z","git_url":"git://github.com/ayyb1988/android-tech-frontier.git","ssh_url":"git@github.com:ayyb1988/android-tech-frontier.git","clone_url":"https://github.com/ayyb1988/android-tech-frontier.git","svn_url":"https://github.com/ayyb1988/android-tech-frontier","homepage":"http://www.devtf.cn","size":34228,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"bboyfeiyu:master","ref":"master","sha":"1740184bd07866a0002f0f68c3a1de0a5fb8f42f","user":{"login":"bboyfeiyu","id":1683811,"avatar_url":"https://avatars.githubusercontent.com/u/1683811?v=3","gravatar_id":"","url":"https://api.github.com/users/bboyfeiyu","html_url":"https://github.com/bboyfeiyu","followers_url":"https://api.github.com/users/bboyfeiyu/followers","following_url":"https://api.github.com/users/bboyfeiyu/following{/other_user}","gists_url":"https://api.github.com/users/bboyfeiyu/gists{/gist_id}","starred_url":"https://api.github.com/users/bboyfeiyu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bboyfeiyu/subscriptions","organizations_url":"https://api.github.com/users/bboyfeiyu/orgs","repos_url":"https://api.github.com/users/bboyfeiyu/repos","events_url":"https://api.github.com/users/bboyfeiyu/events{/privacy}","received_events_url":"https://api.github.com/users/bboyfeiyu/received_events","type":"User","site_admin":false},"repo":{"id":32553922,"name":"android-tech-frontier","full_name":"bboyfeiyu/android-tech-frontier","owner":{"login":"bboyfeiyu","id":1683811,"avatar_url":"https://avatars.githubusercontent.com/u/1683811?v=3","gravatar_id":"","url":"https://api.github.com/users/bboyfeiyu","html_url":"https://github.com/bboyfeiyu","followers_url":"https://api.github.com/users/bboyfeiyu/followers","following_url":"https://api.github.com/users/bboyfeiyu/following{/other_user}","gists_url":"https://api.github.com/users/bboyfeiyu/gists{/gist_id}","starred_url":"https://api.github.com/users/bboyfeiyu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bboyfeiyu/subscriptions","organizations_url":"https://api.github.com/users/bboyfeiyu/orgs","repos_url":"https://api.github.com/users/bboyfeiyu/repos","events_url":"https://api.github.com/users/bboyfeiyu/events{/privacy}","received_events_url":"https://api.github.com/users/bboyfeiyu/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/bboyfeiyu/android-tech-frontier","description":"一个定期翻译国外Android优质的技术、开源库、软件架构设计、测试等文章的开源项目","fork":false,"url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier","forks_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/forks","keys_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/keys{/key_id}","collaborators_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/teams","hooks_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/hooks","issue_events_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/issues/events{/number}","events_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/events","assignees_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/assignees{/user}","branches_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/branches{/branch}","tags_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/tags","blobs_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/git/refs{/sha}","trees_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/git/trees{/sha}","statuses_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/statuses/{sha}","languages_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/languages","stargazers_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/stargazers","contributors_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/contributors","subscribers_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/subscribers","subscription_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/subscription","commits_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/commits{/sha}","git_commits_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/git/commits{/sha}","comments_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/comments{/number}","issue_comment_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/issues/comments{/number}","contents_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/contents/{+path}","compare_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/compare/{base}...{head}","merges_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/merges","archive_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/downloads","issues_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/issues{/number}","pulls_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/pulls{/number}","milestones_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/milestones{/number}","notifications_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/labels{/name}","releases_url":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/releases{/id}","created_at":"2015-03-20T00:36:37Z","updated_at":"2015-05-10T09:25:04Z","pushed_at":"2015-05-10T07:11:03Z","git_url":"git://github.com/bboyfeiyu/android-tech-frontier.git","ssh_url":"git@github.com:bboyfeiyu/android-tech-frontier.git","clone_url":"https://github.com/bboyfeiyu/android-tech-frontier.git","svn_url":"https://github.com/bboyfeiyu/android-tech-frontier","homepage":"http://www.devtf.cn","size":34228,"stargazers_count":1429,"watchers_count":1429,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":405,"mirror_url":null,"open_issues_count":20,"forks":405,"open_issues":20,"watchers":1429,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/pulls/188"},"html":{"href":"https://github.com/bboyfeiyu/android-tech-frontier/pull/188"},"issue":{"href":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/issues/188"},"comments":{"href":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/issues/188/comments"},"review_comments":{"href":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/pulls/188/comments"},"review_comment":{"href":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/pulls/188/commits"},"statuses":{"href":"https://api.github.com/repos/bboyfeiyu/android-tech-frontier/statuses/da6a8162ec2050412926ddbff01049bfe8642d9b"}}}}