Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MVP Mobile Player App #2

Closed
criticaltv opened this issue Jan 2, 2020 · 37 comments
Closed

MVP Mobile Player App #2

criticaltv opened this issue Jan 2, 2020 · 37 comments

Comments

@criticaltv
Copy link
Collaborator

criticaltv commented Jan 2, 2020

Overview

This is a proposal for an Minimum Viable Product Mobile Player App, for playing content from the Streaming Back-End. It aims to provide a minimal basic starting video app for viewers on mobile.

Test Signal

First, to show you that I'm serious, I have provided a test signal = stream of video content as HLS over HTTP.

http://52.29.226.43:8935/stream/hello_world.m3u8

You can play this stream of video content using something like ffplay, and many (but not all) browsers will play natively.

image

What is Streaming Back-End?

Now that you know I'm serious, let me tell you what I mean by an Streaming Back-End.

Streaming Back-End is a server-based video infrastructure platform which can:

  • receive streaming AV content from any peer on the network, and
  • serve streaming AV content to any peer on the network

If the server is publicly accessible, it can provide these services to any internet user.

You can find out more in the project's github repo.

Mobile App User Journey

Here is a proposed user journey for an MVP mobile app:

  1. User installs app
  2. User taps launcher
  3. App turns on player of a hardcoded stream, in full screen *
  4. User taps screen
  5. App turns off player, closes app.
  • volume can be controlled by hardware buttons, no need for play/pause, or mute, or seeking back

For iOS or Android?

Obviously, both. Absolutely.

Specific Deliverables for Android App:

  • .apk file with a unique bundle ID, and file size less than 100MB

  • a signed app release.

    • This requires a signing certificate, for info on how to do this check here.
  • Codebase and .apk published in this current Github repository under /player/mobile/app/android.

Must work on Android 6.0 upwards.

Specific Deliverables for iOS App:

  • App submitted to testflight for testing.
@criticaltv criticaltv changed the title MVP Mobile Player App Inifnite Permissionless Digital Stage - MVP Mobile Player App Jan 2, 2020
@gitcoinbot
Copy link

Issue Status: 1. Open 2. Started 3. Submitted 4. Done


This issue now has a funding of 0.5 ETH (64.96 USD @ $129.92/ETH) attached to it.

@criticaltv criticaltv changed the title Inifnite Permissionless Digital Stage - MVP Mobile Player App Infinite Permissionless Digital Stage - MVP Mobile Player App Jan 2, 2020
@gitcoinbot
Copy link

gitcoinbot commented Jan 2, 2020

Issue Status: 1. Open 2. Started 3. Submitted 4. Done


Work has been started.

These users each claimed they can complete the work by 4 weeks, 1 day from now.
Please review their action plans below:

1) tcrowe has applied to start work (Funders only: approve worker | reject worker).

I would like to attempt this using React Native to begin with and then dropping to lower level Java and Swift if there is not a suitable existing control, or plugin, to display the video format. I have some experience with binary formats, parsers, and serialization. Preferably the bounty could be increased since there is some difficulty in it. I promise to succeed or fail fast and not leave you in the dark about progress. Thank you for your consideration.
2) mul1sh has been approved to start work.

I will develop an android app that is capable of playing the live streams via the google exo-player in kotlin. I will also do the same for iOS using swift, should be done in a few hours.
3) acolytec3 has applied to start work (Funders only: approve worker | reject worker).

I'll leverage the Flutter framework to build an app that meets the criteria in the issue description that deploys to both Android and iOS from a single build pipeline.

Learn more on the Gitcoin Issue Details page.

@criticaltv
Copy link
Collaborator Author

@tcrowe I want to be sure that the app will be as simple as outlined.

Minimal in the extreme. Without any embellishments. Turn TV on. Turn TV off.

Can you please confirm?

Also, can you do both apps?

Re: budget, what do you have in mind?

@tcrowe
Copy link

tcrowe commented Jan 2, 2020

I want to be sure that the app will be as simple as outlined. Minimal in the extreme. Without any embellishments. Turn TV on. Turn TV off. Can you please confirm?

Confirmed! To accomplish Android and iOS it helps to have React Native bootstrap the app in one codebase. On top of that I can implement the video format.

With all caveats: apk can be generated 👍, iOS requires Apple app store approval, and etc. I have OSX which can run the iOS emulator.

