Comments (10)
@janpio, Thank you for such a quick reply!
I looked through the XCode logs and got crashing error "*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Seeking is not possible to time {INVALID}'" and a SO comment suggested that Content-Length
and Content-Range
might not be correctly setted thus seekToTime crashes.
I'll open a issue on cordova-plugin-ionic-webview
to see what can be changed to properly set the request header for local files and see if that change actually helps.
Thanks again!
from cordova-plugin-media.
Maybe you can also confirm the behavior by having a small PHP script return a "media file" without those headers and one with the appropriate headers - then we are sure that is the reason for this problem and can close this here as it is definitely caused by the server.
from cordova-plugin-media.
If you're using the media plugin to playback your audio you need to give it a native local file path to the local file.
If you're using the html5 audio tag to play then you can use the http:// url that goes through the local webserver.
Note there were some issues with the ionic webview where the local server was not providing range headers which caused seeking in a file to fail.
from cordova-plugin-media.
That is very much possible.
Is it possible to debug/understand the requests made from the plugin to the local server?
Did you debug the requests made to a remote URL and compare?
Also, did you open an issue with cordova-plugin-ionic-webview
? They probably know better how their webserver works or doesn't work so might be more suited to give you an answer.
from cordova-plugin-media.
I have checked the headers that are sent by WebServer and it's correctly setting Content-Length containing size of audio file in bytes however doesn't set Content-Range because file itself is totally server and not streamed in chunks thus previous StackOverflow comment doesn't apply in this case.
Just for further reference in case anyone experiences same issue.
I hard-coded one value timeScale
which seems to be 0 or nil to 600 which seems to be working just fine.
It seems that AVPlayer doesn't seem to set currentItem.asset.duration
.
That was a dirty fix, however a more elegant solution would be to check if avPlayer.currentItem.asset.duration
and avPlayer.currentItem.asset.duration.timescale
itself are valid if not then use a hard-coded value.
Thus following lines would change from:
cordova-plugin-media/src/ios/CDVSound.m
Lines 579 to 580 in a006da3
Then dirty fix applied would look like this:
int32_t timeScale;
CMTime duration = avPlayer.currentItem.asset.duration;
if (CMTIME_IS_INVALID(duration)) {
timeScale = 600;
} else {
timeScale = duration.timescale;
}
from cordova-plugin-media.
Uh, you lost me. What does `timeScale´ represent?
from cordova-plugin-media.
I also had trouble understanding timescale
but think of it as Frames Per Second as this other StackOverflow response better explains.
avPlayer.currentItem.asset.duration
is a structure which holds value
and timescale
when used both one is capable of computing the actual duration of a song.
from cordova-plugin-media.
Note there were some issues with the ionic webview where the local server was not providing range headers which caused seeking in a file to fail.
@ghenry22, this was the problem, when ionic webview served the files the range headers where not properly set hence the crash.
Has this issue been fixed since in ionic webview?
from cordova-plugin-media.
@CVeniamin it was fixed on iOS, not sure if it was ever an issue on Android. However, the very latest version of the plugin removes the build in webserver for iOS and uses special schema's instead. I haven't tested this most recent change yet personally.
from cordova-plugin-media.
@ghenry22, I also haven't updated cordova-plugin-ionic-webview
because there are a few "breaking" changes, however I'll have too do it sooner than later.
I only experienced this problem on iOS because on android I do not use cordova-plugin-ionic-webview
in combination with cordova-plugin-media
.
Said that, I think it's adequate to close this issue hence it has been fixed for iOS.
from cordova-plugin-media.
Related Issues (20)
- In Android include webView cookies for streaming in setDataSource()
- Do you support Electron? HOT 2
- Detection of missing microphone access permission HOT 2
- Android 12 (api 31-32) - audio not playing error 1 HOT 8
- Get frame(s) from Video stream HOT 1
- Document preference value "KeepAVAudioSessionAlwaysActive" used in config.xml
- Android: play & seekTo => error (-38, 0), start called in state 4
- Audio stream starts delay
- Error on install "cordova-plugin-media" - Cannot find plugin.xml HOT 11
- ios only: sound not playing when app is in background and some other app has sound on
- Can't record audio on app targeting Android 13 due to plugin requesting WRITE_EXTERNAL_STORAGE permission (which always fails) HOT 10
- Exception when Play Sound Android API v33 HOT 6
- Can't play in background
- i can't play audio in cordova 12 HOT 14
- i can't play audio
- I want to use a cordova plugin in a capacitor project. But import doesn't work. And I cannot find instructions how to use it. I installed npm i cordova-plugin-dbmeter old code would use import { DBMeter } from 'cordova-plugin-dbmeter'; But that gives an error. I don't know what to do to make this part work: constructor(private dbMeter: DBMeter, ... And I find different options: create capacitor plugin, create a wrapper, or call directly. I cannot find in which cases you should do what. But whatever I try, I cannot get it to work. Can there be more examples for using cordova-plugins in capacitor-code? HOT 1
- Audio from other app is not returning to continue playing after sound from plugin finish playing HOT 5
- Android 14 Won't Play MP3 files
- Failed to start recording using AVAudioRecorder: (null) code:1 HOT 1
- Anomalous Permission Usage (for RECORD_AUDIO permission)
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from cordova-plugin-media.