基于騰訊云播放器封裝的Flutter Video Player插件

基于騰訊云播放器封裝的Flutter Video Player插件

項(xiàng)目github地址:https://github.com/RandyWei/flt_video_player

Flutter版本現(xiàn)在已經(jīng)更新到了v1.5.4-hotfix.2,在國(guó)內(nèi)也越來(lái)越火冲呢。

在之前項(xiàng)目中有視頻播放功能舍败,使用了flutter官方出的video_player庫(kù)完成實(shí)現(xiàn)。flutter官方所有插件碗硬,詳見(jiàn)https://github.com/flutter/plugins

官方的video_player瓤湘,安卓是基于ExoPlayer,蘋果是基于原生的AVPlayer恩尾,目前項(xiàng)目使用中也沒(méi)什么毛病弛说。

在閑暇之余,出于學(xué)習(xí)開(kāi)發(fā)flutter plugin目的翰意,基于騰訊云(https://cloud.tencent.com/document/product/881)播放器封裝了一個(gè)flutter視頻播放器木人。

目前項(xiàng)目在開(kāi)發(fā)測(cè)試階段,還沒(méi)發(fā)布到pub平臺(tái)上冀偶,可通過(guò)git配置使用醒第。

項(xiàng)目github地址:https://github.com/RandyWei/flt_video_player

播放器開(kāi)放了部分騰訊云播放器的功能,如:倍速进鸠、靜音等稠曼。

參考資料:

https://github.com/An-uking/Flutter_IJKPlayer

https://github.com/CaiJingLong/flutter_ijkplayer

https://github.com/flutter/plugins/tree/master/packages/video_player

在項(xiàng)目開(kāi)發(fā)過(guò)程中碰到了以下問(wèn)題,作了一下總結(jié):

1客年、出現(xiàn)label標(biāo)簽沖突問(wèn)題霞幅,如下錯(cuò)誤

Attribute application@label value=(flutter_plugin_demo_example) from AndroidManifest.xml:13:9-52is also present at [LiteAVSDK_Player_6.3.7089.aar] AndroidManifest.xml:19:9-41 value=(@string/app_name).Suggestion: add 'tools:replace="android:label"' to <application> element at AndroidManifest.xml:11:5-35:19 to override.

這個(gè)錯(cuò)誤是在安卓端出現(xiàn)的,因?yàn)槭褂昧薒iteAVSDK類似這種使用了各種第三方庫(kù)包含android:label的量瓜,所以沖突了

解決辦法:其實(shí)錯(cuò)誤代碼提示也很是明確司恳,或者直接上谷歌去百度一下就可以得到答案,在mainfest Application標(biāo)簽中添加tools:relpace=”label”即可绍傲。

2扔傅、在使用EventChannel進(jìn)行Flutter和Native通信過(guò)程中出現(xiàn)以下錯(cuò)誤:

