GStreamer 安卓安装辅导四(二):播放器太菜了(免费的嘛),超不爽(没法抄啊!)!智力更新(有这成语吗?),先来个全屏。

本文是关于GStreamer安卓播放器的改造指南,主要介绍了如何将播放器升级为全屏模式,包括建立模块、插入Fragment、处理Signal 11错误、实现小版和全屏同步等功能。教程详细讲解了每个步骤,并提供了相应的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

🐐 0. 播放器升级指南

🤓:玩到这,你就知道写辅导的那个够随便的了,瞧:

  • 音响怎么控制?没有💀
  • 画面怎么改? 没有💀
  • 字幕?更加没有💀
  • 加网址窗口?也没有💀

还有没有?我眼镜多了两圈。

😎:在网上找例子,还挺少的。在 Apple 找了个,还是 C++,是 C 的大儿子。现在我尝试改改屏幕。
🐕:有就不错了,大哥!汪汪(继续继续)…
🤔:我是不是幻听啊,狗会说话?我只听过隔壁的猫 😻 早上六点在唱 ABC。叫得比公鸡还响亮。真想扔它一棍子,叫春叫我窗口下面。


🔪1. 看飞刀,插入Activity!

Hilt(💂):呔!那小子,上次为何一刀未插,是不是看不起咱来嗻?
😌:对不起,您大人有大粱( Framework 不就是大粱吗?)!上一章写得我都蒙了,自己都看下去了,一刀未插,丢你大人的脸了!现在补上。

🍱 建立模块

➕ 路子 package:di
➕ Kotlin 文件:PlayModule.kt
play
插什么?当然是 NativePlayer 啦。

@Module
@InstallIn(SingletonComponent::class)
object PlayerModule   {
   

    @Provides
    @Singleton
    fun providePlayer(): NativePlayer = NativePlayer()

}

其他的你随便加。
❗️ Hilt 更新 ❗️ : ApplicationComponentSingletonComponent

🔪 插入 Tutorial4

在头顶摆个 @AndroidEntryPoint 牌苹果。
飞刀插来看看:

@AndroidEntryPoint
class Tutorial4 : AppCompatActivity(R.layout.main),
        SurfaceHolder.Callback, OnSeekBarChangeListener {
   
    // VM
    private val playerVM: PlayerViewModel by viewModels()

    // NativePlayer
//    val nplayer = NativePlayer()
    @Inject
    lateinit var nplayer:NativePlayer

❌杀掉 setContentView (),把 R.layout.main 移 AppCompatActivity(R.layout.main) 。瞧,我帮你省了一行
🔺 🏃跑一遍,备份💾。
🐛?如果插不准,回 PlayerModule 看看。现在这个更新不好,把图标给更没了;看不见有没有错。


💢2. 开动全屏 Fragment🧩

💡 提示

系统:

    @Inject
    lateinit var nplayer:NativePlayer

这个已经在出生👶了,所以

        nplayer.initJni()

已经在记忆体挂号了,Fragment 抄书可以照抄,然后死机试试。

😭: 置于死地而后生。

🎞️ 新片

new
名字: FullScreenFragment
Kotlin: 清理一下,arguements 就不要了。

class FullScreenFragment : Fragment() {
   


    override fun onCreate(savedInstanceState: Bundle?) {
   
        super.onCreate(savedInstanceState)


    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
   
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_full_screen, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
   
        super.onViewCreated(view, savedInstanceState)

    }

    companion object {
   
        @JvmStatic
        fun newInstance() = FullScreenFragment()
    }
}

✍️ UI 布局设计

🔨 main.xml

main

  • 控制分成两组 LinearLayout 。
  • 再网上找两个按钮图档
    🤷缩水成:50x50
    icons

🔨 fragment_full_screen.xml

用 Landscape 横放设计:
landscape
完成:
fragment
抄过去,每个 ID 加 2 。这里使用 shrink 图像。
add
加 Landscape Variation:
land
系统会炒一份 横放设计 的菜,🍱。
😋:到中午没有,👃香啊!

👉🏻 Tutorial4.kt 加 Fragment

  • UI:
    // UI
    ...
    val full:ImageButton by lazy {
    findViewById(R.id.button_full) }
    // layout
    val compact:ConstraintLayout by lazy {
    findViewById(R.id.compact_CL) }

    val fragmentManager = supportFragmentManager
  • onCreate():
    // Called when the activity is first created.
    public override fun onCreate(savedInstanceState: Bundle?) {
   
        ...        
        // buttons
        play.setOnClickListener {
   ...}
        pause.setOnClickListener {
   ...}
        full.setOnClickListener {
   
            nplayer.pause()
            loadFullScreen()
        }        
        ...
    }

我来个暂停,转班。
👩🏻:什么班?
🤓:全屏班。

  • loadFullScreen():
    fun loadFullScreen() {
   
        lgd("\n.\n==> Full Screen Fragment Mode <==\n.\n")
        compact.visibility = View.GONE
        val fragment = FullScreenFragment.newInstance()
        val mTransaction = fragmentManager.beginTransaction()
        mTransaction.replace(R.id.full_FL, fragment
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值