It might be possible to tap into this plugin:
https://github.com/react-native-community/react-native-video

Re: budget, what do you have in mind?

IMO, the real cost will be somewhere about 5-11 ETH. Sometimes people are either increasing the bounty or using Gitcoin tip after. If you want to know more about my reasoning we can jump in a chat. Even if you don't select me we can still chat about how to increase the success of the task.

Was that helpful?

@criticaltv
Copy link
Collaborator Author

Thank you. Very helpful.

Your react-native-video link looks interesting. But what about tvOS? Do you think it's possible to use the same framework for Android, iOS and tvOS? See below:

https://github.com/react-native-community/react-native-video/blob/master/README.md#tvos-installation

In terms of budget, that was more than I was thinking. Perhaps it's better left to a relative beginner. What do you think?

Also, you should take a look at this

https://github.com/criticaltv/infinite-permissionless-digital-stage/

It's the back end to this app.

It's solid-as-a-rock. Built on Livepeer. Do you have any Livepeer Tokens? Do you want some? #LPT.

@criticaltv
Copy link
Collaborator Author

For now, here's where I'm at for the .apk

https://s3.amazonaws.com/gonativeio/static/5e0e4d0069463a2822fc2d84/app-release.apk

@tcrowe
Copy link

tcrowe commented Jan 3, 2020

Do you think it's possible to use the same framework for Android, iOS and tvOS?

That is an interesting possibility! My only experience with React Native are a few apps for Android and iOS. We did not use it for other platforms but it does support many others now.

In terms of budget, that was more than I was thinking. Perhaps it's better left to a relative beginner. What do you think?

I would say yes, especially if you're patient. We can find out if that project has a sample repo and try to reduce costs by forking, customizing, and re-deploying. What I have found is that there is a significant amount of finagling tools to get everything to work, testing, and reloading emulators. It is equally time consuming to the amount of code they write.

@criticaltv
Copy link
Collaborator Author

Would you accept payment based on deliverables including successful publication of 1 app to each of Android and iOS stores, with a success bonus based on 1 app public to tvOS?

@criticaltv
Copy link
Collaborator Author

Also, do you know anything about integrating crypto burner wallets with Connext? I want viewers to eventually have to pay for content, direct to publisher, by the second.

@tcrowe
Copy link

tcrowe commented Jan 3, 2020

It's solid-as-a-rock. Built on Livepeer. Do you have any Livepeer Tokens? Do you want some? #LPT.

I have been following the development of livepeer and the ecosystem. I have not yet participated with the community although I would like to.

Would you accept payment based on deliverables including successful publication of 1 app to each of Android and iOS stores, with a success bonus based on 1 app public to tvOS?

That is why I included the caveats above. It is necessary to go through an "App store checklist" to make sure the app is worthy enough for their app store. And then they have automated and human checks. Nobody here should guarantee it will be accepted into the app stores. ⚠️

I can say that we have some confidence we can create these apps. That plugin has some support for HLS, playlist file & URL, streaming and some other interesting features.

It will help our chances to be accepted if together we are mindful that it has to work and have a slick appearance from a marketing perspective. That means, logos, icons, loading screen(if any), sample images, sample video, and text written by literate people. (No offense to English-as-a-second-language people. It is what it is.)

Also, do you know anything about integrating crypto burner wallets with Connext? I want viewers to eventually have to pay for content, direct to publisher, by the second.

Can you provide some more information? I will have to look into it. I have done some bounties for web3.js used with much of the Ethereum integration. At least I could say I'm probably familiar with the concepts.

Is there an API you can tap into for mobile payments and tips? Like app-to-app on the same device?

@criticaltv
Copy link
Collaborator Author

criticaltv commented Jan 3, 2020

That means, logos, icons, loading screen(if any), sample images, sample video, and text written by literate people. (No offense to English-as-a-second-language people. It is what it is.)

My written English is quite good. I can also provide images.

I may also be able to provide an upcoming band in Berlin (Tolyqyn) who are interested in experimenting with this as a way to share their creativity.

Can you provide some more information? I will have to look into it. I have done some bounties for web3.js used with much of the Ethereum integration. At least I could say I'm probably familiar with the concepts.
Is there an API you can tap into for mobile payments and tips? Like app-to-app on the same device?