E/EventChannel#flutter_plugin_demo.event.status(15177): Failed to open event streamE/EventChannel#flutter_plugin_demo.event.status(15177): java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter oE/EventChannel#flutter_plugin_demo.event.status(15177): at com.chinahrt.flutter_plugin_demo2.FlutterPluginDemo2Plugin$onMethodCall$1.onListen(Unknown Source:2)E/EventChannel#flutter_plugin_demo.event.status(15177): at io.flutter.plugin.common.EventChannel$IncomingStreamRequestHandler.onListen(EventChannel.java:181)E/EventChannel#flutter_plugin_demo.event.status(15177): at io.flutter.plugin.common.EventChannel$IncomingStreamRequestHandler.onMessage(EventChannel.java:160)E/EventChannel#flutter_plugin_demo.event.status(15177): at io.flutter.view.FlutterNativeView$PlatformMessageHandlerImpl.handleMessageFromDart(FlutterNativeView.java:188)E/EventChannel#flutter_plugin_demo.event.status(15177): at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:202)E/EventChannel#flutter_plugin_demo.event.status(15177): at android.os.MessageQueue.nativePollOnce(Native Method)E/EventChannel#flutter_plugin_demo.event.status(15177): at android.os.MessageQueue.next(MessageQueue.java:326)E/EventChannel#flutter_plugin_demo.event.status(15177): at android.os.Looper.loop(Looper.java:160)E/EventChannel#flutter_plugin_demo.event.status(15177): at android.app.ActivityThread.main(ActivityThread.java:6718)E/EventChannel#flutter_plugin_demo.event.status(15177): at java.lang.reflect.Method.invoke(Native Method)E/EventChannel#flutter_plugin_demo.event.status(15177): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)E/EventChannel#flutter_plugin_demo.event.status(15177): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)I/flutter (15177): ══╡ EXCEPTION CAUGHT BY SERVICES LIBRARY ╞══════════════════════════════════════════════════════════I/flutter (15177): The following PlatformException was thrown while activating platform stream on channelI/flutter (15177): flutter_plugin_demo.event.status:I/flutter (15177): PlatformException(error, Parameter specified as non-null is null: methodI/flutter (15177): kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter o, null)I/flutter (15177):I/flutter (15177): When the exception was thrown, this was the stack:I/flutter (15177): #0 ?????StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:564:7)I/flutter (15177): #1 ?????MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:302:33)I/flutter (15177): <asynchronous suspension>I/flutter (15177): #2 ?????EventChannel.receiveBroadcastStream.<anonymous closure> (package:flutter/src/services/platform_channel.dart:490:29)I/flutter (15177): <asynchronous suspension>I/flutter (15177): #7 ?????VideoPlayerController.initialize (package:flutter_plugin_demo2/video_player.dart:33:10)I/flutter (15177): <asynchronous suspension>I/flutter (15177): #8 ?????_MyAppState.initState (package:flutter_plugin_demo2_example/main.dart:25:9)I/flutter (15177): #9 ?????StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3846:58)I/flutter (15177): #10 ????ComponentElement.mount (package:flutter/src/widgets/framework.dart:3711:5)I/flutter (15177): #11 ????Element.inflateWidget (package:flutter/src/widgets/framework.dart:2956:14)I/flutter (15177): #12 ????Element.updateChild (package:flutter/src/widgets/framework.dart:2759:12)I/flutter (15177): #13 ????RenderObjectToWidgetElement._rebuild (package:flutter/src/widgets/binding.dart:933:16)I/flutter (15177): #14 ????RenderObjectToWidgetElement.mount (package:flutter/src/widgets/binding.dart:904:5)I/flutter (15177): #15 ????RenderObjectToWidgetAdapter.attachToRenderTree.<anonymous closure> (package:flutter/src/widgets/binding.dart:850:17)I/flutter (15177): #16 ????BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2253:19)I/flutter (15177): #17 ????RenderObjectToWidgetAdapter.attachToRenderTree (package:flutter/src/widgets/binding.dart:849:13)I/flutter (15177): #18 ????_WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.attachRootWidget (package:flutter/src/widgets/binding.dart:736:7)I/flutter (15177): #19 ????runApp (package:flutter/src/widgets/binding.dart:780:7)I/flutter (15177): #20 ????main (package:flutter_plugin_demo2_example/main.dart:8:16)I/flutter (15177): #21 ????_runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:189:25)I/flutter (15177): #26 ????_runMainZoned.<anonymous closure> (dart:ui/hooks.dart:180:5)I/flutter (15177): #27 ????_startIsolate.<anonymous closure> (dart:isolate/runtime/libisolate_patch.dart:300:19)I/flutter (15177): #28 ????_RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:171:12)I/flutter (15177): (elided 8 frames from package dart:async)I/flutter (15177): ════════════════════════════════════════════════════════════════════════════════════════════════════

這個(gè)問(wèn)題還是出現(xiàn)在安卓平臺(tái)上,因?yàn)榘沧宽?xiàng)目使用了kotlin支持烫饼,在寫kotlin代碼實(shí)現(xiàn)EventChannel.StreamHandler時(shí)

override fun onListen(o: Any?, sink: EventChannel.EventSink?) {

}

override fun onCancel(o: Any?) {

}

參數(shù)應(yīng)該可空猎塞,因誤寫成不可空,導(dǎo)致報(bào)錯(cuò)枫弟。

所以解決辦法就是加?就可以

3邢享、在iOS項(xiàng)目podspec上配置騰訊云播放器TXLiteAVSDK_Player支持時(shí),出現(xiàn)以下問(wèn)題

Undefined symbols for architecture x86_64:?????"vtable for __cxxabiv1::__si_class_type_info", referenced from:?????????typeinfo for bssl::(anonymous namespace)::ECKeyShare in TXLiteAVSDK_Player(ssl_key_share.o)?????????typeinfo for bssl::(anonymous namespace)::X25519KeyShare in TXLiteAVSDK_Player(ssl_key_share.o)?????NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.?????"_sqlite3_column_text", referenced from:?????????_qcloud_ijktsdb_meta_select in TXLiteAVSDK_Player(ijktsdb.o)?????"_sqlite3_bind_blob", referenced from:?????????_qcloud_ijktsdb_insert in TXLiteAVSDK_Player(ijktsdb.o)?????"_sqlite3_bind_text", referenced from:?????????_qcloud_ijktsdb_select in TXLiteAVSDK_Player(ijktsdb.o)?????????_ijktsdb_check in TXLiteAVSDK_Player(ijktsdb.o)?????????_qcloud_ijktsdb_insert in TXLiteAVSDK_Player(ijktsdb.o)?????????_qcloud_ijktsdb_meta_select in TXLiteAVSDK_Player(ijktsdb.o)?????????_qcloud_ijktsdb_meta_insert in TXLiteAVSDK_Player(ijktsdb.o)?????"_sqlite3_column_bytes", referenced from:?????????_qcloud_ijktsdb_select in TXLiteAVSDK_Player(ijktsdb.o)?????????_ijktsdb_check in TXLiteAVSDK_Player(ijktsdb.o)?????"_sqlite3_column_blob", referenced from:?????????_qcloud_ijktsdb_select in TXLiteAVSDK_Player(ijktsdb.o)?????"_sqlite3_errcode", referenced from:?????????_databaseError in TXLiteAVSDK_Player(ijktsdb.o)?????"_sqlite3_close", referenced from:?????????_qcloud_ijktsdb_open in TXLiteAVSDK_Player(ijktsdb.o)?????????_qcloud_ijktsdb_close in TXLiteAVSDK_Player(ijktsdb.o)

使用framwork配置無(wú)論怎樣都配置不成功淡诗,如果有大佬知道怎么配置的骇塘,可以教教我

最后還是使用了pod:s.dependency 'TXLiteAVSDK_Player' 配置成功了伊履。

參考資料:

https://guides.cocoapods.org/syntax/podspec.html#dependency

4、在開(kāi)發(fā)過(guò)程中出現(xiàn)以下錯(cuò)誤:

Exception: ideviceinfo returned an error:ERROR: Could not connect to lockdownd, error code -8#0 ?????IMobileDevice.getInfoForDevice (package:flutter_tools/src/ios/mac.dart:141:9)<asynchronous suspension>#1 ?????IOSDevice.getAttachedDevices (package:flutter_tools/src/ios/devices.dart:156:55)<asynchronous suspension>#2 ?????IOSDevices.pollingGetDevices (package:flutter_tools/src/ios/devices.dart:110:57)#3 ?????PollingDeviceDiscovery.devices (package:flutter_tools/src/device.dart:186:52)<asynchronous suspension>#4 ?????DeviceManager.getAllConnectedDevices (package:flutter_tools/src/device.dart:114:46)<asynchronous suspension>#5 ?????DeviceValidator.validate (package:flutter_tools/src/doctor.dart:705:54)<asynchronous suspension>#6 ?????Doctor.startValidatorTasks (package:flutter_tools/src/doctor.dart:129:52)#7 ?????Doctor.diagnose (package:flutter_tools/src/doctor.dart:200:41)#8 ?????_AsyncAwaitCompleter.start (dart:async-patch/async_patch.dart:49:6)#9 ?????Doctor.diagnose (package:flutter_tools/src/doctor.dart:190:24)#10 ????DoctorCommand.runCommand (package:flutter_tools/src/commands/doctor.dart:48:39)#11 ????_AsyncAwaitCompleter.start (dart:async-patch/async_patch.dart:49:6)#12 ????DoctorCommand.runCommand (package:flutter_tools/src/commands/doctor.dart:34:42)#13 ????FlutterCommand.verifyThenRunCommand (package:flutter_tools/src/runner/flutter_command.dart:559:18)#14 ????_asyncThenWrapperHelper.<anonymous closure> (dart:async-patch/async_patch.dart:77:64)#15 ????_rootRunUnary (dart:async/zone.dart:1132:38)#16 ????_CustomZone.runUnary (dart:async/zone.dart:1029:19)#17 ????_FutureListener.handleValue (dart:async/future_impl.dart:126:18)#18 ????Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:639:45)#19 ????Future._propagateToListeners (dart:async/future_impl.dart:668:32)#20 ????Future._complete (dart:async/future_impl.dart:473:7)#21 ????_SyncCompleter.complete (dart:async/future_impl.dart:51:12)#22 ????_AsyncAwaitCompleter.complete.<anonymous closure> (dart:async-patch/async_patch.dart:33:20)#23 ????_rootRun (dart:async/zone.dart:1124:13)#24 ????_CustomZone.run (dart:async/zone.dart:1021:19)#25 ????_CustomZone.bindCallback.<anonymous closure> (dart:async/zone.dart:947:23)#26 ????_microtaskLoop (dart:async/schedule_microtask.dart:41:21)#27 ????_startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)#28 ????_runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:115:13)#29 ????_RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:172:5)