I would first look at @austintgriffith burner wallet - as the base level wallet. He says it's "pretty gross". Here it is: https://github.com/austintgriffith/burner-wallet

Then, Austin recommended https://burnerfactory.com and @dmihal

Then I would look at Connext 2.0 for the fast stuff. Talk to @ArjunBhuptani

And finally, also look at the other issue in this repo: https://github.com/criticaltv/infinite-permissionless-digital-stage/issues/3

So, I'm now imagining "Tolyqyn TV" app on Apple TV, showing a 0 balance, and an ETH address for sending money, to start the stream, and pay per second, direct to publisher.

And this would be available to everyone.

@criticaltv
Copy link
Collaborator Author

criticaltv commented Jan 3, 2020

@mul1sh I am interested in your proposed approach with Kotlin and exo-player. I had also seen that as an option.

Can you confirm that it could really be as simple as:

"tap launcher to turn TV on, tap screen to turn TV off, nothing else"?

Question 1: would this be for Android only, or could it also work on iOS and perhaps even tvOS? Multi-platform support is looking increasingly important.

Question 2: What about support for web3 payments? Are you up to speed with it? This will likely feature in the future roadmap.

@mul1sh
Copy link

mul1sh commented Jan 3, 2020

@criticaltv yes it will be as simple as that 🙂 and to answer you.

  1. Yes this will be for android only, for iOS I would use swift and the AVFoundation class to playback the livestream. The reason for this is so that I'm able to enable hardware acceleration to enable faster decoding of the streams. But if multi-platform is what you want I can also do it in flutter and get it done.

  2. Yes i'm very much able to support web3 payments. This will actually be very easy to implement since metamask is already supported in mobile for both android and ios.

So anyway let me know what you think of this and I can even get it done later today to your satisfaction, if approved. Thanks.

@criticaltv
Copy link
Collaborator Author

Here are some further thoughts and mockups on how a user journey might look:

  1. Device shows user the App Launcher

image

  1. User taps the App Launcher

  2. App loads, initially showing blank black screen, until there is some content.

  3. App loads stream and immediately displays it on full screen:

image

The user should not be required to take any action to put the content full screen

  1. User taps the Screen anywhere

  2. App closes, back to 1.

@mul1sh
Copy link

mul1sh commented Jan 3, 2020

@criticaltv awesome, if you approve me, I can get this working for both ios and android in a few hours. 🙂

@criticaltv
Copy link
Collaborator Author

@mul1sh I have approved you to start work. Welcome to Video DAC!

If you would like to join the community chat: https://t.me/videoDAC

Also, you might be interested in creating your own test signal using this: https://github.com/criticaltv/infinite-permissionless-digital-stage/

@mul1sh
Copy link

mul1sh commented Jan 3, 2020

@criticaltv awesome thanks for the approval, working in this now 🙂. A question, should I use swift and kotlin to develop the app? This will mean 2 separate codebases but the app will perform very well.

@criticaltv
Copy link
Collaborator Author

Will it not perform well with Flutter?

@mul1sh
Copy link

mul1sh commented Jan 3, 2020

Flutter for now only supports WebRTC for live streams, see https://stackoverflow.com/questions/54988284/flutter-live-streaming

So to get it working in flutter, I would need to create a package that will launch exo-player for android for the hls streams playback and launch an AVFoundation media player for ios playback, so essentially doing the same thing. So no the functionality is not yet supported in flutter but adding a plugin to do this is not hard.

The performance would also be great, since in each platform would be using the native player. So no huge difference really.

@criticaltv
Copy link
Collaborator Author

OK, so it sounds like the options are:

  1. Single codebase to maintain - [ Flutter ] + [ exo-player for Android | AVFoundation for iOS ]

  2. 2 codebases to maintain - [ Kotlin + exo-player for Android ] | [ Swift + AVFoundation ]

Did I understand it right?

If so, my question is: which option will be easier to add in Wallet integration to later?

@mul1sh
Copy link

mul1sh commented Jan 3, 2020

@criticaltv yes correct, you have it right.

As for wallet integration, flutter would still be the easiest than supporting both kotlin & swift. In fact there is already a package which supports web3 in flutter https://pub.dev/packages/web3dart. It doesn't have all the features but the necessary functionalities needed for wallet integration and management are available.