執(zhí)行命令: ideviceinfo -d 出現(xiàn)如下錯(cuò)誤

idevice.c:295 idevice_connect(): ERROR: Connecting to usbmuxd failed: -9 (Bad file descriptor)13:18:45 lockdown.c:663 lockdownd_client_new(): could not connect to lockdownd (device 1a95bb66796dad5ebf6a99d1c87101b5c2214963)13:18:45 lockdown.c:698 lockdownd_client_new_with_handshake(): failed to create lockdownd client.ERROR: Could not connect to lockdownd, error code -8

關(guān)于”Could not connect to lockdownd”這個(gè)錯(cuò)誤款违,網(wǎng)上出現(xiàn)了很多解決辦法唐瀑,但每個(gè)人碰到的error code -8,錯(cuò)誤碼都不一樣插爹。有部分解決辦法就是修改權(quán)限哄辣,對(duì)于錯(cuò)誤碼為 -8 的,一直沒(méi)有搜到相關(guān)解決辦法赠尾。折騰了一天力穗,其實(shí)原因是,開(kāi)發(fā)過(guò)程中气嫁,我碰到了手機(jī)当窗,導(dǎo)致手機(jī)數(shù)據(jù)線松了,然后我更換了一個(gè)USB接口寸宵,總之是因?yàn)槭謾C(jī)和電腦沒(méi)有連接好崖面。如果有碰到這個(gè)問(wèn)題,換個(gè)接口梯影,然后撤銷iphone手機(jī)和電腦的信任巫员,直到連接電腦時(shí)彈出信任授權(quán)對(duì)話框,才算是正常連接成功甲棍。一旦出現(xiàn)這個(gè)錯(cuò)誤简识,連安卓設(shè)備都運(yùn)行不了。

5感猛、運(yùn)行時(shí)出現(xiàn)

Assertion failed: (AMDeviceIsPaired(device)), function handle_device, file /tmp/ios-deploy-20181117-87168-1goz8ak/ios-deploy-1.9.4/src/ios-deploy/ios-deploy.m, line 1598.Could not install build/ios/iphoneos/Runner.app on 1a95bb66796dad5ebf6a99d1c87101b5c2214963.Try launching Xcode and selecting "Product > Run" to fix the problem:?open ios/Runner.xcworkspaceError launching application on iPhone (5).

出現(xiàn)這個(gè)錯(cuò)誤财异,直接按提示使用Xcode運(yùn)行一下項(xiàng)目即可。

6唱遭、還有最后一個(gè)嚴(yán)重的內(nèi)存泄漏的問(wèn)題

錯(cuò)誤日志:Signal 11 was raised.

在iOS實(shí)現(xiàn)將畫面數(shù)據(jù)傳送到Flutter,使用到了CVPixelBufferRef數(shù)據(jù)呈驶。對(duì)于這塊目前不是很清楚拷泽,大概是因?yàn)榫€程安全的問(wèn)題,在騰訊云播放器回調(diào)的數(shù)據(jù)袖瞻,隨時(shí)可能會(huì)被釋放司致,而在Flutter回調(diào)中使用了已被釋放的數(shù)據(jù),出現(xiàn)了問(wèn)題聋迎。最后參考了ijk代碼脂矫,使用了OSAtomicCompareAndSwapPtrBarrier對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證比較得以解決,對(duì)于這個(gè)OSAtomicCompareAndSwapPtrBarrier方法也不是很理解霉晕,如果有大佬了解的庭再,可以教教我捞奕。

如果有錯(cuò)誤的地方,希望大佬不吝賜教拄轻。

同時(shí)希望star一下颅围。項(xiàng)目github地址:https://github.com/RandyWei/flt_video_player

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市恨搓,隨后出現(xiàn)的幾起案子院促,更是在濱河造成了極大的恐慌,老刑警劉巖斧抱,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件常拓,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡辉浦,警方通過(guò)查閱死者的電腦和手機(jī)弄抬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)盏浙,“玉大人眉睹,你說(shuō)我怎么就攤上這事》媳欤” “怎么了竹海?”我有些...
    開(kāi)封第一講書人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)丐黄。 經(jīng)常有香客問(wèn)我斋配,道長(zhǎng),這世上最難降的妖魔是什么灌闺? 我笑而不...
    開(kāi)封第一講書人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任艰争,我火速辦了婚禮,結(jié)果婚禮上桂对,老公的妹妹穿的比我還像新娘甩卓。我一直安慰自己,他們只是感情好蕉斜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布逾柿。 她就那樣靜靜地躺著,像睡著了一般宅此。 火紅的嫁衣襯著肌膚如雪机错。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,208評(píng)論 1 299
  • 那天父腕,我揣著相機(jī)與錄音弱匪,去河邊找鬼。 笑死璧亮,一個(gè)胖子當(dāng)著我的面吹牛萧诫,可吹牛的內(nèi)容都是我干的斥难。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼财搁,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蘸炸!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起尖奔,我...
    開(kāi)封第一講書人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤搭儒,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后提茁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體淹禾,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年茴扁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了铃岔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡峭火,死狀恐怖毁习,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情卖丸,我是刑警寧澤纺且,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站稍浆,受9級(jí)特大地震影響载碌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜衅枫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一嫁艇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧弦撩,春花似錦步咪、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至偏形,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間觉鼻,已是汗流浹背俊扭。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坠陈,地道東北人萨惑。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓捐康,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親庸蔼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子解总,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 摘要:閑魚技術(shù)-正物 問(wèn)題背景 對(duì)于開(kāi)發(fā)者而言,什么是Flutter姐仅?它是用什么語(yǔ)言編寫的花枫,包含哪幾部分,是如何被...
    貓耳呀閱讀 2,559評(píng)論 1 7
  • 網(wǎng)絡(luò)請(qǐng)求 http ^0.11.3+16 pub.dartlang.org/packages/ht… github...
    ibobo999閱讀 2,323評(píng)論 0 20
  • 打卡日期:2019年/2月/2日 90天打卡累計(jì)天數(shù):2/90 #宣言(如:不做咆哮體媽媽)# 做一個(gè)有愛(ài)智慧的媽...
    宇宙公民玉琳閱讀 140評(píng)論 0 0
  • 朋友們掏膏!我們每天都勤奮的工作劳翰,每天都努力學(xué)習(xí)!首先要學(xué)會(huì)做人馒疹,會(huì)做人是一個(gè)大課題佳簸,包括守法,懂法颖变,守規(guī)矩生均,鄉(xiāng)規(guī),族...
    蒙味集APP閱讀 276評(píng)論 0 1
  • 從北京回重慶腥刹,一路橫穿華北大平原马胧,落日的余暉從列車的窗戶上撒進(jìn)來(lái),金黃金黃的肛走,是我許久沒(méi)有見(jiàn)過(guò)的景色漓雅。 重慶地處四...
    諶小柒閱讀 262評(píng)論 0 0