@criticaltv
Copy link
Collaborator Author

Right, and there also seem to be people in the Flutter community talking about WatchOS and tvOS... it would be very cool if in future that apps could be published to these platforms.

So, what is your recommendation?

@mul1sh
Copy link

mul1sh commented Jan 3, 2020

I would recommend flutter right away, because of the single code base which is much easier to maintain and also since it performs as good as native apps even with complex animations e.t.c the app will perform as expected.

As for Watch and Tv support, I don't think this is possible in flutter for now, this article explains it better https://medium.com/flutter-community/what-flutter-cant-do-limitations-ed185c89fb61. So if you want support for these platforms from the onset then I would highly recommend we stick to separate kotlin/swift projects instead of flutter.

@criticaltv
Copy link
Collaborator Author

Will [ Swift + AVFoundation ] work for tvOS and WatchOS?

@mul1sh
Copy link

mul1sh commented Jan 3, 2020

Yep it will any new xcode swift project already supports WatchOS and TvOS by default so integrating them wouldn't be an issue.

@criticaltv
Copy link
Collaborator Author

OK, so, let's stick with the single code base and Flutter - if this means that we can more quickly get wallet integrated later on both platforms - this is the panacea I'm going after.

And let's deal with WatchOS and tvOS in another project - while they may appear to be quite niche, they might be lucrative for selling apps (essentially selling a viewer easy-access to a channel) and also for pay-as-you-go streaming. It might also be a challenge getting them into the Apple TV and Apple Watch stores.

@mul1sh
Copy link

mul1sh commented Jan 3, 2020

Awesome sounds great, will alert you in a few hours then, when the MVP is ready for testing.

@criticaltv
Copy link
Collaborator Author

I have to share this...

You will have to download and unzip it - but inside is a .apk file for v0.1 of the MVP Mobile Player app, for installation on Android devices

video_dac v0.1.zip

An app is born, into the world!

Feedback please.

I have one request already - which is to make any padding black, not white.

image

@criticaltv
Copy link
Collaborator Author

New release just shipped!

The apk is a massive 4.3Mb

video_dac v0.2.zip

@criticaltv criticaltv changed the title Infinite Permissionless Digital Stage - MVP Mobile Player App Infinite Digital Stage - MVP Mobile Player App Jan 3, 2020
@criticaltv
Copy link
Collaborator Author

Minor request - please can you publish the app using the following source HLS:

ffplay http://52.29.226.43:8935/stream/hello_world.m3u8

@gitcoinbot
Copy link

Issue Status: 1. Open 2. Started 3. Submitted 4. Done


Work for 0.5 ETH (66.58 USD @ $133.17/ETH) has been submitted by:

  1. @mul1sh

@criticaltv please take a look at the submitted work:


@gitcoinbot
Copy link

Issue Status: 1. Open 2. Started 3. Submitted 4. Done


The funding of 0.5 ETH (66.58 USD @ $133.17/ETH) attached to this issue has been approved & issued to @mul1sh.

@criticaltv
Copy link
Collaborator Author

I am trying to upload the app to Google Play, and it's showing me this:

image

@tcrowe
Copy link

tcrowe commented Jan 10, 2020

How did it go, guys? What's the best way for me to watch progress on the project? I'm working on an audio project that can benefit from some things you're doing here.

@criticaltv
Copy link
Collaborator Author

@tcrowe, yes, we're still on this. The code is there on GitHub.com/VideoDAC/apps

We have an app waiting in line for Google play, which is literally just "turn stream on, turn stream off" for a single channel served by an Infinite Digital Stage. Starting small, with a test signal.

And we are also developing this concept: https://github.com/videoDAC/infinite-digital-stage/issues/3 around getting paid in real-time for live audio visual publishing and broadcasting. Viewer direct to creator. Peer to peer. Decentralised.

What is the audio project? Do you have a repo? Or a brief? Anything with music?

@criticaltv
Copy link
Collaborator Author

criticaltv commented Jan 11, 2020

Also @tcrowe, you can talk to us on VideoDAC Telegram Channel.

@criticaltv
Copy link
Collaborator Author

@mul1sh is also working here: videoDAC/android#3

@chrishobcroft chrishobcroft changed the title Infinite Digital Stage - MVP Mobile Player App MVP Mobile Player App Mar 10, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants